- Potrebne komponente
- Kružni dijagram i objašnjenje
- Rad senzora otiska prsta s PIC mikrokontrolerom
- Objašnjenje programiranja
Senzor za otisak prsta, koji smo prije nekoliko godina gledali u znanstveno-fantastičnim filmovima, danas je vrlo čest za provjeru identiteta osobe u razne svrhe. U današnje vrijeme sustave zasnovane na otiscima prstiju možemo vidjeti svugdje u svakodnevnom životu, poput posjećivanja ureda, provjere zaposlenika u bankama, podizanja gotovine ili pologa na bankomatima, provjere identiteta u državnim uredima itd. Već smo to povezali s Arduinom i s Raspberry Pi, danas ćemo spojiti senzor otiska prsta s PIC mikrokontrolerom. Korištenjem ovog PIC mikrokontrolera PIC16f877A sustavom ispisa prstiju možemo u sustav upisati nove otiske prstiju i izbrisati već unesene otiske prstiju. Kompletan rad sustava prikazan je u videu dano na kraju članka.
Potrebne komponente
- PIC16f877A Mikrokontroler
- Modul otiska prsta
- Tipke ili tipkovnica
- LCD 16x2
- 10k lonac
- Kristalni oscilator 18,432000 MHz
- Daska za kruh ili PCB (naručeno od JLCPCB)
- Žice kratkospojnika
- LED (opcija)
- Otpornik 150 ohm -1 k ohm (opcija)
- 5v napajanje

Kružni dijagram i objašnjenje
U ovom projektu povezivanja senzora otiska prsta PIC mikrokontrolera koristili smo 4 tipke: ove tipke služe za višenamjensko funkcioniranje. Tipka 1 koristi se za podudaranje otiska prsta i povećanje ID otiska dok pohranjujete ili brišete otisak u sustavu. Tipka 2 koristi se za upis novog otiska prsta i za smanjenje ID-a otiska tijekom pohrane ili brisanja otiska prsta u sustavu. Tipka 3 služi za brisanje pohranjenog prsta iz sustava, a tipka 4 koristi se za OK. LED koristi se za označavanje otkrivanja ili podudaranja otiska prsta. Ovdje smo koristili modul otiska prsta koji radi na UART-u. Dakle, ovdje smo povezali ovaj modul otiska prsta s PIC mikrokontrolerom pri zadanoj brzini prijenosa podataka koja iznosi 57600.

Dakle, prije svega, moramo uspostaviti sve potrebne veze kako je prikazano na donjem krugovnom dijagramu. Veze su jednostavne, upravo smo povezali modul otiska prsta na UART mikrokontrolera PIC. LCD 16x2 koristi se za prikaz svih poruka. 10k posuda se također koristi s LCD-om za kontrolu kontrasta istih. 16x2 LCD podatkovne iglice povezane su PORTA pinovima. Priključci d4, d5, d6 i d7 LCD-a povezani su s pin RA0, RA1, RA2 i RA3 PIC mikrokontrolera. Četiri tipke (ili tipkovnica) spojene su na PORTD-ove Pin RD0, RD1, RD2 i RD. LED je također povezan na pin PORTC-ov pin RC3. Ovdje smo koristili vanjski kristalni oscilator od 18,432000 MHz za taktiranje mikrokontrolera.

Rad senzora otiska prsta s PIC mikrokontrolerom
Rad ovog projekta je jednostavan, samo prenesite hex datoteku, generiranu iz izvornog koda, u PIC mikrokontroler uz pomoć PIC programera ili plamenika (PIckit2 ili Pickit3 ili drugi), a zatim ćete na LCD-u vidjeti neke uvodne poruke, a zatim i korisnika bit će zatraženo da unese izbor za rad. Kako bi se podudarao korisnik otiska prsta, potrebno je pritisnuti tipku 1, a zatim će LCD zatražiti mjesto prsta na senzoru otiska prsta. Sada stavljanjem prsta preko modula otiska prsta možemo provjeriti jesu li naši otisci već pohranjeni ili ne. Ako je vaš otisak prsta pohranjen, na LCD-u će se prikazati poruka s ID-om za pohranu " ID: 2" sličnog otisku prsta , inače će se prikazati "Not Found" .
Sada da bi upisao ispis prsta , korisnik mora pritisnuti gumb za registraciju ili tipku 2 i slijediti poruke uputa na LCD zaslonu.
Ako korisnik želi izbrisati bilo koji od otisaka prstiju, tada treba pritisnuti tipku za brisanje ili tipku 3. Nakon toga, LCD će tražiti ID otiska prsta koji se želi izbrisati. Sada pomoću tipke za povećanje ili tipke 1 (tipka za usklađivanje ili tipka 1) i tipke za smanjenje ili tipke 2 (tipka za upis ili tipka 2) za povećanje i smanjenje, korisnik može odabrati ID spremljenog otiska prsta i pritisnuti OK gumb za brisanje tog otiska prsta. Za više razumijevanja pogledajte videozapis dat na kraju projekta.

FingerPrint sučelje Napomena: Program ovog projekta pomalo je složen za početnike. Ali njegov jednostavan kôd za povezivanje izrađen je čitanjem podatkovne tablice modula otiska prsta r305. Sve upute za funkcioniranje ovog modula otiska prsta date su u tehničkom listu.
Ovdje smo koristili format okvira za razgovor s modulom otiska prsta. Kad god pošaljemo naredbu ili okvir zahtjeva za podatke modulu otiska prsta, on nam odgovara istim formatom okvira koji sadrži podatke ili informacije povezane s primijenjenom naredbom. Svi formati podataka i okvira naredbi navedeni su u korisničkom priručniku ili u tablici podataka modula otiska prsta R305.
Objašnjenje programiranja
U programiranju smo koristili donji format okvira.

Program započinjemo postavljanjem konfiguracijskih bitova i definiranjem makronaredbi i pinova za LCD, gumbe i LED diode, koje možete provjeriti u cjelovitom kodu navedenom na kraju ovog projekta. Ako ste novi u PIC mikrokontroleru, krenite s Početak rada s projektom PIC Microcontroller.
Zatim smo deklarirali i inicijalizirali neku varijablu i niz i napravili okvir koji trebamo koristiti u ovom projektu za povezivanje modula otiska prsta s PIC mikrokontrolerom.
uchar buf; uchar buf1; volatilni indeks uint = 0; hlapljiva int zastava = 0; uint msCount = 0; uint g_timerflag = 1; hlapljivi uint count = 0; uchar podaci; uint id = 1; nabrojati { 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};
Nakon njega napravili smo LCD funkciju za pogon LCD-a.
praznina lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __zakasniti_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __zakašnjenje_ms (5); EN = 0; } Lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ kašnjenje_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; za (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Dana funkcija koristi se za inicijalizaciju UART-a
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (long) (64UL * baudrate)) - 1; // brzina prijenosa @ 18.432000Mhz Clock TXSTAbits.SYNC = 0; // Postavljanje asinkronog načina, tj. UART RCSTAbits.SPEN = 1; // Omogućuje serijski priključak TRISC7 = 1; // Kao što je propisano u tehničkom listu TRISC6 = 0; // Kao što je propisano u tablici RCSTAbits.CREN = 1; // Omogućuje kontinuirani prijem TXSTAbits.TXEN = 1; // Omogućuje prijenos GIE = 1; // Omogući prekide INTCONbits.PEIE = 1; // ENable periferni prekidi. PIE1bits.RCIE = 1; // Omogući USART primanje prekida PIE1bits.TXIE = 0; // onemogućimo USART TX prekid PIR1bits.RCIF = 0; }
Dane funkcije koriste se za prijenos naredbi na modul otiska prsta i primanje podataka iz modula otiska prsta.
void serialwrite (char ch) { while (TXIF == 0); // Pričekajte da se odašiljački registar isprazni TXIF = 0; // Obriši zastavicu odašiljača TXREG = ch; // učitavanje znaka koji se prenosi u prijenos reg } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } void prekid SerialRxPinInterrupt (void) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; if (indeks> 0) zastava = 1; RCIF = 0; // očisti rx zastavicu } } void serialFlush () { for (int i = 0; i
Nakon njega moramo napraviti funkciju koja priprema podatke koji se prenose na otisak prsta i dekodira podatke koji dolaze iz modula otiska prsta.
int sendcmd2fp (char * pack, int len) { uint res = POGREŠKA; serialFlush (); indeks = 0; __zakašnjenje_ms (100); za (int i = 0; i
Sada su u kodu dostupne četiri funkcije za četiri različita zadatka:
- Funkcija za unos ID-a otiska prsta - jedinica getId ()
- Funkcija za podudaranje prsta - void matchFinger ()
- Funkcija za upis novog prsta - void enrolFinger ()
- Funkcija za brisanje prsta - void deleteFinger ()
Kompletni kod sa sve četiri funkcije dan je na kraju.
Sada u glavnoj funkciji inicijaliziramo GPIO, LCD, UART i provjeravamo je li modul otiska prsta povezan s mikrokontrolerom ili nije. Zatim prikazuje neke uvodne poruke preko LCD-a. Napokon, u while petlji čitamo sve tipke ili tipke za upravljanje projektom.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; serijski početak (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("otisak prsta"); lcdwrite (192, CMD); lcdprint ("Povezivanje"); __delay_ms (2000.); lcdwrite (1, CMD); lcdprint ("Upotreba PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Sažetak kruga"); __delay_ms (2000.); indeks = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP nije pronađen"); __delay_ms (2000.); indeks = 0; } lcdwrite (1, CMD); lcdprint ("FP pronađen"); __zakašnjenje_ms (1000); lcdinst (); dok (1) { FP = podudaranje
Kompletni PIC kod i radni video prikazan je u nastavku. Također provjerite i druge naše projekte pomoću modula senzora za ispis prsta:
- Biometrijska glasačka mašina na osnovi otiska prsta koja koristi Arduino
- Biometrijski sigurnosni sustav koji koristi Arduino i senzor otiska prsta
- Biometrijski sustav praćenja zasnovan na otiscima prstiju koji koristi Arduino
- Povezivanje senzora otiska prsta s Raspberry Pi
