- Wymagane komponenty
- Schemat obwodu i wyjaśnienie
- Działanie czytnika linii papilarnych z mikrokontrolerem PIC
- Objaśnienie programowania
Czujnik odcisków palców, który widzieliśmy w filmach science fiction kilka lat temu, jest teraz bardzo powszechny do weryfikowania tożsamości osoby w różnych celach. W dzisiejszych czasach możemy zobaczyć systemy oparte na odciskach palców w każdym miejscu naszego codziennego życia, np. Do obsługi urzędów, weryfikacji pracowników w bankach, do wypłat gotówki lub wpłat w bankomatach, do weryfikacji tożsamości w urzędach itp. Połączyliśmy go już z Arduino i z Raspberry Pi, dzisiaj będziemy łączyć czujnik odcisków palców z mikrokontrolerem PIC. Korzystając z tego mikrokontrolera PIC PIC16f877A Finger Print System, możemy zarejestrować nowe odciski palców w systemie i usunąć już wprowadzone odciski palców. Pełne działanie systemu zostało pokazane na wideo podane na końcu artykułu.
Wymagane komponenty
- PIC16f877A Mikrokontroler
- Moduł linii papilarnych
- Przyciski lub klawiatura
- Wyświetlacz LCD 16x2
- Pula 10k
- Oscylator kwarcowy 18.432000 MHz
- Bread Board lub PCB (zamawiane w JLCPCB)
- Przewody połączeniowe
- LED (opcja)
- Rezystor 150 ohm -1 k ohm (opcjonalnie)
- Zasilanie 5V
Schemat obwodu i wyjaśnienie
W tym projekcie połączenia czujnika odcisków palców PIC mikrokontrolera użyliśmy 4 przycisków: te przyciski służą do wielofunkcyjności. Klucz 1 służy do dopasowania odcisku palca i inkrementacji identyfikatora odcisku palca podczas przechowywania lub usuwania odcisku palca w systemie. Klucz 2 służy do zapisywania nowego odcisku palca oraz do zmniejszania identyfikatora odcisku palca podczas przechowywania lub usuwania odcisku palca w systemie. Klawisz 3 służy do usuwania zapisanego palca z systemu, a klawisz 4 do OK. LED służy do wskazania, że odcisk palca został wykryty lub dopasowany. Tutaj użyliśmy modułu linii papilarnych, który działa na UART. Więc tutaj połączyliśmy ten moduł linii papilarnych z mikrokontrolerem PIC z jego domyślną szybkością transmisji, która wynosi 57600.
Przede wszystkim musimy wykonać wszystkie wymagane połączenia, jak pokazano na poniższym schemacie obwodu. Połączenia są proste, właśnie podłączyliśmy moduł linii papilarnych do UART mikrokontrolera PIC. Do wyświetlania wszystkich komunikatów służy wyświetlacz LCD 16x2. Potencjometr 10k jest również używany z wyświetlaczem LCD do kontrolowania kontrastu tego samego. 16x2 pinów danych LCD jest połączonych pinami PORTA. Piny LCD d4, d5, d6 i d7 są połączone odpowiednio z pinami RA0, RA1, RA2 i RA3 mikrokontrolera PIC. Cztery przyciski (lub klawiatura) są podłączone do pinów RD0, RD1, RD2 i RD PORTD. Dioda LED jest również podłączona do styku RC3 portu PORTC. Tutaj użyliśmy zewnętrznego oscylatora kwarcowego 18,432000 MHz do taktowania mikrokontrolera.
Działanie czytnika linii papilarnych z mikrokontrolerem PIC
Działanie tego projektu jest proste, wystarczy załadować plik hex, wygenerowany z kodu źródłowego, do mikrokontrolera PIC za pomocą programatora lub palnika PIC (PIckit2 lub Pickit3 lub inne), a następnie pojawi się kilka komunikatów wprowadzających na wyświetlaczu LCD, a następnie użytkownik zostanie poproszony o wprowadzenie wyboru operacji. Aby dopasować odcisk palca, użytkownik musi nacisnąć klawisz 1, a wyświetlacz LCD poprosi o umieszczenie palca na czujniku odcisków palców. Teraz nakładając palec na moduł odcisków palców, możemy sprawdzić, czy nasze odciski palców są już zapisane, czy nie. Jeśli Twój odcisk palca jest przechowywany, na wyświetlaczu LCD pojawi się komunikat z zapisanym identyfikatorem w postaci „ ID: 2” w rodzaju odcisku palca, w przeciwnym razie zostanie wyświetlony komunikat „Nie znaleziono” .
Teraz, aby zarejestrować odcisk palca , użytkownik musi nacisnąć przycisk rejestracji lub klawisz 2 i postępować zgodnie z instrukcjami wyświetlanymi na ekranie LCD.
Jeśli użytkownik chce usunąć którykolwiek z odcisków palców, musi nacisnąć przycisk usuwania lub klawisz 3. Następnie wyświetlacz LCD zapyta o identyfikator odcisku palca, który ma zostać usunięty. Teraz, używając przycisku zwiększania lub klawisza 1 (przycisk dopasowania lub klawisz 1) i przycisku zmniejszania lub klawisza 2 (przycisk rejestracji lub klawisz 2) do zwiększania i zmniejszania, użytkownik może wybrać identyfikator zapisanego odcisku palca i nacisnąć OK przycisk, aby usunąć ten odcisk palca. Aby uzyskać więcej informacji, obejrzyj wideo zamieszczone na końcu projektu.
Interfejs FingerPrint Uwaga: Program tego projektu jest nieco skomplikowany dla początkującego. Ale jego prosty kod interfejsu utworzony za pomocą odczytu arkusza danych modułu odcisków palców r305. Wszystkie instrukcje dotyczące działania tego modułu czytnika linii papilarnych znajdują się w karcie katalogowej.
Tutaj użyliśmy formatu ramki do rozmowy z modułem linii papilarnych. Za każdym razem, gdy wysyłamy polecenie lub ramkę żądania danych do modułu linii papilarnych, odpowiada on nam tym samym formatem ramki zawierającym dane lub informacje związane z zastosowanym poleceniem. Wszystkie dane i format ramki poleceń zostały podane w instrukcji obsługi lub w arkuszu danych modułu czytnika linii papilarnych R305.
Objaśnienie programowania
Podczas programowania wykorzystaliśmy poniższy format ramki.
Program rozpoczynamy od ustawienia bitów konfiguracyjnych i zdefiniowania makr i pinów dla wyświetlacza LCD, przycisków i diody LED, które można sprawdzić w pełnym kodzie podanym na końcu tego projektu. Jeśli jesteś nowy w PIC Microcontroller, zacznij od Pierwsze kroki z projektem PIC Microcontroller.
Następnie zadeklarowaliśmy i zainicjowaliśmy pewną zmienną i tablicę oraz stworzyliśmy ramkę, której musimy użyć w tym projekcie, aby połączyć moduł linii papilarnych z mikrokontrolerem PIC.
uchar buf; uchar buf1; zmienny indeks uint = 0; volatile int flag = 0; uint msCount = 0; uint g_timerflag = 1; niestabilna liczba uint = 0; dane uchar; uint id = 1; wyliczenie { CMD, DATA, SBIT_CREN = 4, SBIT_TXEN, SBIT_SPEN, }; const char passPack = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x7, 0x13, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1B}; const char f_detect = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x3, 0x1, 0x0, 0x5}; const char f_imz2ch1 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x1, 0x0, 0x8}; const char f_imz2ch2 = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x4, 0x2, 0x2, 0x0, 0x9}; const char f_createModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x3,0x5,0x0,0x9}; char f_storeModel = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x6,0x6,0x1,0x0,0x1,0x0,0xE}; const char f_search = {0xEF, 0x1, 0xFF, 0xFF, 0xFF, 0xFF, 0x1, 0x0, 0x8, 0x1B, 0x1, 0x0, 0x0, 0x0, 0xA3, 0x0, 0xC8}; char f_delete = {0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF, 0x1,0x0,0x7,0xC, 0x0,0x0,0x0,0x1,0x0,0x15};
Następnie wykonaliśmy funkcję LCD do sterowania wyświetlaczem LCD.
void lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __delay_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __delay_ms (5); EN = 0; } Lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ opóźnienie_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; for (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Podana funkcja służy do inicjalizacji UART
nieważne serialbegin (uint szybkość transmisji) { SPBRG = (18432000UL / (długości) (64UL * szybkość transmisji)) - 1; // szybkość transmisji @ 18.432000Mhz Zegar TXSTAbits.SYNC = 0; // Ustawienie trybu asynchronicznego, np. UART RCSTAbits.SPEN = 1; // Włącza port szeregowy TRISC7 = 1; // Zgodnie z zaleceniami w arkuszu danych TRISC6 = 0; // Zgodnie z zaleceniami w arkuszu danych RCSTAbits.CREN = 1; // Włącza ciągły odbiór TXSTAbits.TXEN = 1; // Włącza transmisję GIE = 1; // WŁĄCZ przerwań INTCONbits.PEIE = 1; // Włącz przerwania peryferyjne. PIE1bits.RCIE = 1; // WŁĄCZ USART odebranie przerwania PIE1bits.TXIE = 0; // wyłącz przerwanie USART TX PIR1bits.RCIF = 0; }
Podane funkcje służą do przesyłania poleceń do modułu czytnika linii papilarnych i odbierania danych z modułu czytnika linii papilarnych.
void serialwrite (char ch) { while (TXIF == 0); // Poczekaj, aż rejestr nadajnika stanie się pusty TXIF = 0; // Wyczyść flagę nadajnika TXREG = ch; // załaduj znak do przesłania do transmisji reg } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } nieważne przerwanie SerialRxPinInterrupt (void) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; if (indeks> 0) flag = 1; RCIF = 0; // wyczyść flagę rx } } void serialFlush () { for (int i = 0; i
Następnie musimy wykonać funkcję, która przygotuje dane, które mają być przesłane do linii papilarnych i dekoduje dane pochodzące z modułu linii papilarnych.
int sendcmd2fp (char * pack, int len) { uint res = ERROR; serialFlush (); indeks = 0; __delay_ms (100); dla (int i = 0; i
Teraz w kodzie dostępne są cztery funkcje dla czterech różnych zadań:
- Funkcja wprowadzania identyfikatora odcisku palca - jednostka getId ()
- Funkcja dopasowania palca - void matchFinger ()
- Funkcja wpisywania nowego palca - void enrolFinger ()
- Funkcja usuwania palca - void deleteFinger ()
Na końcu podano pełny kod ze wszystkimi czterema funkcjami.
Teraz w funkcji głównej inicjalizujemy GPIO, LCD, UART i sprawdzamy, czy moduł linii papilarnych jest połączony z mikrokontrolerem czy nie. Następnie pokazuje kilka komunikatów wprowadzających na wyświetlaczu LCD. Wreszcie w podczas pętli czytamy wszystkie klawisze lub przyciski do obsługi projektu.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; serialbegin (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint („Odcisk palca”); lcdwrite (192, CMD); lcdprint ("Łączenie"); __delay_ms (2000); lcdwrite (1, CMD); lcdprint ("Korzystanie z PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Circuit Digest"); __delay_ms (2000); indeks = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("Nie znaleziono FP"); __delay_ms (2000); indeks = 0; } lcdwrite (1, CMD); lcdprint („Znaleziono FP”); __delay_ms (1000); lcdinst (); while (1) { FP = match
Pełny kod PIC i roboczy film wideo są podane poniżej. Sprawdź również nasze inne projekty wykorzystujące moduł czujnika odcisków palców:
- Biometryczna maszyna do głosowania oparta na odciskach palców przy użyciu Arduino
- Biometryczny system bezpieczeństwa wykorzystujący Arduino i czytnik linii papilarnych
- Biometryczny system obecności oparty na odciskach palców przy użyciu Arduino
- Interfejs czytnika linii papilarnych z Raspberry Pi