- Reikalingi komponentai
- Grandinės schema ir paaiškinimas
- Pirštų atspaudų jutiklio veikimas su PIC mikrovaldikliu
- Programavimo paaiškinimas
Pirštų atspaudų jutiklis, kurį prieš keletą metų matėme „Sci-Fi“ filmuose, dabar tampa labai įprasta tikrinant asmens tapatybę įvairiais tikslais. Šiuo metu visur galime pamatyti pirštų atspaudais pagrįstas sistemas, pavyzdžiui, lankymąsi biuruose, darbuotojų patikrinimą bankuose, grynųjų pinigų išėmimą ar indėlius bankomatuose, tapatybės patikrinimą vyriausybės įstaigose ir kt. Mes jau sąsajome su „Arduino“ ir su „Raspberry Pi“ šiandien mes sujungsime pirštų spausdinimo jutiklį su PIC mikrovaldikliu. Naudodami šią PIC mikrovaldiklį PIC16f877A Finger Print System, mes galime užregistruoti naujus pirštų atspaudus sistemoje ir ištrinti jau paduotus pirštų atspaudus. Visiškas sistemos veikimas parodytas vaizdo įraše pateikiama straipsnio pabaigoje.
Reikalingi komponentai
- PIC16f877A mikrovaldiklis
- Pirštų atspaudų modulis
- Paspauskite mygtukus arba klaviatūrą
- 16x2 LCD ekranas
- 10 tūkst. Puodo
- 18,432000 MHz kristalinis osciliatorius
- Duonos lenta arba PCB (užsakyta iš JLCPCB)
- Džemperių laidai
- LED (neprivaloma)
- Rezistorius 150 omų -1 k omų (pasirinktinai)
- 5v maitinimo šaltinis
Grandinės schema ir paaiškinimas
Šiame PIC mikrovaldiklio pirštų atspaudų jutiklių sąsajos projekte mes panaudojome 4 mygtukus: šie mygtukai naudojami daugiafunkciams darbams. 1 klavišas naudojamas suderinti pirštų atspaudus ir padidinti pirštų atspaudų ID, saugant ar ištrinant pirštų atspaudus sistemoje. 2 klavišas naudojamas registruoti naują piršto atspaudą ir mažinti piršto antspaudo ID, saugant ar ištrinant piršto atspaudą sistemoje. 3 klavišas naudojamas ištrinti saugomą pirštą iš sistemos, o 4 klavišas naudojamas gerai. diodas yra naudojamas nurodant, kad pirštų atspaudai aptikti arba suderinti. Čia mes naudojome pirštų atspaudų modulį, kuris veikia UART. Taigi čia mes susiejome šį pirštų atspaudų modulį su PIC mikrovaldikliu pagal numatytąjį perdavimo greitį, kuris yra 57600.
Taigi, visų pirma, mes turime užmegzti visą reikiamą ryšį, kaip parodyta žemiau esančioje grandinės diagramoje. Jungtys yra paprastos, ką tik prijungėme pirštų atspaudų modulį prie PIC mikrovaldiklio UART. Visiems pranešimams rodyti naudojamas 16x2 skystųjų kristalų ekranas. 10k indas taip pat naudojamas su LCD, kad būtų galima kontroliuoti to paties kontrastą. 16x2 LCD duomenų smeigtukai yra prijungti PORTA smeigtukai. LCD d4, d5, d6 ir d7 kaiščiai yra prijungti prie PIC mikrovaldiklio kaiščių RA0, RA1, RA2 ir RA3. Keturi mygtukai (arba klaviatūra) yra prijungti prie PORTD kaiščių RD0, RD1, RD2 ir RD. Šviesos diodas taip pat prijungtas prie PORTC prievado kaiščio RC3. Čia naudojome 18,432000 MHz išorinį kristalinį osciliatorių mikrovaldiklio laikrodžiui nustatyti.
Pirštų atspaudų jutiklio veikimas su PIC mikrovaldikliu
Šio projekto valdymas yra paprastas. Tiesiog įkelkite šešiakampį failą, sugeneruotą iš šaltinio kodo, į PIC mikrovaldiklį, naudodamiesi PIC programuotoju ar degikliu („PIckit2“ ar „Pickit3“ ar kt.), Tada pamatysite kai kuriuos įvadinius pranešimus per LCD, tada vartotojas bus paprašyta įvesti operacijų pasirinkimą. Norėdami suderinti pirštų atspaudus, vartotojas turi paspausti 1 mygtuką, tada LCD paprašys uždėti pirštą ant pirštų atspaudų jutiklio. Dabar, uždėję pirštą ant pirštų atspaudų modulio, galime patikrinti, ar mūsų pirštų atspaudai jau saugomi, ar ne. Jei jūsų pirštų atspaudų yra saugomi tada LCD rodys pranešimą su saugojimo ID pirštų atspaudų kaip " ID: 2" kitaip ji bus rodoma "Not Found" .
Dabar, norėdamas užregistruoti pirštų atspaudus, vartotojas turi paspausti registravimo mygtuką arba 2 klavišą ir vykdyti LCD ekrane pateikiamus nurodymus.
Jei vartotojas nori ištrinti bet kurį iš pirštų atspaudų, vartotojas turi paspausti ištrynimo mygtuką arba 3 klavišą. Po to skystųjų kristalų ekranas paprašys ištrinti piršto antspaudo ID. Dabar naudodamas prieaugio mygtuką arba mygtuką 1 (atitikimo mygtukas arba mygtukas 1) ir mažinimo mygtuką arba mygtuką 2 (registravimo mygtukas arba mygtukas 2) prieaugiui ir mažinimui, vartotojas gali pasirinkti išsaugoto pirštų spausdinimo ID ir paspausti OK mygtuką, kad ištrintumėte tą piršto atspaudą. Norėdami geriau suprasti, peržiūrėkite vaizdo įrašą, pateiktą projekto pabaigoje.
„FingerPrint“ sąsaja Pastaba: Šio projekto programa yra šiek tiek sudėtinga pradedantiesiems. Bet jo paprastas sąsajos kodas sukurtas naudojant r305 pirštų atspaudų modulio duomenų lapo skaitymą. Visa šio pirštų atspaudų modulio veikimo instrukcija pateikiama duomenų lape.
Čia kalbėdami su pirštų atspaudų moduliu naudojome rėmelio formatą. Kai mes siunčiame komandą ar duomenų užklausos rėmelį į pirštų atspaudų modulį, jis mums atsako tuo pačiu rėmo formatu, kuriame yra duomenų ar informacijos, susijusios su pritaikyta komanda. Visi duomenų ir komandų rėmelių formatai pateikti vartotojo vadove arba R305 pirštų atspaudų modulio duomenų lape.
Programavimo paaiškinimas
Programuodami mes naudojome žemiau pateiktą kadrų formatą.
Mes pradedame programą nustatydami konfigūracijos bitus ir nustatydami LCD, mygtukų ir LED makrokomandas ir kaiščius, kuriuos galite patikrinti visą kodą, pateiktą šio projekto pabaigoje. Jei dar nesinaudojote „PIC“ mikrovaldikliu, pradėkite nuo darbo pradžios su „PIC“ mikrovaldiklio projektu.
Tada mes paskelbėme ir inicializavome kintamąjį bei masyvą ir sukūrėme rėmelį, kurį turime naudoti šiame projekte, kad susietume pirštų atspaudų modulį su PIC mikrovaldikliu.
uchar buf; uchar buf1; lakiųjų uint indeksas = 0; nepastovi int vėliava = 0; uint msCount = 0; uint g_timerflag = 1; lakiųjų uint skaičius = 0; ucharo duomenys; uint id = 1; ENUM { CMD, DUOMENYS, 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};
Po to mes sukūrėme LCD funkciją, kad galėtume valdyti LCD.
negaliojantis 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); // __ delsa_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; už (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Nurodyta funkcija naudojama inicijuojant UART
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // perdavimo sparta @ 18.432000Mhz Laikrodis TXSTAbits.SYNC = 0; // Asinchroninio režimo nustatymas, ty UART RCSTAbits.SPEN = 1; // Įgalina nuoseklųjį prievadą TRISC7 = 1; // Kaip nurodyta duomenų lape TRISC6 = 0; // Kaip nurodyta duomenų lape RCSTAbits.CREN = 1; // Įgalina nuolatinį priėmimą TXSTAbits.TXEN = 1; // Įgalina perdavimą GIE = 1; // ENABLE nutraukia INTCONbits.PEIE = 1; // Įgalinami periferiniai pertraukimai. PIE1bits.RCIE = 1; // ENABLE USART gauti pertraukimo PIE1bits.TXIE = 0; // išjungti USART TX pertraukimą PIR1bits.RCIF = 0; }
Nurodytos funkcijos yra naudojamos komandoms perkelti į pirštų atspaudų modulį ir gauti duomenis iš pirštų atspaudų modulio.
negaliojantis serialwrite (char ch) { while (TXIF == 0); // Palaukite, kol siųstuvo registras taps tuščias TXIF = 0; // Išvalyti siųstuvo vėliavą TXREG = ch; // įkelkite perduodamą simbolį į perdavimo reg } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } negaliojantis pertraukimas SerialRxPinInterrupt (void) { if (((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; jei (indeksas> 0) vėliava = 1; RCIF = 0; // išvalyti rx flag } } void serialFlush () { for (int i = 0; i
Po to turime sukurti funkciją, kuri paruošia duomenis, kurie turi būti perduodami pirštų atspaudams, ir iššifruoja duomenis, gaunamus iš pirštų atspaudų modulio.
int sendcmd2fp (char * pack, int len) { uint res = KLAIDA; serijinis „Flush“ (); indeksas = 0; __delay_ms (100); už (int i = 0; i
Dabar kode yra keturios funkcijos, skirtos keturioms skirtingoms užduotims:
- Piršto antspaudo ID įvesties funkcija - unit getId ()
- Piršto derinimo funkcija - void matchFinger ()
- Naujo piršto registravimo funkcija - negaliojantis enrolFinger ()
- Piršto ištrynimo funkcija - negaliojantis deleteFinger ()
Pabaigoje pateikiamas visas kodas su visomis keturiomis funkcijomis.
Dabar atlikdami pagrindinę funkciją, mes inicijuojame GPIO, LCD, UART ir patikriname, ar pirštų atspaudų modulis yra prijungtas prie mikrovaldiklio. Tada LCD ekrane rodomi keli įvadiniai pranešimai. Galiausiai , kai kilpa mes skaitome visas klavišus arba mygtukais valdyti projektą.
int main () { negaliojantis (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; serijos pradžia (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint („Piršto atspaudas“); lcdwrite (192, CMD); lcdprint ("sąsaja"); __delay_ms (2000); lcdwrite (1, CMD); lcdprint ("Naudojant PIC16F877A"); lcdwrite (192, CMD); „lcdprint“ („Grandinės santrauka“); __delay_ms (2000); indeksas = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP nerastas"); __delay_ms (2000); indeksas = 0; } lcdwrite (1, CMD); lcdprint („Rasta FP“); __delay_ms (1000); lcdinst (); o (1) { FP = sutampa
Visas PIC kodas ir veikiantis vaizdo įrašas pateikiamas žemiau. Taip pat patikrinkite kitus mūsų projektus naudodami pirštų spausdinimo jutiklio modulį:
- Pirštų atspaudais pagrįstas biometrinis balsavimo aparatas, naudojant „Arduino“
- Biometrinė apsaugos sistema, naudojant „Arduino“ ir „Pirštų atspaudų jutiklį“
- Pirštų atspaudais paremta biometrinė lankomumo sistema naudojant „Arduino“
- Pirštų atspaudų jutiklis sąveikauja su „Raspberry Pi“