- Požadované komponenty
- Schéma zapojení a vysvětlení
- Provoz snímače otisků prstů s mikrokontrolérem PIC
- Vysvětlení programování
Snímač otisků prstů, který jsme před několika lety viděli ve sci-fi filmech, je nyní velmi běžný pro ověřování identity osoby pro různé účely. V současné době vidíme systémy založené na otiscích prstů všude v našem každodenním životě, jako je docházka v kancelářích, ověřování zaměstnanců v bankách, výběr hotovosti nebo vklady v bankomatech, ověřování identity ve vládních úřadech atd. Už jsme jej propojili s Arduino s Raspberry Pi dnes propojíme snímač otisků prstů s mikrokontrolérem PIC. Pomocí tohoto mikrokontroléru PIC PIC16f877A Finger Print System můžeme do systému zaregistrovat nové otisky prstů a odstranit již zavedené otisky prstů. Kompletní fungování systému bylo ukázáno na videu uveden na konci článku.
Požadované komponenty
- Mikrokontrolér PIC16f877A
- Modul otisků prstů
- Tlačítka nebo klávesnice
- 16x2 LCD
- 10k hrnec
- Krystalový oscilátor 18,432000 MHz
- Bread Board nebo PCB (objednáno u JLCPCB)
- Propojovací vodiče
- LED (volitelně)
- Rezistor 150 ohm -1 k ohm (volitelně)
- 5V napájecí zdroj
Schéma zapojení a vysvětlení
V tomto projektu propojení snímačů otisků prstů mikrokontroléru PIC jsme použili 4 tlačítka: tato tlačítka se používají pro multifunkční zařízení. Klíč 1 se používá pro porovnávání otisku prstu a zvýšení ID otisku prstu při ukládání nebo mazání otisku prstu v systému. Klíč 2 se používá pro registraci nového otisku prstu a pro snížení ID otisku prstu při ukládání nebo mazání otisku prstu v systému. Klíč 3 se používá k odstranění uloženého prstu ze systému a klíč 4 se používá pro OK. LED se používá k indikaci detekce nebo shody otisku prstu. Zde jsme použili modul otisků prstů, který funguje na UART. Zde jsme tedy propojili tento modul otisků prstů s mikrokontrolérem PIC při jeho výchozí přenosové rychlosti, která je 57600.
Nejprve tedy musíme provést všechna požadovaná připojení, jak je znázorněno na schématu níže. Připojení je jednoduché, právě jsme připojili modul otisků prstů k UART mikrokontroléru PIC. K zobrazení všech zpráv se používá 16x2 LCD. 10k hrnec se také používá s LCD pro ovládání jeho kontrastu. 16x2 LCD datové piny jsou připojeny PORTA piny. Piny LCD d4, d5, d6 a d7 jsou spojeny s Pin RA0, RA1, RA2 a RA3 mikrokontroléru PIC. Čtyři tlačítka (nebo klávesnice) jsou připojena k pinům PORTD RD0, RD1, RD2 a RD. LED je také připojena k portu RC3 na portu PORTC. Zde jsme použili hodinový mikrokontrolér s externím krystalovým oscilátorem 18,432000 MHz.
Provoz snímače otisků prstů s mikrokontrolérem PIC
Ovládání tohoto projektu je jednoduché, stačí nahrát hexadecimální soubor vygenerovaný ze zdrojového kódu do mikrokontroléru PIC pomocí PIC programátoru nebo vypalovače (PIckit2 nebo Pickit3 nebo další) a poté uvidíte některé úvodní zprávy přes LCD a poté uživatele budete vyzváni k zadání volby pro operace. Aby uživatel odpovídal otiskům prstů, musí stisknout klávesu 1, poté LCD požádá o vložení prstu na snímač otisku prstu. Nyní vložením modulu otisků prstů můžeme zkontrolovat, zda jsou naše otisky prstů již uloženy nebo ne. Pokud je váš otisk prstu uložen, na LCD displeji se zobrazí zpráva s ID ID otisku prstu jako „ ID: 2“, jinak se zobrazí „Not Found“ .
Nyní pro registraci otisku prstu musí uživatel stisknout tlačítko pro registraci nebo klávesu 2 a postupovat podle pokynů na obrazovce LCD.
Pokud chce uživatel odstranit některý z otisků prstů, musí stisknout tlačítko nebo klávesu 3 pro vymazání. Poté se na LCD displeji zobrazí výzva k identifikaci otisku prstu, který má být odstraněn. Nyní pomocí přírůstkového tlačítka nebo klávesy 1 (přiřazení tlačítka nebo klávesy 1) a snížení tlačítka nebo klávesy 2 (registrace tlačítka nebo klávesy 2) pro zvýšení a snížení může uživatel vybrat ID uloženého otisku prstu a stisknout OK tlačítko k odstranění tohoto otisku prstu. Pro více pochopení se podívejte na video uvedené na konci projektu.
Rozhraní FingerPrint Poznámka: Program tohoto projektu je pro začátečníka trochu složitý. Ale jeho jednoduchý kód rozhraní vytvořený pomocí čtení datového listu modulu otisků prstů r305. Veškeré pokyny k fungování tohoto modulu otisků prstů jsou uvedeny v datovém listu.
Zde jsme pro komunikaci s modulem otisků prstů použili formát rámečku. Kdykoli pošleme rámec příkazu nebo požadavku na data do modulu otisků prstů, odpoví nám stejným formátem rámce obsahujícím data nebo informace související s použitým příkazem. Všechny formáty datových a příkazových rámců jsou uvedeny v uživatelské příručce nebo v datovém listu modulu otisků prstů R305.
Vysvětlení programování
V programování jsme použili níže uvedený formát rámce.
Program začneme nastavením konfiguračních bitů a definováním maker a pinů pro LCD, tlačítka a LED, které můžete zkontrolovat v úplném kódu uvedeném na konci tohoto projektu. Pokud jste v mikrokontroléru PIC noví, začněte s Začínáme s projektem mikrokontroléru PIC.
Poté jsme deklarovali a inicializovali nějakou proměnnou a pole a vytvořili rámec, který musíme v tomto projektu použít k propojení modulu otisků prstů s mikrokontrolérem PIC.
uchar buf; uchar buf1; index těkavých uintů = 0; příznak volatile int = 0; uint msCount = 0; uint g_timerflag = 1; počet volatilních uintů = 0; uchar data; uint id = 1; výčet { 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};
Poté jsme vytvořili funkci LCD pro řízení 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); // __ delay_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; pro (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Daná funkce se používá pro inicializaci UART
void serialbegin (uint přenosová rychlost) { SPBRG = (18432000UL / (dlouhý) (64UL * přenosová rychlost)) - 1; // přenosová rychlost @ 18,432000 MHz Clock TXSTAbits.SYNC = 0; // Nastavení asynchronního režimu, tj. UART RCSTAbits.SPEN = 1; // Povolí sériový port TRISC7 = 1; // Jak je předepsáno v datovém listu TRISC6 = 0; // Jak je předepsáno v datovém listu RCSTAbits.CREN = 1; // Povolí nepřetržitý příjem TXSTAbits.TXEN = 1; // Povolí přenos GIE = 1; // POVOLIT přerušení INTCONbits.PEIE = 1; // Povolit periferní přerušení. PIE1bits.RCIE = 1; // POVOLIT USART přijímat přerušení PIE1bits.TXIE = 0; // deaktivovat USART TX přerušení PIR1bits.RCIF = 0; }
Dané funkce se používají pro přenos příkazů do modulu otisků prstů a příjem dat z modulu otisků prstů.
void serialwrite (char ch) { while (TXIF == 0); // Počkejte, až se registr vysílače vyprázdní TXIF = 0; // Vymazat příznak vysílače TXREG = ch; // načte znak, který má být přenesen do přenosu reg } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } void interrupt SerialRxPinInterrupt (void) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; if (index> 0) flag = 1; RCIF = 0; // vymazat příznak rx } } void serialFlush () { for (int i = 0; i
Poté musíme vytvořit funkci, která připraví data, která mají být přenesena na otisk prstu, a dekódovat data pocházející z modulu otisků prstů.
int sendcmd2fp (char * pack, int len) { uint res = ERROR; serialFlush (); index = 0; __delay_ms (100); pro (int i = 0; i
Nyní jsou v kódu k dispozici čtyři funkce pro čtyři různé úkoly:
- Funkce pro zadání ID otisku prstu - jednotka getId ()
- Funkce pro přiřazení prstu - neplatná shodaFinger ()
- Funkce pro registraci nového prstu - void enrolFinger ()
- Funkce pro smazání prstu - void deleteFinger ()
Celý kód se všemi čtyřmi funkcemi je uveden na konci.
Nyní v hlavní funkci inicializujeme GPIO, LCD, UART a kontrolujeme, zda je modul otisků prstů připojen k mikrokontroléru nebo ne. Poté se na LCD zobrazí několik úvodních zpráv. Nakonec ve smyčce while přečteme všechny klávesy nebo tlačítka pro ovládání projektu.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; serialbegin (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint („otisk prstu“); lcdwrite (192, CMD); lcdprint ("Rozhraní"); __delay_ms (2000); lcdwrite (1, CMD); lcdprint ("Použití PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Circuit Digest"); __delay_ms (2000); index = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint („FP nebyl nalezen“); __delay_ms (2000); index = 0; } lcdwrite (1, CMD); lcdprint („Nalezeno FP“); __delay_ms (1000); lcdinst (); while (1) { FP = shoda
Níže je uveden kompletní kód PIC a funkční video. Zkontrolujte také naše další projekty pomocí modulu snímače otisku prstu:
- Biometrický hlasovací automat na základě otisků prstů pomocí Arduina
- Biometrický bezpečnostní systém využívající Arduino a snímač otisků prstů
- Biometrický docházkový systém založený na otisku prstu pomocí Arduina
- Rozhraní snímače otisků prstů s Raspberry Pi