- Vaaditut komponentit
- Piirikaavio ja selitys
- Sormenjälkitunnistimen käyttö PIC-mikrokontrollerilla
- Ohjelmoinnin selitys
Sormenjälkitunnistimesta, jota tapasimme nähdä Sci-Fi-elokuvissa muutama vuosi sitten, on nyt tullut hyvin yleistä henkilön henkilöllisyyden varmistamiseksi eri tarkoituksiin. Tällä hetkellä voimme nähdä sormenjälkipohjaisia järjestelmiä kaikkialla jokapäiväisessä elämässämme, kuten toimistoissa, työntekijöiden todentamisessa pankeissa, käteisnostoissa tai pankkiautomaateissa, henkilöllisyyden todentamiseksi valtion virastoissa jne. Olemme jo liittäneet sen Arduinoon ja Raspberry Pi: n kanssa aiomme tänään liittää sormenjälkitunnistimen PIC-mikrokontrolleriin. Tämän PIC-mikrokontrollerin PIC16f877A sormenjälkijärjestelmän avulla voimme rekisteröidä uudet sormenjäljet järjestelmään ja poistaa jo syötetyt sormenjäljet. Järjestelmän täydellinen toiminta on esitetty videossa annettu artikkelin lopussa.
Vaaditut komponentit
- PIC16f877A-mikrokontrolleri
- Sormenjälkimoduuli
- Painikkeet tai näppäimistö
- 16x2 LCD
- 10k potti
- 18,432000 MHz: n kristallioskillaattori
- Leipälauta tai piirilevy (tilattu JLCPCB: ltä)
- Hyppääjän johdot
- LED (valinnainen)
- Vastus 150 ohm -1 k ohm (valinnainen)
- 5v virtalähde
Piirikaavio ja selitys
Tässä PIC-mikrokontrollerin sormenjälkitunnistimen rajapintaprojektissa olemme käyttäneet 4 painonappia: näitä painikkeita käytetään monitoimintoon. Näppäintä 1 käytetään sormenjäljen ja sormenjälkitunnuksen lisäämiseen, kun sormenjälkeä tallennetaan tai poistetaan järjestelmästä. Näppäintä 2 käytetään uuden sormenjäljen rekisteröintiin ja sormenjälkitunnuksen vähentämiseen samalla kun tallennetaan tai poistetaan sormenjälkeä järjestelmässä. Näppäintä 3 käytetään poistamaan tallennettu sormi järjestelmästä ja näppäintä 4 käytetään OK-tilaan. LED käytetään osoittamaan, että sormenjälki on havaittu tai sovitettu. Tässä olemme käyttäneet sormenjälkimoduulia, joka toimii UART: lla. Joten tässä olemme liittäneet tämän sormenjälkimoduulin PIC-mikrokontrolleriin oletusnopeudella, joka on 57600.
Joten ensinnäkin meidän on tehtävä kaikki tarvittavat liitännät alla olevan piirikaavion mukaisesti. Yhteydet ovat yksinkertaisia, olemme juuri liittäneet sormenjälkimoduulin PIC-mikrokontrollerin UART: iin. 16x2 nestekidenäyttöä käytetään kaikkien viestien näyttämiseen. 10k pottiä käytetään myös LCD: n kanssa sen kontrastin säätämiseen. 16x2 LCD-datanastat on kytketty PORTA-nastoihin. LCD: n d4-, d5-, d6- ja d7-nastat on kytketty PIC-mikrokontrollerin nastoihin RA0, RA1, RA2 ja RA3. Neljä painonappia (tai näppäimistöä) on kytketty PORTDin nastoihin RD0, RD1, RD2 ja RD. LED on kytketty myös PORTC-portin napaan RC3. Tässä olemme käyttäneet 18,432000 MHz: n ulkoista kideoskillaattoria mikro-ohjaimen kellottamiseen.
Sormenjälkitunnistimen käyttö PIC-mikrokontrollerilla
Tämän projektin käyttö on yksinkertaista, lataa vain lähdekoodista muodostettu heksatiedosto PIC-mikrokontrolleriin PIC-ohjelmoijan tai -polttimen avulla (PIckit2 tai Pickit3 tai muut), ja sitten näet joitain intro-viestejä LCD: n kautta ja sitten käyttäjän pyydetään antamaan toimintavalinta. Sormenjälkien vastaamiseksi käyttäjän on painettava näppäintä 1, jolloin LCD kysyy Aseta sormi sormenjälkitunnistimeen. Nyt asettamalla sormi sormenjälkimoduulin päälle voimme tarkistaa, ovatko sormenjälkemme jo tallennettuja vai ei. Jos sormenjälkesi on tallennettu, nestekidenäytössä näkyy viesti, jossa on sormenjälkityyppisen ' ID: 2' -tallennustunnus, muuten siinä näkyy 'Not Found' .
Rekisteröi nyt sormenjälki , käyttäjän on painettava rekisteröintipainiketta tai näppäintä 2 ja noudatettava nestekidenäytön ohjeita.
Jos käyttäjä haluaa poistaa mahdolliset sormenjäljet sitten käyttäjä tarvitsee painaa delete -painiketta tai näppäintä 3. Minkä jälkeen, LCD kysyy ID sormenjälki, joka on poistettava. Käyttämällä lisäyspainiketta tai -näppäintä 1 (ottelun painike tai avain 1) ja vähennyspainiketta tai -näppäintä 2 (rekisteröintipainike tai -näppäin 2) lisää tai vähennä, käyttäjä voi valita tallennetun sormenjäljen tunnuksen ja painaa OK -painiketta poistaaksesi sormenjäljen. Lisää ymmärrystä katsomalla projektin lopussa annettu video.
FingerPrint-liitännät Huomautus: Tämän projektin ohjelma on hieman monimutkainen aloittelijoille. Mutta sen yksinkertainen liitäntäkoodi on valmistettu lukemalla r305-sormenjälkimoduulin tietolomake. Kaikki tämän sormenjälkimoduulin toiminnan ohjeet on annettu lomakkeessa.
Tässä olemme käyttäneet kehysmuotoa puhuaksesi sormenjälkimoduulin kanssa. Aina kun lähetämme komennon tai tietopyyntökehyksen sormenjälkimoduulille, se vastaa meille samalla kehysmuodolla, joka sisältää tietoja tai tietoja sovelletusta komennosta. Kaikki data- ja komentokehysmuodot on annettu käyttöoppaassa tai R305-sormenjälkimoduulin datalehdessä.
Ohjelmoinnin selitys
Ohjelmoinnissa olemme käyttäneet alla olevaa kehysmuotoa.
Aloitamme ohjelman asettamalla kokoonpanobitit ja määrittelemällä makrot ja nastat LCD: lle, painikkeille ja LEDille, jotka voit tarkistaa koko projektin lopussa annetusta koodista. Jos olet uusi PIC-mikrokontrolleri, aloita sitten PIC-mikrokontrolleriprojektin käytön aloittamisesta.
Sitten ilmoitimme ja alustimme muuttujan ja taulukon ja teimme kehyksen, jota meidän on käytettävä tässä projektissa sormenjälkimoduulin liittämiseksi PIC-mikrokontrolleriin.
uchar buf; uchar buf1; haihtuva uint-indeksi = 0; haihtuva int-lippu = 0; uint msCount = 0; uint g_timerflag = 1; haihtuva uint-määrä = 0; uchar-tiedot; 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};
Sen jälkeen olemme tehneet LCD-toiminnon LCD-näytön ajamiseksi.
void lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __viive_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __viive_ms (5); EN = 0; } Lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ viive_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; ryhmälle (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Annettua toimintoa käytetään UART: n alustamiseen
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (pitkä) (64UL * baudrate)) - 1; // tiedonsiirtonopeus @ 18.432000Mhz Kello TXSTAbits.SYNC = 0; // Asynkronisen tilan asettaminen, ts. UART RCSTAbits.SPEN = 1; // Ottaa sarjaportin TRISC7 = 1; // Kuten määrätty tietolomakkeessa TRISC6 = 0; // Kuten määrätty tietolomakkeessa RCSTAbits.CREN = 1; // Ottaa jatkuvan vastaanoton TXSTAbits.TXEN = 1; // Mahdollistaa lähetyksen GIE = 1; // ENABLE keskeyttää INTCONbits.PEIE = 1; // Oheislaitteiden keskeytykset. PIE1bittiä, RCIE = 1; // KÄYTÄ USART vastaanottaa keskeytys PIE1bits.TXIE = 0; // poista USART TX keskeytä PIR1bits.RCIF = 0; }
Annettuja toimintoja käytetään komentojen siirtämiseen sormenjälkimoduuliin ja tietojen vastaanottamiseen sormenjälkimoduulista.
void serialwrite (char ch) { while (TXIF == 0); // Odota, kunnes lähetinrekisteri tyhjenee TXIF = 0; // Tyhjennä lähettimen lippu TXREG = ch; // lataa lähetettävä merkki lähetysrekisteriin } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } void keskeytä SerialRxPinInterrupt (void) { if (((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; jos (indeksi> 0) lippu = 1; RCIF = 0; // tyhjennä rx-lippu } } void serialFlush () { for (int i = 0; i
Sen jälkeen meidän on tehtävä toiminto, joka valmistaa sormenjälkeen siirrettävän datan ja purkaa sormenjälkimoduulista tulevat tiedot.
int sendcmd2fp (char * pack, int len) { uint res = VIRHE; sarjaFlush (); indeksi = 0; _ viive_ms (100); varten (int i = 0; i
Nyt koodissa on käytettävissä neljä toimintoa neljälle eri tehtävälle:
- Toiminto sormenjälkitunnuksen syöttämiseen - yksikkö getId ()
- Toiminto sormen sovittamiseen - void matchFinger ()
- Toiminto uuden sormen rekisteröimiseen - void enrolFinger ()
- Toiminto sormen poistamiseen - void deleteFinger ()
Koko koodi, jossa on kaikki neljä toimintoa, annetaan lopussa.
Nyt päätoiminnossa alustamme GPIO: t, LCD: n, UART: n ja tarkistamme, onko sormenjälkimoduuli kytketty mikrokontrolleriin vai ei. Sitten se näyttää joitain intro-viestejä LCD-näytöllä. Lopulta kun silmukka luemme kaikki avaimet tai painikkeilla toimimaan hankkeen.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; sarjalähtö (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("sormenjälki"); lcdwrite (192, CMD); lcdprint ("Interfacing"); _ viive_ms (2000); lcdwrite (1, CMD); lcdprint ("PIC16F877A: n käyttö"); lcdwrite (192, CMD); lcdprint ("Piirin yhteenveto"); _ viive_ms (2000); indeksi = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP-tiedostoa ei löydy"); _ viive_ms (2000); indeksi = 0; } lcdwrite (1, CMD); lcdprint ("löydetty FP"); __viive_ms (1000); lcdinst (); kun taas (1) { FP = ottelu
Täydellinen PIC-koodi ja toimiva video on annettu alla. Tarkista myös muut projektimme sormenjälkitunnistinmoduulilla:
- Sormenjälkipohjainen biometrinen äänestyskone Arduinoa käyttämällä
- Biometrinen turvajärjestelmä, joka käyttää Arduinoa ja sormenjälkitunnistinta
- Arduinoa käyttävä sormenjälkipohjainen biometrinen osallistumisjärjestelmä
- Sormenjälkitunnistin ja Raspberry Pi