- Szükséges alkatrészek
- Áramkör diagram és magyarázat
- Ujjlenyomat-érzékelő működtetése PIC mikrokontrollerrel
- Programozási magyarázat
Az ujjlenyomat-érzékelő, amelyet néhány évvel ezelőtt a Sci-Fi filmekben láttunk, ma már nagyon elterjedt az adott személy személyazonosságának ellenőrzésére különféle célokból. Jelenleg mindennapi életünkben mindenhol láthatunk ujjlenyomat-alapú rendszereket, például az irodákban való részvétel, az alkalmazottak ellenőrzése a bankokban, a készpénzfelvétel vagy az ATM-be történő befizetés, az identitás ellenőrzése a kormányhivatalokban stb. Már összekapcsoltuk az Arduinóval a Raspberry Pi-vel ma összekapcsoljuk az ujjlenyomat-érzékelőt a PIC mikrovezérlővel. Ezzel a PIC16f877A ujjlenyomat-rendszer PIC mikrovezérlővel új ujjlenyomatokat regisztrálhatunk a rendszerbe, és törölhetjük a már betáplált ujjlenyomatokat. A rendszer teljes működését a Videó mutatja a cikk végén található.
Szükséges alkatrészek
- PIC16f877A mikrovezérlő
- Ujjlenyomat modul
- Nyomja meg a gombokat vagy a billentyűzetet
- 16x2 LCD
- 10 ezer fazék
- 18,432000 MHz kristályoszcillátor
- Bread Board vagy PCB (megrendelt JLCPCB-től)
- Jumper huzalok
- LED (opcionális)
- Ellenállás 150 ohm -1 k ohm (opcionális)
- 5v tápegység
Áramkör diagram és magyarázat
Ebben a PIC mikrokontroller ujjlenyomat-érzékelő interfész projektjében 4 nyomógombot használtunk: ezeket a gombokat többfunkciós működésre használják. Az 1. kulcs az ujjlenyomat és az ujjlenyomat-azonosító növelésére szolgál, miközben az ujjlenyomatot a rendszerben tárolja vagy törli. A 2. billentyű az új ujjlenyomat bejegyzésére és az ujjlenyomat-azonosító csökkentésére szolgál, miközben az ujjlenyomatot a rendszerben tárolja vagy törli. A 3-as gomb a tárolt ujj törlésére szolgál a rendszerből, a 4-es pedig az OK-ra. A LED az ujjlenyomat észlelésének vagy egyeztetésének jelzésére szolgál. Itt egy ujjlenyomat-modult használtunk, amely az UART-on működik. Tehát itt összekötöttük ezt az ujjlenyomat-modult a PIC mikrovezérlővel az alapértelmezett átviteli sebességével, amely 57600.
Tehát először is meg kell tennünk az összes szükséges kapcsolatot az alábbi áramköri ábra szerint. A csatlakoztatás egyszerű, most csatlakoztattuk az ujjlenyomat-modult a PIC mikrokontroller UART-jához. 16x2 LCD-t használnak az összes üzenet megjelenítésére. 10k potot is használnak az LCD-vel annak kontrasztjának szabályozására. 16x2 LCD adatcsapok csatlakoznak a PORTA csapokhoz. Az LCD d4, d5, d6 és d7 érintkezői a PIC mikrokontroller RA0, RA1, RA2 és RA3 csatlakozóival vannak összekötve. Négy nyomógomb (vagy kezelő) csatlakozik a PORTD RD0, RD1, RD2 és RD csatlakozóihoz. A LED a PORTC RC3 csatlakozójánál is csatlakozik. Itt egy 18,432000 MHz-es külső kristályoszcillátort használtunk a mikrovezérlő órájának megadásához.
Ujjlenyomat-érzékelő működtetése PIC mikrokontrollerrel
A projekt működése egyszerű: csak feltölti a forráskódból létrehozott hexadecimális fájlt a PIC mikrovezérlőbe egy PIC programozó vagy író (PIckit2 vagy Pickit3 vagy mások) segítségével, majd néhány intro üzenetet fog látni az LCD-n keresztül, majd a felhasználó meg kell adnia a műveletek választását. Az ujjlenyomatnak való megfelelés érdekében a felhasználónak meg kell nyomnia az 1 gombot, majd az LCD kéri az Ujj elhelyezése az ujjlenyomat-érzékelőre lehetőséget. Most egy ujjal az ujjlenyomat-modul fölé helyezve ellenőrizhetjük, hogy az ujjlenyomatunk már tárolva van-e vagy sem. Ha az ujjlenyomatát tárolja, akkor az LCD megjeleníti az ujjlenyomat-szerű ' ID: 2' azonosítót tartalmazó üzenetet, különben a 'Not Found' felirat jelenik meg .
Az ujjlenyomat regisztrálásához a felhasználónak meg kell nyomnia a regisztrációs gombot vagy a 2 gombot, és követnie kell az LCD képernyőn megjelenő utasításokat.
Ha a felhasználó bármelyik ujjlenyomatot törölni kívánja , akkor a felhasználónak meg kell nyomnia a törlés gombot vagy a 3 gombot. Ezt követően az LCD kéri a törölni kívánt ujjlenyomat azonosítóját. Most a növekményes nyomógomb vagy az 1-es gomb (egyezési nyomógomb vagy 1-es gomb) és a csökkentési nyomógomb vagy a 2-es gomb (beírási nyomógomb vagy 2-es gomb) használatával a felhasználó kiválaszthatja az elmentett ujjlenyomat azonosítóját, majd nyomja meg az OK gombot gombot az ujjlenyomat törléséhez. A megértés érdekében nézze meg a projekt végén található videót.
FingerPrint interfészek Megjegyzés: A projekt programja egy kicsit összetett egy kezdő számára. De az egyszerű interfészkód az r305 ujjlenyomat-modul adatlapjának olvasásával készült. Az ujjlenyomat-modul működésére vonatkozó utasításokat az adatlap tartalmazza.
Itt egy keretformátumot használtunk az ujjlenyomat-modullal való beszélgetéshez. Amikor egy parancsot vagy adatkérési keretet küldünk az ujjlenyomat-modulnak, ugyanazzal a keretformátummal válaszol ránk, amely az alkalmazott parancshoz kapcsolódó adatokat vagy információkat tartalmaz. Az összes adat- és parancskeret-formátumot megadták a felhasználói kézikönyvben vagy az R305 ujjlenyomat-modul adatlapján.
Programozási magyarázat
A programozás során az alábbi keretformátumot használtuk.
A programot a konfigurációs bitek beállításával és az LCD, a Buttons és a LED makrók és csapok meghatározásával kezdjük, amelyeket a projekt végén megadott teljes kódban ellenőrizhet. Ha még nem ismeri a PIC mikrovezérlőt, akkor kezdje az Első lépések a PIC mikrovezérlővel című témakörrel.
Ezután deklaráltunk és inicializáltunk néhány változót és tömböt, és készítettünk egy keretet, amelyet ebben a projektben használnunk kell az ujjlenyomat-modul összekapcsolására a PIC mikrovezérlővel.
uchar buf; uchar buf1; illékony uint index = 0; illékony int zászló = 0; uint msCount = 0; uint g_timerflag = 1; illékony uint száma = 0; uchar adatok; uint id = 1; enum { CMD, ADATOK, 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};
Utána elkészítettük az LCD funkciót az LCD meghajtására.
void lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __késleltetési_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __késleltetési_ms (5); EN = 0; } Lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ késleltetés_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; for (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
A megadott függvény az UART inicializálásához használható
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // átviteli sebesség @ 18.432000Mhz óra TXSTAbits.SYNC = 0; // Aszinkron mód beállítása, azaz UART RCSTAbits.SPEN = 1; // Engedélyezi a TRISC7 = 1 soros portot ; // Az adatlapban előírt módon TRISC6 = 0; // Az adatlapban előírtak szerint RCSTAbits.CREN = 1; // Engedélyezi a folyamatos vételt TXSTAbits.TXEN = 1; // Engedélyezi a továbbítást GIE = 1; // az ENABLE megszakítja az INTCONbits.PEIE = 1; // A perifériás megszakítások engedélyezése. PIE1bits.RCIE = 1; // USART ENABLE engedélyezése, megszakítás PIE1bits.TXIE = 0; // letiltja a PIR1bits USART TX megszakítását.RCIF = 0; }
Adott funkciókat használnak a parancsok ujjlenyomat-modulba történő átviteléhez és az adatok fogadásához az ujjlenyomat-modulból.
void serialwrite (char ch) { while (TXIF == 0); // Várjon, amíg az adó regiszter ki nem ürül TXIF = 0; // Adójelző törlése TXREG = ch; // betölteni a char továbbítandó át adási reg } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } void megszakítás SerialRxPinInterrupt (void) { if (((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; if (index> 0) flag = 1; RCIF = 0; // rx flag törlése } } void serialFlush () { for (int i = 0; i
Utána létre kell hoznunk egy olyan funkciót, amely előkészíti az ujjlenyomatra továbbítandó adatokat, és dekódolja az ujjlenyomat-modulból érkező adatokat.
int sendcmd2fp (char * pack, int len) { uint res = HIBA; serialFlush (); index = 0; __késleltetési_ms (100); mert (int i = 0; i
Most négy funkció érhető el a kódban négy különböző feladathoz:
- Funkció az ujjlenyomat-azonosító beviteléhez - unit getId ()
- Funkció az ujj illesztésére - void matchFinger ()
- Funkció új ujj bejegyzéséhez - void enrolFinger ()
- Funkció az ujj törléséhez - void deleteFinger ()
A teljes kód mind a négy funkcióval a végén található.
Most a fő funkcióban inicializáljuk a GPIO-kat, az LCD-t, az UART-ot és ellenőrizzük, hogy az ujjlenyomat-modul mikrokontrollerrel van-e összekapcsolva. Ezután néhány bevezető üzenetet mutat az LCD-n keresztül. Végül a while ciklusban elolvassuk az összes billentyűt vagy nyomógombot a projekt működtetéséhez.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; sorozat kezdete (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("Ujjlenyomat"); lcdwrite (192, CMD); lcdprint ("Interfacing"); _delay_ms (2000); lcdwrite (1, CMD); lcdprint ("A PIC16F877A használata"); lcdwrite (192, CMD); lcdprint ("Circuit Digest"); _delay_ms (2000); index = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP nem található"); _delay_ms (2000); index = 0; } lcdwrite (1, CMD); lcdprint ("FP talált"); __késleltesms (1000); lcdinst (); míg (1) { FP = egyezik
A teljes PIC-kód és egy működő videó az alábbiakban található. Ujjlenyomat-érzékelő modul segítségével ellenőrizze más projektjeinket is:
- Ujjlenyomat-alapú biometrikus szavazógép Arduino segítségével
- Biometrikus biztonsági rendszer Arduino és ujjlenyomat-érzékelő használatával
- Ujjlenyomat-alapú biometrikus jelenléti rendszer Arduino segítségével
- Ujjlenyomat-érzékelő összekapcsolása a Raspberry Pi-vel