- Nødvendige komponenter
- Kretsdiagram og forklaring
- Betjening av fingeravtrykkssensor med PIC Microcontroller
- Programmering Forklaring
Fingeravtrykkssensor, som vi pleide å se i Sci-Fi-filmer for noen år tilbake, er nå blitt veldig vanlig for å verifisere identiteten til en person for forskjellige formål. I dag kan vi se fingeravtrykksbaserte systemer overalt i vårt daglige liv, for eksempel til oppmøte på kontorer, ansattes verifisering i banker, for kontantuttak eller innskudd i minibanker, for identitetsverifisering i offentlige kontorer osv. Vi har allerede koblet det sammen med Arduino og med Raspberry Pi, i dag skal vi grensesnitt Finger Print Sensor med PIC mikrokontroller. Ved å bruke denne PIC-mikrokontrolleren PIC16f877A Finger Print System kan vi registrere nye fingeravtrykk i systemet og slette de allerede matede fingeravtrykkene. Fullstendig bearbeiding av systemet er vist i videoen gitt på slutten av artikkelen.
Nødvendige komponenter
- PIC16f877A Microcontroller
- Fingeravtrykk-modul
- Trykknapper eller tastatur
- 16x2 LCD
- 10k pott
- 18,432000 MHz krystalloscillator
- Brødbrett eller PCB (bestilt fra JLCPCB)
- Jumper ledninger
- LED (valgfritt)
- Motstand 150 ohm -1 k ohm (valgfritt)
- 5v Strømforsyning
Kretsdiagram og forklaring
I dette PIC Microcontroller Finger Print sensor-grensesnittprosjektet har vi brukt 4 trykknapper: disse knappene brukes til multifunksjon. Nøkkel 1 brukes til å matche fingeravtrykk og øke fingeravtrykks-ID mens du lagrer eller sletter fingeravtrykket i systemet. Nøkkel 2 brukes til å registrere det nye fingeravtrykket og for å redusere fingeravtrykks-ID mens du lagrer eller sletter fingeravtrykk i systemet. Tast 3 brukes til å slette lagret finger fra systemet og nøkkel 4 brukes til OK. En LED brukes til å indikere at fingeravtrykk oppdages eller matches. Her har vi brukt en fingeravtrykkmodul som fungerer på UART. Så her har vi koblet denne fingeravtrykkmodulen til PIC-mikrokontrolleren ved standard baudrate som er 57600.
Så først og fremst må vi lage alle nødvendige tilkoblinger som vist i kretsdiagrammet nedenfor. Tilkoblinger er enkle, vi har nettopp koblet fingeravtrykkmodul til PIC-mikrokontrollers UART. En 16x2 LCD brukes til å vise alle meldinger. En 10k pott brukes også med LCD for å kontrollere kontrasten av den samme. 16x2 LCD datapinner er koblet til PORTA-pinner. LCD-skjermene d4, d5, d6 og d7 er koblet til henholdsvis Pin RA0, RA1, RA2 og RA3 fra PIC-mikrokontroller. Fire trykknapper (eller tastatur) er koblet til PORTDs pin RD0, RD1, RD2 og RD. LED er også koblet til port PORTCs pinne RC3. Her har vi brukt en 18,432000 MHz ekstern krystalloscillator for å klokke mikrokontrolleren.
Betjening av fingeravtrykkssensor med PIC Microcontroller
Driften av dette prosjektet er enkelt, bare last opp hex-fil, generert fra kildekoden, til PIC-mikrokontrolleren ved hjelp av PIC-programmerer eller brenner (PIckit2 eller Pickit3 eller andre), og så vil du se noen intro-meldinger over LCD og deretter brukeren blir bedt om å angi et valg for operasjoner. For å matche fingeravtrykk må brukeren trykke tast 1, så vil LCD be om Plasser finger på fingeravtrykkssensoren. Nå ved å sette en finger over fingeravtrykkmodulen, kan vi sjekke om fingeravtrykkene våre allerede er lagret eller ikke. Hvis fingeravtrykket ditt er lagret, vil LCD-meldingen vise meldingen med lagrings-ID for fingeravtrykkslignende ' ID: 2', ellers vil den vise 'Ikke funnet' .
Nå for å registrere et fingeravtrykk , må brukeren trykke på registreringsknapp eller tast 2 og følge instruksjonsmeldingene på LCD-skjermen.
Dersom brukeren ønsker å slette noen av fingeravtrykk så brukeren må trykke på sletteknappen eller tast 3. Etter som, vil LCD be om ID av fingeravtrykk som skal slettes. Nå ved å bruke økningstrykknapp eller tast 1 (match trykknapp eller tast 1) og reduseringsknapp eller tast 2 (registrer trykknapp eller tast 2) for økning og reduksjon, kan brukeren velge ID for lagret fingeravtrykk og trykke OK for å slette det fingeravtrykket. For mer forståelse, se på videoen som er gitt på slutten av prosjektet.
FingerPrint-grensesnitt Merk: Programmet til dette prosjektet er litt komplisert for en nybegynner. Men den enkle grensesnittkoden er laget ved å lese databladet for fingeravtrykkmodul r305. All instruksjon om hvordan denne fingeravtrykkmodulen fungerer, er gitt i databladet.
Her har vi brukt et rammeformat for å snakke med fingeravtrykkmodul. Hver gang vi sender en kommando eller en dataforespørselsramme til fingeravtrykkmodulen, svarer den oss med samme rammeformat som inneholder data eller informasjon relatert til anvendt kommando. Alt data- og kommandorammeformat er gitt i brukerhåndboken eller i databladet til R305 fingeravtrykksmodul.
Programmering Forklaring
I programmeringen har vi brukt rammeformatet nedenfor.
Vi starter programmet med å sette konfigurasjonsbiter og definere makroer og pinner for LCD, knapper og LED, som du kan sjekke i den fullstendige koden som er gitt på slutten av dette prosjektet. Hvis du er ny i PIC Microcontroller, så start med Komme i gang med PIC Microcontroller Project.
Så erklærte og initialiserte vi noen variabler og matriser, og lagde en ramme som vi trenger å bruke i dette prosjektet for å grensesnitt fingeravtrykk modul med PIC mikrokontroller.
uchar buf; uchar buf1; volatile uint index = 0; flyktig int flagg = 0; uint msCount = 0; uint g_timerflag = 1; flyktig uintall = 0; uchar data; 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};
Etter det har vi laget LCD-funksjon for å kjøre LCD.
ugyldig lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __forsink_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __forsink_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; for (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Denne funksjonen brukes til å initialisere UART
ugyldig seriellbegynnelse (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // baud rate @ 18.432000Mhz Clock TXSTAbits.SYNC = 0; // Innstilling av asynkron modus, dvs. UART RCSTAbits.SPEN = 1; // Aktiverer seriell port TRISC7 = 1; // Som foreskrevet i databladet TRISC6 = 0; // Som foreskrevet i datablad RCSTAbits.CREN = 1; // Aktiverer kontinuerlig mottakelse TXSTAbits.TXEN = 1; // Aktiverer overføring GIE = 1; // AKTIVER avbryter INTCONbits.PEIE = 1; // ENable perifer interruptts. PIE1bits.RCIE = 1; // AKTIVER USART motta avbrudd PIE1bits.TXIE = 0; // deaktiver USART TX avbryt PIR1bits.RCIF = 0; }
Gitte funksjoner brukes til å overføre kommandoer til fingeravtrykkmodul og motta data fra fingeravtrykkmodul.
ugyldig serialwrite (char ch) { while (TXIF == 0); // Vent til senderegisteret blir tomt TXIF = 0; // Fjern sendeflagg TXREG = ch; // last inn røya som skal overføres til send reg } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } ugyldig avbryt SerialRxPinInterrupt (ugyldig) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; hvis (indeks> 0) flagg = 1; RCIF = 0; // clear rx flag } } ugyldig serialFlush () { for (int i = 0; i
Etter det må vi lage en funksjon som forbereder data som skal overføres til fingeravtrykk og dekode dataene som kommer fra fingeravtrykkmodulen.
int sendcmd2fp (char * pack, int len) { uint res = FEIL; serialFlush (); indeks = 0; __forsink_ms (100); for (int i = 0; i
Nå er det fire funksjoner tilgjengelig i koden for fire forskjellige oppgaver:
- Funksjon for inntasting av fingeravtrykks-ID - enhet getId ()
- Funksjon for å matche finger - ugyldig matchFinger ()
- Funksjon for å registrere ny finger - void enrolFinger ()
- Funksjon for å slette en finger - ugyldig deleteFinger ()
Den komplette koden med alle de fire funksjonene er gitt til slutt.
Nå i hovedfunksjonen initialiserer vi GPIO, LCD, UART og sjekker om fingeravtrykkmodulen er koblet til en mikrokontroller eller ikke. Så viser det noen intro-meldinger over LCD. Til slutt i løpet av en løkke leser vi alle taster eller trykknapper for å betjene prosjektet.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; seriellbegynnelse (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("fingeravtrykk"); lcdwrite (192, CMD); lcdprint ("grensesnitt"); __forsink_ms (2000); lcdwrite (1, CMD); lcdprint ("Bruke PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Circuit Digest"); __forsink_ms (2000); indeks = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP Not Found"); __forsink_ms (2000); indeks = 0; } lcdwrite (1, CMD); lcdprint ("FP Found"); __forsink_ms (1000); lcdinst (); mens (1) { FP = match
Fullstendig PIC-kode og en arbeidsvideo er gitt nedenfor. Sjekk også våre andre prosjekter ved hjelp av Finger Print Sensor Module:
- Fingeravtrykkbasert biometrisk stemmemaskin ved bruk av Arduino
- Biometrisk sikkerhetssystem ved hjelp av Arduino og fingeravtrykkssensor
- Fingeravtrykk basert biometrisk oppmøtingssystem ved hjelp av Arduino
- Fingeravtrykkssensor grensesnitt med Raspberry Pi