- Nödvändiga komponenter
- Kretsschema och förklaring
- Användning av fingeravtryckssensor med PIC Microcontroller
- Programmeringsförklaring
Fingeravtryckssensor, som vi brukade se i Sci-Fi-filmer för några år tillbaka, har nu blivit mycket vanligt för att verifiera en persons identitet för olika ändamål. För närvarande kan vi se fingeravtrycksbaserade system överallt i vårt dagliga liv som för närvaro på kontor, verifiering av anställda i banker, för kontantuttag eller insättningar i bankomater, för identitetsverifiering i statliga kontor etc. Vi har redan kopplat det med Arduino och med Raspberry Pi, idag ska vi gränssnitt Finger Print Sensor med PIC-mikrokontroller. Med denna PIC-mikrokontroller PIC16f877A Finger Print System kan vi registrera nya fingeravtryck i systemet och ta bort de redan matade fingeravtrycken. Komplett bearbetning av systemet har visats i videon anges i slutet av artikeln.
Nödvändiga komponenter
- PIC16f877A Microcontroller
- Fingeravtrycksmodul
- Tryckknappar eller knappsats
- 16x2 LCD
- 10k kruka
- 18,432000 MHz kristalloscillator
- Brödbräda eller kretskort (beställt från JLCPCB)
- Bygeltrådar
- LED (tillval)
- Motstånd 150 ohm -1 k ohm (tillval)
- 5v strömförsörjning
Kretsschema och förklaring
I detta PIC Microcontroller Finger Print-sensorgränssnittsprojekt har vi använt fyra tryckknappar: dessa knappar används för multifunktion. Nyckel 1 används för att matcha fingeravtryck och öka fingeravtrycks-ID medan du lagrar eller tar bort fingeravtrycket i systemet. Nyckel 2 används för att registrera det nya fingeravtrycket och för att minska fingeravtrycks-ID medan du lagrar eller tar bort fingeravtryck i systemet. Knapp 3 används för att radera lagrat finger från systemet och tangent 4 används för OK. En LED används för att indikera att fingeravtryck detekteras eller matchas. Här har vi använt en fingeravtrycksmodul som fungerar på UART. Så här har vi kopplat den här fingeravtrycksmodulen till PIC-mikrokontrollern vid standard baudhastighet som är 57600.
Så först och främst måste vi göra alla nödvändiga anslutningar som visas i kretsschemat nedan. Anslutningarna är enkla, vi har precis anslutit fingeravtrycksmodul till PIC-mikrokontrollers UART. En 16x2 LCD används för att visa alla meddelanden. En 10k-kruka används också med LCD för att styra kontrasten hos densamma. 16x2 LCD-datapinnar är anslutna PORTA-pinnar. LCD: s d4-, d5-, d6- och d7-stift är anslutna till Pin RA0, RA1, RA2 och RA3 på PIC-mikrokontroller. Fyra tryckknappar (eller knappsatser) är anslutna till PORTDs Pin RD0, RD1, RD2 och RD. LED är också ansluten till port PORTCs stift RC3. Här har vi använt en 18,432000 MHz extern kristalloscillator för att klocka mikrokontrollern.
Användning av fingeravtryckssensor med PIC Microcontroller
Driften av detta projekt är enkelt, ladda bara upp hex-fil, genererad från källkod, till PIC-mikrokontrollern med hjälp av PIC-programmerare eller brännare (PIckit2 eller Pickit3 eller andra) och då kommer du att se några intromeddelanden över LCD och sedan användaren kommer att bli ombedd att ange ett val för operationer. För att matcha fingeravtryck måste användaren trycka på tangent 1 då kommer LCD att be om placera finger på fingeravtryckssensorn. Nu genom att sätta ett finger över fingeravtrycksmodulen kan vi kontrollera om våra fingeravtryck redan är lagrade eller inte. Om ditt fingeravtryck är lagrat kommer LCD-meddelandet att visa meddelandet med lagrings-ID för fingeravtrycksliknande ' ID: 2' annars kommer det att visa 'Inte hittat' .
Nu för att registrera ett finger ut, användaren måste trycka på Anmäl-knappen eller knapp 2 och följ instruktionerna meddelanden på LCD-skärmen.
Om användaren vill radera något av fingeravtrycken måste användaren trycka på raderingsknappen eller knapp 3. Därefter kommer LCD att be om ID för det fingeravtryck som ska raderas. Nu med hjälp av stegknapp eller tangent 1 (matcha tryckknapp eller tangent 1) och minskningsknapp eller tangent 2 (registrera tryckknapp eller tangent 2) för ökning och minskning kan användaren välja ID för sparad fingeravtryck och trycka på OK för att radera det fingeravtrycket. För mer förståelse, titta på videon som ges i slutet av projektet.
FingerPrint-gränssnitt Obs! Programmet för detta projekt är lite komplext för en nybörjare. Men dess enkla gränssnittskod gjord genom att läsa databladet för fingeravtrycksmodul r305. All instruktion om hur denna fingeravtrycksmodul fungerar fungerar i databladet.
Här har vi använt ett ramformat för att prata med fingeravtrycksmodul. När vi skickar ett kommando- eller dataförfrågan till fingeravtrycksmodulen svarar det oss med samma ramformat som innehåller data eller information relaterad till tillämpat kommando. Allt data- och kommandoramformat har angivits i användarhandboken eller i databladet för R305 fingeravtrycksmodul.
Programmeringsförklaring
Vid programmering har vi använt ramformatet nedan.
Vi börjar programmet med att ställa in konfigurationsbitarna och definiera makron och stift för LCD, knappar och LED, som du kan kontrollera i den fullständiga koden som ges i slutet av detta projekt. Om du är ny på PIC Microcontroller, börja med Komma igång med PIC Microcontroller Project.
Sedan deklarerade och initierade vi en variabel och array och gjorde en ram som vi behöver använda i det här projektet för att gränssnitt fingeravtrycksmodul med PIC-mikrokontroller.
uchar buf; uchar buf1; flyktigt uintindex = 0; flyktig int-flagga = 0; uint msCount = 0; uint g_timerflag = 1; flyktigt antal toner = 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};
Efter det har vi gjort LCD-funktion för att driva LCD.
ogiltig lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __fördröja_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __fördröja_ms (5); EN = 0; } Lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ fördröjning_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; för (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Given funktion används för att initiera UART
ogiltig seriellbörjan (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // baud rate @ 18.432000Mhz Clock TXSTAbits.SYNC = 0; // Ställa in asynkront läge, dvs UART RCSTAbits.SPEN = 1; // Aktiverar seriell port TRISC7 = 1; // Som föreskrivs i datablad TRISC6 = 0; // Som föreskrivs i datablad RCSTAbits.CREN = 1; // Aktiverar kontinuerlig mottagning TXSTAbits.TXEN = 1; // Aktiverar överföring GIE = 1; // AKTIVA avbryter INTCONbits.PEIE = 1; // ENable perifer interruptts. PIE1bits.RCIE = 1; // AKTIVERA USART-mottagningsavbrott PIE1bits.TXIE = 0; // inaktivera USART TX-avbrott PIR1bits.RCIF = 0; }
Angivna funktioner används för att överföra kommandon till fingeravtrycksmodulen och ta emot data från fingeravtrycksmodulen.
ogiltig serialwrite (char ch) { medan (TXIF == 0); // Vänta tills sändarregistret blir tomt TXIF = 0; // Rensa sändarflaggan TXREG = ch; // ladda char som ska överföras till sänd reg } serialprint (char * str) { medan (* str) { serialwrite (* str ++); } } ogiltig avbrott SerialRxPinInterrupt (ogiltig) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; om (index> 0) flagga = 1; RCIF = 0; // rensa rx-flagga } } ogiltig serialFlush () { för (int i = 0; i
Efter det måste vi göra en funktion som förbereder data som ska överföras till fingeravtryck och avkoda data som kommer från fingeravtrycksmodulen.
int sendcmd2fp (char * pack, int len) { uint res = ERROR; serialFlush (); index = 0; __fördröja_ms (100); för (int i = 0; i
Nu finns det fyra funktioner tillgängliga i koden för fyra olika uppgifter:
- Funktion för inmatning av fingeravtrycks-ID - enhet getId ()
- Funktion för att matcha finger - ogiltig matchFinger ()
- Funktion för att registrera nytt finger - void enrolFinger ()
- Funktion för att radera ett finger - ogiltig deleteFinger ()
Den kompletta koden med alla de fyra funktionerna ges i slutet.
Nu i huvudfunktionen initialiserar vi GPIO, LCD, UART och kontrollerar om fingeravtrycksmodulen är ansluten till en mikrokontroller eller inte. Sedan visar det några intro-meddelanden över LCD. Slutligen in medan loop vi läser alla nycklar eller knappar för att driva projektet.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; seriell början (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("Fingerprint"); lcdwrite (192, CMD); lcdprint ("gränssnitt"); __fördröjning_ms (2000); lcdwrite (1, CMD); lcdprint ("Använda PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Circuit Digest"); __fördröjning_ms (2000); index = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP hittades inte"); __fördröjning_ms (2000); index = 0; } lcdwrite (1, CMD); lcdprint ("FP Found"); __fördröja_ms (1000); lcdinst (); medan (1) { FP = matchning
Komplett PIC-kod och en arbetsvideo ges nedan. Kontrollera även våra andra projekt med hjälp av Finger Print Sensor Module:
- Fingeravtrycksbaserad biometrisk röstmaskin med Arduino
- Biometriskt säkerhetssystem med Arduino och fingeravtryckssensor
- Fingeravtrycksbaserat biometriskt närvarosystem med Arduino
- Fingeravtryckssensorgränssnitt med Raspberry Pi