[PROJEKT] Sejf otwierany odciskiem palca oparty o Arduino
Artykuł prezentuje projekt skarbonki wydrukowanej na drukarce 3D, zamykanej prostym mechanizmem opartym o serwo i zabezpieczonej czujnikiem linii papilarnych. Sejf oprócz otwierania i zamykania ma możliwość dodania nowych, a także kasowania zapamiętanych wzorców odcisków palców.
Do projektu potrzebne będą następujące elementy:
- Czujnik linii papilarnych DFRobot SEN0348,
- Serwomechanizm Tower Pro SG90,
- Arduino Pro Mini 3,3V 8MHz,
- Konwerter USB-UART 3,3V,
- Przycisk typu microswitch,
- Przełącznik dźwigniowy,
- Koszyk na 4 baterie AAA R3,
- Baterie / Akumulatory R3 (AAA) – 4 szt.,
- Przewody połączeniowe,
- Śruba M3,
- Kawałek cienkiego drutu albo przewodu typu kynar,
- Elementy wydrukowane na drukarce 3D.
Rys. 1. Wszystkie elementy projektu skarbonki
Rys. 2. Elementy sejfu wydrukowane na drukarce 3D
Czujnik linii papilarnych DFRobot SEN0348
Pojemnościowy czytnik linii papilarnych DFRobot SEN0348 oparty jest o wydajny mikroprocesor ID809 oraz algorytmy samouczące IDfinger6.0, dzięki którym każdy kolejny pomiar wykonywany jest jeszcze sprawniej. Identyfikacja za pomocą czujnika trwa około 300-400 ms. Natomiast komunikacja z czytnikiem odbywa się za pomocą interfejsu UART, co pozwala łatwo podłączyć go do Arduino lub do praktycznie dowolnego mikrokontrolera. Moduł wyposażony jest również w trzy kolorowe LEDy, mogące pracować w kilku trybach np. szybkiego migania czy efektu „oddychania” co pozwala w łatwy sposób sygnalizować status pracy urządzania. Dodatkową zaletą czujnika jest możliwość skanowania palca pod dowolnym kątem, co podkreśla okrągłe pole pomiarowe, bez wyróżnionego początku i końca.
Rys. 3. Czytnik linii papilarnych DFRobot SEN0348
Serwomechanizm Tower Pro SG90
Tani nieduży serwomechanizm Tower Pro SG90, o wymiarach 23 x 12 x 29 mm będzie pełnił rolę mechanizmu otwierającego. Oprócz serwa potrzebny będzie również orczyk z jednostronnym uchwytem oraz kawałek cienkiego drutu lub przewodu typu kynar.
Rys. 4. Serwomechanizm Tower Pro SG90
Arduino Pro Mini
Arduino Pro Mini z to płytka z mikrokontrolerem ATmega328 lub ATmega168 w wersji operującej na napięciu 3,3 V z taktowaniem 8 MHz. Zastosowanie Arduino w wersji 3,3 V pozwala na komunikację z czujnikiem linii papilarnych bez konieczności korzystania z konwertera poziomów logicznych.
Rys. 5. Arduino Pro Mini
Konwerter USB-UART ZL5USB może współpracować z sygnałami o napięciu 2,5-5,5 V dzięki czemu można go zastosować do programowania Arduino Pro Mini oraz komunikacji czujnika linii papilarnych z komputerem.
Rys. 6. Konwerter USB-UART ZL5USB
Przycisk typu microswitch służy do dodawania nowych wzorców odcisków palców, które będą otwierać sejf.
Rys. 7. Przycisk microswitch
Przełącznik dźwigniowy będzie umożliwiał odłączenie zasilania w celu oszczędzania energii.
Rys. 8. Przełącznik dźwigienkowy
Do zasilania mogą posłużyć trzy lub cztery baterie R3 (AAA) albo cztery akumulatory R3 (AAA), zamontowane w odpowiednim koszyczku.
Rys. 9. Koszyk z bateriami AA
Przygotowanie elementów
Do Arduino należy przylutować złącza tak, jak na zdjęciach powyżej. Natomiast do przycisku oraz przełącznika trzeba przylutować przewody. Czytnik linii papilarnych sprzedawany jest wraz z kabelkiem, który z jednej strony ma złącze pasujące do gniazda w czytniku, a z drugiej luźne przewody. Na tych przewodach należy zarobić wtyki typu BLT, lub w przypadku braku odpowiednich narzędzi, dolutować do nich przewody przeznaczone do płytek stykowych.
Testowanie czujnika linii papilarnych
Na początku warto sprawdzić działanie czujnika linii papilarnych. W tym celu można go podłączyć do komputera poprzez konwerter USB – UART.
Rys. 10. Rozkład wyprowadzeń czujnika linii papilarnych DFRobot
Czujnik linii papilarnych SEN0348 | Konwerter USB–UART ZL5USB |
GND (przewód czerwony) | GND |
RX (przewód czarny) | TX |
TX (przewód żółty) | RX |
VIN (przewód zielony) | +3V |
IRQ (przewód niebieski) | Nie podłączony |
3.3V (przewód biały) | +3V |
Należy zwrócić uwagę na podłączenie linii RX i TX, które muszą być połączone naprzemiennie: TX czujnika do RX konwertera i analogicznie. Natomiast wyprowadzenia VIN i 3.3V czujnika należy podłączyć do jednego wyprowadzenia +3V konwertera.
Rys. 11. Czujnik podłączony do konwertera USB-UART
Następnie należy podłączyć konwerter do komputera i sprawdzić do którego wirtualnego portu COM został przypisany. W tym celu należy uruchomić ustawienia komputera i wybrać kategorie urządzenia. W sekcji Inne urządzenia powinno się znajdować urządzenie Silicon Labs, a w nawiasie powinien znajdować się numer portu np. COM9.
Rys. 12. Urządzenia widoczne w systemie Windows
Program NOEM Host do komunikacji z czytnikiem
Następnie należy uruchomić program do odczytu danych z czujnika – NOEM Host (dostępny poniżej w sekcji Do pobrania) i ustawić odczytany numer portu COM. Jeżeli język w aplikacji ustawiony jest na chiński można go zmienić na angielski zaznaczając pole English w prawym górnym rogu ekranu. Wartość Baudrate czujnika domyślnie wynosi 115200. Po wciśnięciu przycisku Connect pozostałe przyciski powinny się odblokować. W przeciwnym wypadku należy sprawdzić czy czujnik i konwerter są poprawnie podłączone oraz czy parametry ComPort i Baudrate mają odpowiednie wartości.
Rys. 13. Program NOEM Host do obsługi czujnika na komputerze PC
Teraz można przystąpić do testowania czujnika. W tym celu należy wcisnąć przycisk Verify. W oknie Recived Result pojawi się prośba o przyłożenie palca do sensora, natomiast wbudowane diody zaczną świecić na niebiesko. Po przyłożeniu palca, w oknie Recived Result, pojawi się informacja o przesyłaniu obrazu do komputera, natomiast po chwili na ekranie ukaże się zeskanowany odcisk palca. Warto zauważyć, że całość trwa dość długo, jednak nie jest to wina czujnika, a niskiej prędkości interfejsu UART. Aby się o tym przekonać wystarczy odznaczyć pole Show Image i kliknąć Verify. Po przyłożeniu palca diody natychmiast zgasną, natomiast w oknie Recived Result pojawi się informacja Verify NG oznaczająca, że odczyt czujnika się zakończył i nie udało się odnaleźć pasującego do niego wzorca.
Za pomocą funkcji Enroll można dodać nowe wzorce. Wystarczy w polu ID wpisać numer tworzonego wzorca, następnie wcisnąć przycisk Enroll i zeskanować trzy razy ten sam palec. Następnie można sprawdzić rozpoznawanie odcisku, wybierając funkcję Verify i skanując odcisk palca. Jeżeli skanowanie przebiegło pomyślnie, w polu Recived Result pojawi się informacja o pomyślnej weryfikacji, numer dopasowanego wzorca, wynik funkcji samouczącej, a także czas całej operacji.
Zmiana prędkości komunikacji z czytnikiem
Program NOEM Host umożliwia również zmianę ustawień czujnika. Szczególnie przydatna może okazać się możliwość zmiany prędkości transmisji. Aby to zrobić, należy w polu Param Type ustawić Baudrate, a w polu Param Value prędkość, która ma zostać ustawiona np. 9600. Po wciśnięciu przycisku Set Param prędkość transmisji interfejsu UART zostanie zmieniona. Aby dalej korzystać z programu, należy połączyć się z czujnikiem ponownie wybierając ustawioną przed chwilą wartość.
Aplikacja NOEM Host zawiera jeszcze wiele przydatnych funkcji, które nie będą omawiane w tym artykule, ale warto się z nimi zapoznać.
Problemy z komunikacją czujnika z Arduino przez interfejs UART
Arduino Uno, Arduino Pro Mini, a także inne płytki Arduino oparte o mikrokontroler ATmega328, wyposażone są w jeden interfejs UART, który domyślnie służy do wgrywania programu do pamięci mikrokontrolera. Podłączenie czujnika do tego samego interfejsu, który służy do programowania, uniemożliwia poprawne wgranie programu, przez co konieczne staje się odłączanie czujnika za każdym razem, gdy wgrywa się nowy program. Aby uniknąć konieczności ciągłego podłączania i odłączania sensora, można zamienić Arduino z ATmegą 328 na Arduino Leonardo z układem ATmega32u4, które do komunikacji z komputerem używa wbudowanego portu USB. Drugą możliwością jest skorzystanie z emulacji interfejsu UART za pomocą biblioteki SoftwareSerial.h. Aby ograniczyć ilość potrzebnego sprzętu, w artykule opiszemy metodę z emulacją dodatkowego interfejsu UART.
Biblioteka SoftwareSerial.h ma jednak dwa znaczące ograniczenia. Po pierwsze może stabilnie działać jedynie z prędkością 9600, co w tym konkretnym przypadku nie wpłynie negatywnie na działanie, ale będzie wymagać zmiany prędkości transmisji czujnika. Drugim problemem jest konflikt biblioteki SoftwareSerial.h z biblioteką Servo.h. W opisywanym projekcie serwomechanizm jest elementem dodawanym na sam koniec. Podczas pisania programu można więc dla wygody najpierw skorzystać z biblioteki SoftwareSerial.h, a następnie usunąć ją z kodu dopiero w momencie dodawania obsługi serwomechanizmu.