- Nødvendige komponenter
- Kredsløbsdiagram og forklaring
- Betjening af fingeraftrykssensor med PIC Microcontroller
- Programmering Forklaring
Fingerprint Sensor, som vi plejede at se i Sci-Fi-film for nogle år tilbage, er nu blevet meget almindelig for at kontrollere identiteten af en person til forskellige formål. I øjeblikket kan vi se fingeraftryksbaserede systemer overalt i vores daglige liv som tilstedeværelse på kontorer, medarbejderbekræftelse i banker, kontantudtag eller indskud i pengeautomater, til identitetsbekræftelse i offentlige kontorer osv. Vi har allerede interfacet det med Arduino og med Raspberry Pi, i dag skal vi interface Fingerprint Sensor med PIC-mikrocontroller. Ved hjælp af denne PIC-mikrocontroller PIC16f877A Fingerprint System kan vi tilmelde nye fingeraftryk i systemet og slette de allerede tilførte fingeraftryk. Komplet bearbejdning af systemet er vist i videoen givet i slutningen af artiklen.
Nødvendige komponenter
- PIC16f877A Microcontroller
- Fingeraftryksmodul
- Tryk på knapper eller tastatur
- 16x2 LCD
- 10 k gryde
- 18,432000 MHz krystaloscillator
- Brødbræt eller PCB (bestilt fra JLCPCB)
- Jumper ledninger
- LED (valgfri)
- Modstand 150 ohm -1 k ohm (valgfri)
- 5v strømforsyning
Kredsløbsdiagram og forklaring
I dette PIC Microcontroller Finger Print sensor interface-projekt har vi brugt 4 trykknapper: disse knapper bruges til multifunktionering. Tast 1 bruges til at matche fingeraftryk og øge fingeraftryks-ID, mens du gemmer eller sletter fingeraftrykket i systemet. Nøgle 2 bruges til at registrere det nye fingeraftryk og til at mindske fingeraftryks-ID, mens du gemmer eller sletter fingeraftryk i systemet. Tast 3 bruges til at slette lagret finger fra systemet, og nøgle 4 bruges til OK. En LED bruges til at indikere, at der registreres eller matches fingeraftryk. Her har vi brugt et fingeraftryksmodul, der fungerer på UART. Så her har vi grænsefladen til dette fingeraftryksmodul med PIC-mikrocontroller ved dens standard baudrate, der er 57600.
Så først og fremmest er vi nødt til at oprette den nødvendige forbindelse som vist i kredsløbsdiagram nedenfor. Forbindelser er enkle, vi har netop tilsluttet fingeraftryksmodul til PIC-mikrocontroller UART. En 16x2 LCD bruges til at vise alle meddelelser. En 10k pot bruges også med LCD til at kontrollere kontrasten af den samme. 16x2 LCD-datapinde er tilsluttet PORTA-ben. LCD's d4-, d5-, d6- og d7-ben er forbundet med henholdsvis Pin RA0, RA1, RA2 og RA3 fra PIC-mikrocontroller. Fire trykknapper (eller tastatur) er tilsluttet PORTDs Pin RD0, RD1, RD2 og RD. LED tilsluttes også på port PORTCs pin RC3. Her har vi brugt en 18,432000 MHz ekstern krystaloscillator til at ur mikrokontrolleren.
Betjening af fingeraftrykssensor med PIC Microcontroller
Betjeningen af dette projekt er enkel, bare upload hex-fil, genereret fra kildekode, til PIC-mikrocontrolleren ved hjælp af PIC-programmør eller -brænder (PIckit2 eller Pickit3 eller andre), og så vil du se nogle introbeskeder over LCD og derefter brugeren bliver bedt om at angive et valg til operationer. For at matche fingeraftryk skal brugeren trykke på tast 1, så vil LCD bede om Placer finger på fingerprint sensor. Nu ved at lægge en finger over fingeraftryksmodulet kan vi kontrollere, om vores fingeraftryk allerede er gemt eller ej. Hvis dit fingeraftryk er gemt, viser LCD meddelelsen med lagrings-id'et for fingeraftrykslignende ' ID: 2', ellers viser det 'Ikke fundet' .
For at tilmelde en fingeraftryk skal brugeren trykke på tilmeldingsknap eller tast 2 og følge instruktionsmeddelelserne på LCD-skærmen.
Hvis brugeren ønsker at slette et af fingeraftryk, skal brugeren trykke på sletningsknappen eller tast 3. Herefter vil LCD bede om ID'et for det fingeraftryk, der skal slettes. Ved at bruge trinvis trykknap eller tast 1 (match trykknap eller tast 1) og formindsk trykknap eller tast 2 (tilmeld trykknap eller tast 2) til stigning og formindskelse, kan brugeren vælge ID for den gemte Fingerprint og trykke på OK knap for at slette det fingeraftryk. For mere forståelse, se på videoen, der er givet i slutningen af projektet.
FingerPrint-grænseflade Bemærk: Programmet til dette projekt er lidt komplekst for en nybegynder. Men dens enkle interface kode lavet ved hjælp af læsning af databladet til r305-fingeraftryksmodul. Al instruktionen om, hvordan dette fingeraftryksmodul fungerer, findes i databladet.
Her har vi brugt et rammeformat til at tale med fingeraftryksmodul. Når vi sender en kommando eller en dataanmodningsramme til et fingeraftryksmodul, reagerer det os med det samme rammeformat, der indeholder data eller information relateret til den anvendte kommando. Alt data- og kommandorammeformat er angivet i brugervejledningen eller i databladet til R305 fingeraftryksmodul.
Programmering Forklaring
Ved programmering har vi brugt nedenstående rammeformat.
Vi begynder programmet med at indstille konfigurationsbits og definere makroer og ben til LCD, knapper og LED, som du kan kontrollere i den komplette kode, der er angivet i slutningen af dette projekt. Hvis du er ny hos PIC Microcontroller, skal du starte med Kom godt i gang med PIC Microcontroller Project.
Derefter erklærede og initialiserede vi nogle variabler og array og lavede en ramme, som vi har brug for i dette projekt til at interface fingeraftryksmodul med PIC-mikrocontroller.
uchar buf; uchar buf1; flygtigt uint-indeks = 0; flygtigt int-flag = 0; uint msCount = 0; uint g_timerflag = 1; flygtige tællinger = 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 lavet LCD-funktion til at køre LCD.
ugyldigt 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); // __ forsinkelse_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; for (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Den givne funktion bruges til at initialisere UART
ugyldigt serielbegyndelse (uint baudrate) { SPBRG = (18432000UL / (lang) (64UL * baudrate)) - 1; // baud rate @ 18.432000Mhz Clock TXSTAbits.SYNC = 0; // Indstilling af asynkron tilstand, dvs. UART RCSTAbits.SPEN = 1; // Aktiverer seriel port TRISC7 = 1; // Som ordineret i datablad TRISC6 = 0; // Som ordineret i datablad RCSTAbits.CREN = 1; // Aktiverer kontinuerlig modtagelse TXSTAbits.TXEN = 1; // Aktiverer transmission GIE = 1; // AKTIV afbryder INTCONbits.PEIE = 1; // Aktivér perifere afbrydelser. PIE1bits.RCIE = 1; // AKTIVER USART modtag afbryd PIE1bits.TXIE = 0; // deaktiver USART TX afbryd PIR1bits.RCIF = 0; }
Givne funktioner bruges til at overføre kommandoer til fingeraftryksmodul og modtage data fra fingeraftryksmodul.
ugyldig serialwrite (char ch) { mens (TXIF == 0); // Vent til senderegistret bliver tomt TXIF = 0; // Ryd transmitterflag TXREG = ch; // indlæse den char, der skal transmitteres til transmittere reg } serialprint (char * str) { mens (* str) { serialwrite (* str ++); } } ugyldig afbrydelse SerialRxPinInterrupt (ugyldig) { hvis ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; hvis (indeks> 0) flag = 1; RCIF = 0; // clear rx flag } } ugyldig serialFlush () { for (int i = 0; i
Efter det er vi nødt til at lave en funktion, der forbereder data, der skal overføres til fingeraftryk, og afkode de data, der kommer fra fingeraftryksmodulet.
int sendcmd2fp (char * pack, int len) { uint res = FEJL; serialFlush (); indeks = 0; __forsink_ms (100); for (int i = 0; i
Nu er der fire funktioner tilgængelige i koden til fire forskellige opgaver:
- Funktion til indtastning af fingeraftryks-ID - enhed getId ()
- Funktion til matchende finger - ugyldig matchFinger ()
- Funktion til tilmelding af ny finger - ugyldig enrolFinger ()
- Funktion til sletning af en finger - ugyldig deleteFinger ()
Den komplette kode med alle de fire funktioner er givet i slutningen.
Nu i hovedfunktionen initialiserer vi GPIO'er, LCD, UART og kontrollerer, om fingeraftryksmodulet er forbundet med en mikrocontroller eller ej. Derefter viser det nogle introbeskeder over LCD. Endelig i løbet af loop ser vi alle taster eller trykknapper for at betjene projektet.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; seriebegyndelse (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("Fingeraftryk"); lcdwrite (192, CMD); lcdprint ("Interfacing"); __forsinkelse (2000); lcdwrite (1, CMD); lcdprint ("Brug af PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Circuit Digest"); __forsinkelse (2000); indeks = 0; mens (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP ikke fundet"); __forsinkelse (2000); indeks = 0; } lcdwrite (1, CMD); lcdprint ("FP fundet"); __forsink_ms (1000); lcdinst (); mens (1) { FP = match
Komplet PIC-kode og en arbejdsvideo er angivet nedenfor. Tjek også vores andre projekter ved hjælp af Finger Print Sensor Module:
- Fingeraftryksbaseret biometrisk stemmemaskine ved hjælp af Arduino
- Biometrisk sikkerhedssystem ved hjælp af Arduino og Fingerprint Sensor
- Fingeraftrykbaseret biometrisk tilstedeværelsessystem ved hjælp af Arduino
- Fingeraftrykssensor grænseflade med Raspberry Pi