- Požadované komponenty
- Schéma zapojenia a vysvetlenie
- Prevádzka snímača odtlačkov prstov s mikrokontrolérom PIC
- Vysvetlenie programovania
Snímač odtlačkov prstov, ktorý sme pred niekoľkými rokmi videli vo filmoch Sci-Fi, sa dnes stáva veľmi bežným na overovanie totožnosti osoby na rôzne účely. V súčasnosti môžeme v každodennom živote vidieť systémy založené na odtlačkoch prstov, ako napríklad dochádzka do kancelárií, overovanie zamestnancov v bankách, výber hotovosti alebo vklady v bankomatoch, overovanie totožnosti vo vládnych úradoch atď. Už sme ich prepojili s Arduinom a s Raspberry Pi dnes ideme prepojiť snímač odtlačkov prstov s mikrokontrolérom PIC. Pomocou tohto mikrokontroléra PIC PIC16f877A Finger Print System môžeme do systému zaregistrovať nové odtlačky prstov a odstrániť už vložené odtlačky prstov. Kompletné fungovanie systému bolo ukázané na videu uvedený na konci článku.
Požadované komponenty
- Mikrokontrolér PIC16f877A
- Modul odtlačkov prstov
- Tlačidlá alebo klávesnica
- 16x2 LCD
- 10k hrniec
- Kryštálový oscilátor 18,432000 MHz
- Chlebová doska alebo doska s plošnými spojmi (objednané u JLCPCB)
- Prepojovacie vodiče
- LED (voliteľné)
- Rezistor 150 ohm -1 k ohm (voliteľný)
- 5v napájanie
Schéma zapojenia a vysvetlenie
V tomto projekte prepojenia snímača odtlačkov prstov mikrokontroléra PIC sme použili 4 tlačidlá: tieto tlačidlá sa používajú na multifunkčné účely. Kľúč 1 sa používa na porovnávanie odtlačkov prstov a zvyšovanie ID odtlačkov prstov pri ukladaní alebo odstraňovaní odtlačkov prstov v systéme. Kľúč 2 sa používa na registráciu nového odtlačku prsta a na zníženie ID odtlačku prsta pri ukladaní alebo mazaní odtlačku prsta v systéme. Kľúč 3 sa používa na mazanie uloženého prsta zo systému a kľúč 4 sa používa na vymazanie. A LED sa používa na indikáciu zistenia alebo porovnania odtlačkov prstov. Tu sme použili modul odtlačkov prstov, ktorý funguje na UART. Takže tu sme prepojili tento modul odtlačkov prstov s mikrokontrolérom PIC pri jeho predvolenej prenosovej rýchlosti, ktorá je 57600.
Najskôr teda musíme urobiť všetko potrebné pripojenie, ako je to znázornené v schéme nižšie. Pripojenia sú jednoduché, práve sme pripojili modul odtlačkov prstov k UART mikrokontroléra PIC. Na zobrazenie všetkých správ sa používa 16x2 LCD. 10k hrniec sa používa aj s LCD na riadenie jeho kontrastu. Dátové kolíky 16 x 2 LCD sú spojené kolíky PORTA. Piny LCD d4, d5, d6 a d7 sú spojené s pinmi RA0, RA1, RA2 a RA3 mikrokontroléra PIC. Štyri tlačidlá (alebo klávesnica) sú pripojené k pinom PORTD RD0, RD1, RD2 a RD. LED je tiež pripojená k portu PORTC na kolíku RC3. Tu sme použili externý kryštálový oscilátor 18,432000 MHz na taktovanie mikrokontroléra.
Prevádzka snímača odtlačkov prstov s mikrokontrolérom PIC
Prevádzka tohto projektu je jednoduchá, stačí nahrať hexadecimálny súbor vygenerovaný zo zdrojového kódu do mikrokontroléra PIC pomocou programátora alebo napaľovačky PIC (PIckit2 alebo Pickit3 alebo ďalších) a potom uvidíte na LCD nejaké úvodné správy a potom používateľa budete požiadaní o zadanie voľby pre operácie. Ak chcete, aby užívateľ zodpovedal odtlačkom prsta, musíte stlačiť kláves 1, potom sa na LCD displeji zobrazí výzva na vloženie prsta do snímača odtlačkov prstov. Teraz vložením modulu na odtlačok prsta môžeme skontrolovať, či sú naše odtlačky prstov už uložené alebo nie. Ak je váš odtlačok prsta uložený, na LCD displeji sa zobrazí správa s ukladajúcim ID odtlačku prsta „ ID: 2“, inak sa zobrazí „Not Found“ .
Teraz, ak chcete zaregistrovať odtlačok prsta , musí užívateľ stlačiť tlačidlo alebo kláves 2 na registráciu a postupovať podľa pokynov na obrazovke LCD.
Ak chce užívateľ vymazať ktorýkoľvek z odtlačkov prstov, musí stlačiť tlačidlo alebo klávesu vymazania 3. Potom sa na LCD displeji zobrazí výzva na zadanie ID odtlačku prsta, ktorý sa má vymazať. Teraz pomocou prírastkového tlačidla alebo klávesu 1 (zhodné tlačidlo alebo klávesa 1) a dekrementačného tlačidla alebo klávesu 2 (registrácia tlačidla alebo klávesa 2) na prírastok a zníženie, môže užívateľ zvoliť ID uloženého odtlačku prsta a stlačiť OK tlačidlo na odstránenie tohto odtlačku prsta. Pre viac porozumenia si pozrite video uvedené na konci projektu.
Rozhranie FingerPrint Poznámka: Program tohto projektu je pre začiatočníka trochu zložitý. Ale jeho jednoduchý prepojovací kód vyrobený pomocou čítania údajového listu modulu odtlačkov prstov r305. Všetky pokyny týkajúce sa fungovania tohto modulu odtlačkov prstov sú uvedené v údajovom liste.
Tu sme na rozhovor s modulom odtlačkov prstov použili formát rámu. Kedykoľvek pošleme rámec príkazu alebo požiadavky na údaje do modulu odtlačkov prstov, odpovie nám rovnakým formátom rámca obsahujúcim údaje alebo informácie súvisiace s použitým príkazom. Všetky formáty dátových a príkazových rámcov sú uvedené v užívateľskej príručke alebo v údajovom liste modulu odtlačkov prstov R305.
Vysvetlenie programovania
V programovaní sme použili formát nižšie uvedeného rámca.
Program začíname nastavením konfiguračných bitov a definovaním makier a pinov pre LCD, tlačidlá a LED, ktoré môžete skontrolovať v úplnom kóde uvedenom na konci tohto projektu. Ak ste v mikrokontroléri PIC nováčikom, začnite časťou Začíname s projektom mikrokontroléra PIC.
Potom sme deklarovali a inicializovali nejakú premennú a pole a vytvorili rám, ktorý musíme v tomto projekte použiť na prepojenie modulu odtlačkov prstov s mikrokontrolérom PIC.
uchar buf; uchar buf1; index volatilných uintov = 0; príznak volatile int = 0; uint msCount = 0; uint g_timerflag = 1; počet volatilných uintov = 0; uchar údaje; uint id = 1; enum { 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};
Potom sme vytvorili funkciu LCD na riadenie 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; pre (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Daná funkcia sa používa na inicializáciu UART
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // prenosová rýchlosť @ 18,432000 MHz Hodiny TXSTAbits.SYNC = 0; // Nastavenie asynchrónneho režimu, tj. UART RCSTAbits.SPEN = 1; // Povolí sériový port TRISC7 = 1; // Ako je predpísané v údajovom liste TRISC6 = 0; // Ako je predpísané v údajovom liste RCSTAbits.CREN = 1; // Povolí nepretržitý príjem TXSTAbits.TXEN = 1; // Povolí prenos GIE = 1; // POVOLIŤ prerušenia INTCONbits.PEIE = 1; // Povoliť periférne prerušenia. PIE1bits.RCIE = 1; // POVOLIŤ USART prijímanie prerušenia PIE1bits.TXIE = 0; // zakázať prerušenie USART TX PIR1bits.RCIF = 0; }
Dané funkcie sa používajú na prenos príkazov do modulu odtlačkov prstov a prijímanie údajov z modulu odtlačkov prstov.
void serialwrite (char ch) { while (TXIF == 0); // Počkajte, kým sa register vysielača vyprázdni TXIF = 0; // Vymazať príznak vysielača TXREG = ch; // načítanie znaku, ktorý sa má preniesť do transmit 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) príznak = 1; RCIF = 0; // vyčistiť príznak rx } } void serialFlush () { for (int i = 0; i
Potom musíme urobiť funkciu, ktorá pripraví dáta, ktoré sa majú preniesť na odtlačok prsta, a dekódovať dáta pochádzajúce z modulu odtlačkov prstov.
int sendcmd2fp (char * pack, int len) { uint res = ERROR; serialFlush (); index = 0; __delay_ms (100); pre (int i = 0; i
V kóde sú teraz k dispozícii štyri funkcie pre štyri rôzne úlohy:
- Funkcia pre zadanie ID odtlačku prsta - jednotka getId ()
- Funkcia na priradenie prsta - neplatná zhodaFinger ()
- Funkcia na registráciu nového prsta - void enrolFinger ()
- Funkcia na odstránenie prsta - void deleteFinger ()
Celý kód so všetkými štyrmi funkciami je uvedený na konci.
Teraz v hlavnej funkcii inicializujeme GPIO, LCD, UART a kontrolujeme, či je modul odtlačkov prstov spojený s mikrokontrolérom alebo nie. Potom zobrazuje niektoré úvodné správy cez LCD. Konečne v roku , zatiaľ čo slučka čítame všetky kľúče, alebo tlačidiel pre ovládanie projektu.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; serialbegin (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint („odtlačok prsta“); lcdwrite (192, CMD); lcdprint ("prepojenie"); __delay_ms (2000); lcdwrite (1, CMD); lcdprint („Používanie PIC16F877A“); lcdwrite (192, CMD); lcdprint ("Prehľad okruhov"); __delay_ms (2000); index = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint („FP nenájdené“); __delay_ms (2000); index = 0; } lcdwrite (1, CMD); lcdprint („Nájdené FP“); __delay_ms (1000); lcdinst (); while (1) { FP = match
Kompletný PIC kód a pracovné video sú uvedené nižšie. Skontrolujte tiež naše ďalšie projekty pomocou modulu snímača odtlačkov prstov:
- Biometrické hlasovacie zariadenie založené na odtlačkoch prstov pomocou Arduina
- Biometrický bezpečnostný systém využívajúci Arduino a snímač odtlačkov prstov
- Biometrický dochádzkový systém založený na odtlačkoch prstov využívajúci Arduino
- Prepojenie snímača odtlačkov prstov s Raspberry Pi