- Nepieciešamās sastāvdaļas
- Shēmas shēma un paskaidrojums
- Pirkstu nospiedumu sensora darbība ar PIC mikrokontrolleru
- Programmēšanas skaidrojums
Pirkstu nospiedumu sensors, ko dažus gadus atpakaļ mēs redzējām Sci-Fi filmās, tagad ir kļuvis ļoti izplatīts, lai pārbaudītu personas identitāti dažādiem mērķiem. Pašlaik mēs varam redzēt uz pirkstu nospiedumiem balstītas sistēmas visur ikdienas dzīvē, piemēram, apmeklējot birojus, darbinieku pārbaudi bankās, skaidras naudas izņemšanu vai noguldījumus bankomātos, identitātes pārbaudi valdības birojos utt. Mēs jau esam to saskarējuši ar Arduino un Ar Raspberry Pi šodien mēs saskaramies ar pirkstu drukas sensoru ar PIC mikrokontrolleru. Izmantojot šo PIC mikrokontrolleru PIC16f877A Finger Print System, mēs varam reģistrēt sistēmā jaunus pirkstu nospiedumus un izdzēst jau padotos pirkstu nospiedumus. Pilnīga sistēmas darbība ir parādīta video dots raksta beigās.
Nepieciešamās sastāvdaļas
- PIC16f877A mikrokontrolleris
- Pirkstu nospiedumu modulis
- Spiediet pogas vai tastatūru
- 16x2 LCD
- 10k katls
- 18,432000 MHz kristāla oscilators
- Maizes dēlis vai PCB (pasūtīts no JLCPCB)
- Džemperu vadi
- LED (pēc izvēles)
- Rezistors 150 omi -1 k omi (pēc izvēles)
- 5v barošanas avots
Shēmas shēma un paskaidrojums
Šajā PIC mikrokontrollera pirkstu drukas sensora saskarnes projektā mēs izmantojām 4 spiedpogas: šīs pogas tiek izmantotas daudzfunkcionālai darbībai. 1. taustiņu izmanto pirkstu nospiedumu un pirkstu nospiedumu daļas palielināšanai, vienlaikus saglabājot vai dzēšot pirkstu nospiedumu sistēmā. 2. taustiņu izmanto, lai reģistrētu jauno pirkstu nospiedumu un samazinātu pirkstu nospiedumu ID, vienlaikus saglabājot vai dzēšot pirkstu nospiedumus sistēmā. Taustiņu 3 izmanto, lai izdzēstu saglabāto pirkstu no sistēmas, un taustiņu 4 izmanto OK. LED tiek izmantots, lai norādītu, ka pirkstu nospiedums ir noteikts vai saskaņots. Šeit mēs izmantojām pirkstu nospiedumu moduli, kas darbojas UART. Tātad šeit mēs esam sasaistījuši šo pirkstu nospiedumu moduli ar PIC mikrokontrolleru pēc noklusējuma datu pārraides ātruma, kas ir 57600.
Tātad, pirmkārt, mums ir jāveic viss nepieciešamais savienojums, kā parādīts ķēdes diagrammā zemāk. Savienojumi ir vienkārši, mēs tikko pievienojām pirkstu nospiedumu moduli PIC mikrokontrollera UART. 16x2 LCD tiek izmantots visu ziņojumu parādīšanai. 10k katls tiek izmantots arī ar LCD, lai kontrolētu tā paša kontrastu. 16x2 LCD datu tapas ir savienotas ar PORTA tapām. LCD d4, d5, d6 un d7 tapas ir savienotas ar attiecīgi PIC mikrokontrollera tapām RA0, RA1, RA2 un RA3. Četras spiedpogas (vai tastatūra) ir savienotas ar PORTD tapām RD0, RD1, RD2 un RD. LED ir pievienots arī PORTC porta tapai RC3. Šeit mēs izmantojām 18,432000 MHz ārējo kristāla oscilatoru, lai kontrolētu mikrokontrolleru.
Pirkstu nospiedumu sensora darbība ar PIC mikrokontrolleru
Šī projekta darbība ir vienkārša. Vienkārši augšupielādējiet HIC failu, kas ģenerēts no avota koda, PIC mikrokontrolierī ar PIC programmētāja vai degļa palīdzību (PIckit2 vai Pickit3 vai citiem), un tad jūs redzēsiet dažus ievadziņojumus, izmantojot LCD, un pēc tam lietotājs tiks lūgts ievadīt izvēli operācijām. Lai saskaņotu pirksta nospiedumu, lietotājam jānospiež taustiņš 1, pēc tam LCD lūgs ievietot pirkstu uz pirkstu nospieduma sensora. Tagad, uzliekot pirkstu virs pirkstu nospiedumu moduļa, mēs varam pārbaudīt, vai mūsu pirkstu nospiedumi jau ir saglabāti vai nav. Ja jūsu pirkstu nospiedumu tiek uzglabāti, tad LCD parādīs ziņojumu ar uzglabāšanu ID pirkstu nospiedumu līdzīgu ' ID: 2 ", pretējā gadījumā tas rādīs " Not Found " .
Tagad, lai reģistrētu pirkstu druku, lietotājam jānospiež reģistrēšanās poga vai taustiņš 2 un jāievēro LCD ekrānā redzamās instrukcijas.
Ja lietotājs vēlas izdzēst kādu no pirkstu nospiedumiem, viņam jānospiež dzēšanas poga vai taustiņš 3. Pēc tam LCD lūgs dzēšamā pirksta nospieduma ID. Tagad, izmantojot pieauguma spiedpogu vai 1. taustiņu (spēles spiedpogu vai 1. taustiņu) un samazināšanas spiedpogu vai 2. taustiņu (reģistrēšanas spiedpogu vai 2. taustiņu), lai palielinātu un samazinātu, lietotājs var izvēlēties saglabātās pirkstu drukas ID un nospiediet OK pogu, lai izdzēstu pirkstu nospiedumu. Lai iegūtu lielāku izpratni, apskatiet video, kas sniegts projekta beigās.
FingerPrint interfeiss Piezīme: Šī projekta programma ir nedaudz sarežģīta iesācējiem. Bet tā vienkāršais saskarnes kods, kas izveidots, izmantojot r305 pirkstu nospiedumu moduļa datu lapas lasīšanu. Visas instrukcijas par šī pirksta nospieduma moduļa darbību ir dotas datu lapā.
Šeit mēs esam izmantojuši rāmja formātu, lai runātu ar pirkstu nospiedumu moduli. Ikreiz, kad nosūta komandu vai datu pieprasījuma rāmi pirkstu nospiedumu modulim, tas mums atbild ar to pašu rāmja formātu, kurā ir dati vai informācija, kas saistīta ar lietoto komandu. Visi datu un komandu rāmja formāti ir norādīti lietotāja rokasgrāmatā vai R305 pirkstu nospiedumu moduļa datu lapā.
Programmēšanas skaidrojums
Programmējot, mēs esam izmantojuši zemāk redzamo rāmja formātu.
Mēs sākam programmu, iestatot konfigurācijas bitus un nosakot makro un tapas LCD, pogām un LED, kuras varat pārbaudīt pilnā kodā, kas norādīts šī projekta beigās. Ja PIC mikrokontrolieris jums ir jauns, sāciet ar darba sākšanu ar PIC mikrokontrolleru projektu.
Tad mēs deklarējām un inicializējām dažus mainīgos un masīvu, un izveidojām rāmi, kas mums jāizmanto šajā projektā, lai pirkstu nospiedumu moduli savienotu ar PIC mikrokontrolleru.
uchar buf; uchar buf1; gaistošā uint indekss = 0; gaistošais int karogs = 0; uint msCount = 0; uint g_timerflag = 1; gaistošo uint skaits = 0; uchar dati; uint id = 1; uzskaite { 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};
Pēc tam mēs esam izveidojuši LCD funkciju, lai vadītu LCD.
void lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __kavēšanās_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __kavēšanās_ms (5); EN = 0; } Lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ kavēšanās_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; par (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Dotā funkcija tiek izmantota UART inicializēšanai
void serialbegin (uint baudrate) { SPBRG = (18432000UL / (garš) (64UL * baudrate)) - 1; // datu pārraides ātrums @ 18.432000Mhz pulkstenis TXSTAbits.SYNC = 0; // Asinhronā režīma iestatīšana, ti, UART RCSTAbits.SPEN = 1; // Iespējo sērijas portu TRISC7 = 1; // Kā noteikts datu lapā TRISC6 = 0; // Kā noteikts datu lapā RCSTAbits.CREN = 1; // Iespējo nepārtrauktu saņemšanu TXSTAbits.TXEN = 1; // Iespējo pārraidi GIE = 1; // ENABLE pārtrauc INTCONbits.PEIE = 1; // Iespējot perifēros traucējumus. PIE1bits.RCIE = 1; // ENABLE USART saņemt pārtraukuma PIE1bits.TXIE = 0; // atspējot USART TX pārtraukumu PIR1bits.RCIF = 0; }
Dotās funkcijas tiek izmantotas komandu pārsūtīšanai uz pirkstu nospiedumu moduli un datu saņemšanai no pirkstu nospiedumu moduļa.
void serialwrite (char ch) { while (TXIF == 0); // Pagaidiet, kamēr raidītāju reģistrs kļūst tukšs TXIF = 0; // Notīrīt raidītāja karogu TXREG = ch; // nosūtiet pārsūtāmo simbolu pārraides reg } serialprint (char * str) { while (* str) { serialwrite (* str ++); } } anulēt pārtraukt SerialRxPinInterrupt (void) { if ((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; ja (indekss> 0) karogs = 1; RCIF = 0; // notīrīt rx karogu } } void serialFlush () { for (int i = 0; i
Pēc tam mums jāizveido funkcija, kas sagatavo datus, kas jāpārsūta uz pirkstu nospiedumiem, un atšifrē datus, kas nāk no pirkstu nospiedumu moduļa.
int sendcmd2fp (char * pack, int len) { uint res = KĻŪDA; sērijasSkalot (); indekss = 0; __kavēšanās_ms (100); par (int i = 0; i
Tagad kodā ir pieejamas četras funkcijas četriem dažādiem uzdevumiem:
- Funkcija pirksta nospieduma ID ievadīšanai - vienība getId ()
- Funkcija pirksta saskaņošanai - void matchFinger ()
- Funkcija jauna pirksta reģistrēšanai - void enrolFinger ()
- Funkcija pirksta dzēšanai - void deleteFinger ()
Pilnīgs kods ar visām četrām funkcijām ir norādīts beigās.
Tagad galvenajā funkcijā mēs inicializējam GPIO, LCD, UART un pārbaudām, vai pirkstu nospiedumu modulis ir savienots ar mikrokontrolleru. Tad tas parāda dažus ievadziņojumus, izmantojot LCD. Visbeidzot, kamēr cilpa, mēs lasām visus taustiņus vai spiedpogas, lai darbotos projektā.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; sērijas sākums (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("pirkstu nospiedums"); lcdwrite (192, CMD); lcdprint ("Saskarne"); __kavēšanās_ms (2000); lcdwrite (1, CMD); lcdprint ("Izmantojot PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Circuit Digest"); __kavēšanās_ms (2000); indekss = 0; while (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("FP nav atrasts"); __kavēšanās_ms (2000); indekss = 0; } lcdwrite (1, CMD); lcdprint ("Atrasts FP"); __kavēšanās_ms (1000); lcdinst (); kamēr (1) { FP = sakrīt
Pilns PIC kods un darba video ir norādīts zemāk. Pārbaudiet arī citus mūsu projektus, izmantojot pirkstu drukas sensora moduli:
- Uz pirkstu nospiedumiem balstīta biometriskā balsošanas mašīna, izmantojot Arduino
- Biometriskā drošības sistēma, izmantojot Arduino un pirkstu nospiedumu sensoru
- Uz pirkstu nospiedumiem balstīta biometriskā apmeklēšanas sistēma, izmantojot Arduino
- Pirkstu nospiedumu sensora mijiedarbība ar Raspberry Pi