- Mga Kinakailangan na Bahagi
- Circuit Diagram at Paliwanag
- Pagpapatakbo ng Fingerprint Sensor na may PIC Microcontroller
- Paliwanag sa Programming
Ang Finger Print Sensor, na dating nakikita natin sa mga pelikula sa Sci-Fi ilang taon na ang nakalilipas, ay naging pangkaraniwan na upang i-verify ang pagkakakilanlan ng isang tao para sa iba't ibang mga layunin. Sa kasalukuyang oras maaari nating makita ang mga system na batay sa fingerprint kahit saan sa ating pang-araw-araw na buhay tulad ng pagdalo sa mga tanggapan, pag-verify ng empleyado sa mga bangko, para sa cash withdrawal o pagdeposito sa mga ATM, para sa pagpapatunay ng pagkakakilanlan sa mga tanggapan ng gobyerno atbp Na-interfaced na namin ito sa Arduino at kasama ang Raspberry Pi, ngayon ay pupunta kami sa interface ng Finger Print Sensor sa PIC microcontroller. Gamit ang PIC microcontroller PIC16f877A Finger Print System na ito, maaari kaming magpatala ng mga bagong fingerprint sa system at maaaring tanggalin ang mga nakain na mga fingerprint. Ang kumpletong pagtatrabaho ng system ay ipinakita sa Video na ibinigay sa pagtatapos ng artikulo.
Mga Kinakailangan na Bahagi
- PIC16f877A Microcontroller
- Modyul ng Fingerprint
- Itulak ang mga pindutan o keypad
- 16x2 LCD
- 10k palayok
- 18.432000 MHz Crystal Oscillator
- Bread Board o PCB (iniutos mula sa JLCPCB)
- Jumper wires
- LED (opsyonal)
- Resistor 150 ohm -1 k ohm (opsyonal)
- 5v Power supply
Circuit Diagram at Paliwanag
Sa proyektong ito ng interfacing ng sensor ng PIC Microcontroller Finger Print, gumamit kami ng 4 na pindutan ng push: ang mga pindutan na ito ay ginagamit para sa multifunctioning. Ginagamit ang Key 1 para sa pagtutugma sa pag-print ng daliri at pagtaas ng fingerprint ID habang itinatago o tinatanggal ang fingerprint sa system. Ginagamit ang Key 2 para sa pagpapatala ng bagong fingerprint at para sa pagbawas ng fingerprint ID habang itinatago o tinatanggal ang fingerprint sa system. Ginagamit ang Key 3 para sa pagtanggal ng nakaimbak na daliri mula sa system at ginagamit ang key 4 para sa OK. Isang LED ay ginagamit para sa isang pahiwatig na ang fingerprint ay napansin o naitugma. Dito nagamit namin ang isang module ng fingerprint na gumagana sa UART. Kaya narito na-interfaced namin ang module ng fingerprint na ito sa PIC microcontroller sa default na rate ng baud na 57600.
Kaya, una sa lahat, kailangan nating gawin ang lahat ng kinakailangang koneksyon tulad ng ipinakita sa Circuit Diagram sa ibaba. Ang mga koneksyon ay simple, nakakonekta lamang kami ng module ng fingerprint sa UIC ng PIC microcontroller's. Ginagamit ang isang 16x2 LCD para sa pagpapakita ng lahat ng mga mensahe. Ang isang 10k palayok ay ginagamit din sa LCD para sa pagkontrol sa kaibahan ng pareho. Ang mga 16x2 LCD data pin ay konektado sa mga PORTA pin. Ang d4, d5, d6, at d7 ng LCD ay konektado sa Pin RA0, RA1, RA2, at RA3 ng PIC microcontroller ayon sa pagkakabanggit. Apat na mga push button (o keypad) ay konektado sa PORTD's Pin RD0, RD1, RD2, at RD. Nakakonekta din ang LED sa port ng PORTC na pin RC3. Dito nagamit namin ang isang 18.432000 MHz panlabas na kristal oscillator upang mai-orasan ang microcontroller.
Pagpapatakbo ng Fingerprint Sensor na may PIC Microcontroller
Ang pagpapatakbo ng proyektong ito ay simple, i-upload lamang ang hex file, na nabuo mula sa source code, sa PIC microcontroller sa tulong ng PIC programmer o burner (PIckit2 o Pickit3 o iba pa) at pagkatapos ay makikita mo ang ilang mga intro na mensahe sa paglipas ng LCD at pagkatapos ay ang gumagamit hihilingin na magpasok ng isang pagpipilian para sa mga pagpapatakbo. Upang maitugma ang gumagamit ng fingerprint kailangang pindutin ang key 1 pagkatapos hihilingin ng LCD ang Place Finger sa Finger Print Sensor. Ngayon sa pamamagitan ng paglalagay ng isang daliri sa module ng fingerprint, maaari nating suriin kung ang ating mga fingerprint ay nakaimbak na o hindi. Kung ang iyong fingerprint ay naka-imbak pagkatapos ay ipapakita ng LCD ang mensahe na may nakaimbak na ID ng mala-fingerprint na ' ID: 2' kung hindi man ipapakita ang 'Hindi Nahanap' .
Ngayon upang magpatala ng isang daliri na Pag- print, kailangang pindutin ng gumagamit ang pagpapatala ng pindutan o key 2 at sundin ang mga mensahe ng tagubilin sa LCD screen.
Kung nais ng gumagamit na tanggalin ang anuman sa mga fingerprint pagkatapos ay kailangang pindutin ng gumagamit ang pindutan na tanggalin o key 3. Pagkatapos nito, hihilingin ng LCD ang ID ng fingerprint na tatanggalin. Ngayon sa pamamagitan ng paggamit ng increment push button o key 1 (match push button o key 1) at decrement push button o key 2 (enroll push button o key 2) para sa pagtaas at pagbawas, maaaring piliin ng gumagamit ang ID ng naka-save na Finger Print at pindutin ang OK pindutan upang tanggalin ang fingerprint na iyon. Para sa higit pang pag-unawa tingnan ang video na ibinigay sa pagtatapos ng proyekto.
Tandaan ng interfacing ng FingerPrint: Ang programa ng proyektong ito ay medyo kumplikado para sa isang nagsisimula. Ngunit ang simpleng interfacing code na ginawa nito sa pamamagitan ng paggamit ng pagbabasa ng r305 na tatak ng data na module ng fingerprint. Ang lahat ng mga tagubilin sa paggana ng module ng fingerprint na ito ay ibinibigay sa datasheet.
Dito nagamit namin ang isang format ng frame upang makipag-usap sa module ng fingerprint. Tuwing magpapadala kami ng isang utos o frame ng paghiling ng data sa module ng fingerprint tumutugon ito sa amin ng parehong format ng frame na naglalaman ng data o impormasyon na nauugnay sa inilapat na utos. Ang lahat ng format ng data at frame ng utos ay ibinigay sa manwal ng gumagamit o sa datasheet ng R305 na module ng fingerprint.
Paliwanag sa Programming
Sa pagprograma, ginamit namin ang format sa ibaba ng frame.
Sinimulan namin ang programa sa pamamagitan ng pagtatakda ng mga config bit at pagtukoy ng macros at pin para sa LCD, Mga Pindutan at LED, na maaari mong suriin ang kumpletong code na ibinigay sa pagtatapos ng proyektong ito. Kung bago ka sa PIC Microcontroller pagkatapos ay magsimula sa Pagsisimula sa PIC Microcontroller Project.
Pagkatapos ay idineklara at inisyal namin ang ilang variable at array, at gumawa ng isang frame na kailangan naming gamitin sa proyektong ito upang i-interface ang module ng fingerprint na may PIC microcontroller.
uchar buf; uchar buf1; pabagu-bago ng isip index = 0; pabagu-bago ng int flag = 0; uint msCount = 0; uint g_timerflag = 1; pabagu-bago ng isip count = 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};
Pagkatapos nito, gumawa kami ng LCD function upang humimok ng LCD.
walang bisa lcdwrite (uchar ch, uchar rw) { LCDPORT = ch >> 4 & 0x0F; RS = rw; EN = 1; __delay_ms (5); EN = 0; LCDPORT = ch & 0x0F; EN = 1; __delay_ms (5); EN = 0; } Lcdprint (char * str) { habang (* str) { lcdwrite (* str ++, DATA); // __ delay_ms (20); } } lcdbegin () { uchar lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; uint i = 0; para sa (i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Ginagamit na pagpapaandar ay ginagamit para sa simula ng UART
walang bisa serialbegin (uint baudrate) { SPBRG = (18432000UL / (haba) (64UL * baudrate)) - 1; // baud rate @ 18.432000Mhz Clock TXSTAbits.SYNC = 0; // Setting Asynchronous Mode, ie UART RCSTAbits.SPEN = 1; // Pinapagana ang Serial Port TRISC7 = 1; // Tulad ng Inireseta sa Datasheet TRISC6 = 0; // Tulad ng Inireseta sa Datasheet RCSTAbits.CREN = 1; // Pinapagana ang Patuloy na Pagtanggap TXSTAbits.TXEN = 1; // Pinapagana ang Transmission GIE = 1; // ENABLE interrupts INTCONbits.PEIE = 1; // Paganahin ang mga peripheral interrupts. PIE1bits.RCIE = 1; // ENABLE USART makatanggap ng makagambala PIE1bits.TXIE = 0; // huwag paganahin ang USART TX makagambala PIR1bits.RCIF = 0; }
Ang mga naibigay na pag-andar ay ginagamit para sa paglilipat ng mga utos sa fingerprint Module at pagtanggap ng data mula sa module ng fingerprint.
walang bisa ang serialwrite (char ch) { habang (TXIF == 0); // Maghintay hanggang sa ang rehistro ng transmiter ay magiging walang laman TXIF = 0; // Clear transmitter flag TXREG = ch; // load the char to be transmitted into transmit reg } serialprint (char * str) { habang (* str) { serialwrite (* str ++); } } walang bisa na nakakagambala sa SerialRxPinInterrupt (void) { if (((PIR1bits.RCIF == 1) && (PIE1bits.RCIE == 1)) { uchar ch = RCREG; buf = ch; kung (index> 0) flag = 1; RCIF = 0; // clear rx flag } } walang bisa serialFlush () { para sa (int i = 0; i
Pagkatapos nito kailangan naming gumawa ng isang pagpapaandar na naghahanda ng data na maipapadala sa fingerprint at mai-decode ang data na nagmumula sa module ng fingerprint.
int sendcmd2fp (char * pack, int len) { uint res = ERROR; serialFlush (); index = 0; __delay_ms (100); para sa (int i = 0; i
Ngayon, mayroong apat na pagpapaandar na magagamit sa code para sa apat na magkakaibang gawain:
- Pag-andar para sa pag-input ng fingerprint ID - unit getId ()
- Pag-andar para sa pagtutugma ng daliri - walang bisa ang matchFinger ()
- Pag-andar para sa pagpapatala ng bagong daliri - walang bisa ang enrolFinger ()
- Pag-andar para sa pagtanggal ng isang daliri - walang bisa ang deleteFinger ()
Ang kumpletong code sa lahat ng apat na pag-andar ay ibinibigay sa dulo.
Ngayon sa pangunahing pagpapaandar, pinasimulan namin ang mga GPIO, LCD, UART at suriin kung ang module ng fingerprint ay konektado sa isang microcontroller o hindi. Pagkatapos ay nagpapakita ito ng ilang mga intro message sa paglipas ng LCD. Sa wakas habang binabasa namin ang loop ng lahat ng mga susi o mga pindutan ng push upang mapatakbo ang proyekto.
int main () { void (* FP) (); ADCON1 = 0b00000110; LEDdir = 0; SWPORTdir = 0xF0; SWPORT = 0x0F; serialbegin (57600); LCDPORTDIR = 0x00; TRISE = 0; lcdbegin (); lcdprint ("Fingerprint"); lcdwrite (192, CMD); lcdprint ("Interfacing"); __delay_ms (2000); lcdwrite (1, CMD); lcdprint ("Paggamit ng PIC16F877A"); lcdwrite (192, CMD); lcdprint ("Circuit Digest"); __delay_ms (2000); index = 0; habang (sendcmd2fp (& passPack, sizeof (passPack))) { lcdwrite (1, CMD); lcdprint ("Hindi Nahanap ang FP"); __delay_ms (2000); index = 0; } lcdwrite (1, CMD); lcdprint ("Nahanap ang FP"); __delay_ms (1000); lcdinst (); habang (1) { FP = tugma
Kumpletuhin ang PIC Code at isang Working Video ay ibinibigay sa ibaba. Suriin din ang aming iba pang mga proyekto gamit ang Finger Print Sensor Module:
- Fingerprint Batay sa Biometric Voting Machine na gumagamit ng Arduino
- Biometric Security System gamit ang Arduino at Fingerprint Sensor
- Fingerprint Batay sa Biometric Attendance System gamit ang Arduino
- Ang Fingerprint Sensor Interfacing sa Raspberry Pi