- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- Kā darbojas pirkstu nospiedumu apmeklēšanas sistēma
- Code Explanation
Pēc Penas štata universitātes pētnieku domām, cilvēki, visticamāk, uzticas mašīnām pār cilvēkiem, kas, visticamāk, redzams, ka mēs tik viegli atklājam mašīnai savu bankomāta tapu. Mūsdienās pasaulē, kur AI, mašīnmācīšanās, tērzēšanas roboti, viedie skaļruņi, roboti utt. Aktīvi attīstās, šī sinerģija starp cilvēkiem un robotiem ir tikai paredzēta. Mūsdienās, sākot no tiltu nodevu iekasētājiem un beidzot ar kasēm, visu ap mums nomaina mašīnas, lai padarītu darbu vieglāku un efektīvāku. Lai neatpaliktu no fāzes, šajā projektā mēs izveidosim Bio-metric Attendance sistēmu, izmantojot AVR mikrokontrollerus, lai aizstātu manuālo apmeklējuma pieņemšanas procedūru. Šī sistēma būs uzticamāka un efektīvāka, jo tā ietaupītu laiku un izvairītos no ļaundariem.
Pirkstu nospiedumu apmeklēšanas sistēmas jau tagad ir viegli pieejamas tieši tirgū, bet kas ir jautrāk nekā tādas uzbūve? Mēs arī agrāk esam izveidojuši plašu apmeklēšanas sistēmu klāstu, sākot no vienkāršas RFID balstītas apmeklēšanas sistēmas līdz IoT balstītai biometriskai apmeklēšanas sistēmai, izmantojot Arduino un Raspberry Pi. Šajā projektā esam reģistrējuši apmeklējumu, izmantojot pirkstu nospiedumu moduli un AVR (atmega32). Izmantojot pirkstu nospiedumu sensoru, sistēma kļūs drošāka lietotājiem. Nākamajās sadaļās ir paskaidrota tehniskā informācija par to, kā uz pirkstu nospiedumiem balstītu biometrisko apmeklējumu sistēmu izveidot, izmantojot AVR.
Nepieciešamās sastāvdaļas
- Atmega32 -1
- Pirkstu nospiedumu modulis (r305) -1
- Nospiediet pogu vai membrānas pogas - 4
- Gaismas diodes -2
- 1K rezistors -2
- 2.2K rezistors -1
- Strāvas 12v adapteris
- Savienojošie vadi
- Buzzer -1
- 16x2 LCD -1
- PCB vai maizes dēlis
- RTC modulis (ds1307 vai ds3231) -1
- LM7805 -1
- 1000uf, 10uf kondensators -1
- Vīriešu mātīte Burgstips
- DC JACK (pēc izvēles)
- BC547 tranzistors -1
Šajā pirkstu nospiedumu apmeklēšanas sistēmas shēmā mēs esam izmantojuši pirkstu nospiedumu sensora moduli, lai autentificētu personas vai darbinieka identitāti, veicot viņu pirkstu nospiedumu ievadi sistēmā. Šeit mēs izmantojam 4 spiedpogas, lai reģistrētu, dzēstu, palielinātu un samazinātu pirkstu drukas datus . 1. atslēga tiek izmantota jaunas personas reģistrēšanai sistēmā. Tātad, kad lietotājs vēlas reģistrēt jaunu pirkstu, viņam / viņai jānospiež taustiņš 1, pēc tam LCD lūdz viņam divas reizes ievietot pirkstu uz pirkstu nospiedumu sensora, pēc tam tiek prasīts darbinieka ID. Tāpat 2. taustiņam ir divkārša funkcija, piemēram, kad lietotājs reģistrē jaunu pirkstu, viņam / viņai jāizvēlas pirksta izdrukas IDizmantojot vēl divus taustiņus, proti, 3. un 4. Tagad lietotājam jānospiež 1. taustiņš (šoreiz šis taustiņš uzvedas kā OK), lai turpinātu izvēlēto ID. 2. taustiņu izmanto arī datu atiestatīšanai vai dzēšanai no mikrokontrollera EEPROM.
Pirkstu nospiedumu sensora modulis uztver pirksta izdrukas attēlu un pēc tam pārveido to par līdzvērtīgu veidni un saglabā tos savā atmiņā atbilstoši mikrokontrollera izvēlētajam ID. Visu procesu pavada mikrokontrolleris, piemēram, pirksta nospieduma attēla uzņemšana; pārveidojiet to veidnēs un saglabājiet kā ID utt. Varat arī pārbaudīt šos citus pirkstu nospiedumu sensoru projektus, kur mēs esam izveidojuši pirkstu nospiedumu sensoru drošības sistēmu un pirkstu nospiedumu sensoru balsošanas mašīnu.
Ķēdes shēma
Pilna shēma shēmai apmeklējumu sistēmas projektam, kura pamatā ir pirkstu nospiedumi, parādīta zemāk. Tam ir Atmega32 mikrokontrolleris, lai kontrolētu visu projekta procesu. Spiedpogu vai membrānas pogu izmanto, lai reģistrētu, dzēstu, izvēlētos apmeklējuma ID, signālu izmanto skaņas signālu un 16x2 LCD, lai instruētu lietotāju, kā lietot mašīnu.
Kā parādīts shēmas shēmā, spiedpogas vai membrānas pogas ir tieši savienotas ar mikrokontrollera tapām PA2 (taustiņš ENROLL 1), PA3 (DEL taustiņš 2), PA0 (taustiņš 3 UP), PA1 (taustiņš DOWN 4) attiecībā pret zemi vai PA4. Gaismas diode ir savienota ar mikrokontrollera tapu PC2 attiecībā pret zemi caur 1k rezistoru. Pirkstu nospiedumu moduļa Rx un Tx ir tieši savienoti ar mikrokontrollera sērijas tapām PD1 un PD3. 5v barošana tiek izmantota visas ķēdes barošanai, izmantojot LM7805 sprieguma regulatorukuru darbina 12v līdzstrāvas adapteris. Pie tapas PC3 ir pievienots arī skaņas signāls. 16x2 LCD ir konfigurēts 4 bitu režīmā, un tā RS, RW, EN, D4, D5, D6 un D7 ir tieši savienoti ar mikrokontrollera tapām PB0, PB1, PB2, PB4, PB5, PB6, PB7. RTC modulis ir savienots ar I2Cpin PC0 SCL un PC1 SDA. PD7 tiek izmantots kā mīksts UART Tx tapa, lai iegūtu pašreizējo laiku.
Kā darbojas pirkstu nospiedumu apmeklēšanas sistēma
Ikreiz, kad lietotājs novieto pirkstu virs pirkstu nospiedumu moduļa, pirkstu nospiedumu modulis uztver pirksta attēlu un meklē, vai sistēmā ar šo pirksta nospiedumu ir saistīts kāds ID. Ja tiek konstatēts pirksta nospieduma ID, LCD displejā būs redzams reģistrēts apmeklējums un tajā pašā laikā skaņas signāls vienu reizi pīkstēs.
Kopā ar pirkstu nospiedumu moduli laika un datuma datiem esam izmantojuši arī RTC moduli. Laiks un datums sistēmā darbojas nepārtraukti, tāpēc mikrokontrolleris var prasīt laiku un datumu ikreiz, kad patiesais lietotājs novieto pirkstu virs pirksta nospieduma sensora un pēc tam tos saglabā EEPROM pie atvēlētās atmiņas vietas.
Lietotājs var lejupielādēt apmeklējuma datus, nospiežot un turot nospiestu taustiņu 4. Pievienojiet barošanu ķēdei un pagaidiet, un pēc kāda laika LCD parādīs “Lejupielāde…”. Un lietotājs var redzēt datus par apmeklējumu, izmantojot seriālo monitoru, šeit šajā kodā programmatūra UART ir ieprogrammēta pie pin PD7-pin20 kā Tx, lai nosūtītu datus uz termināli. Lietotājam ir nepieciešams arī TTL uz USB pārveidotājs, lai seriālā terminālā redzētu apmeklējuma datus.
And if the user wants to delete all the data then he/she has to press and hold key 2 and then connect power and wait for some time. Now after some time LCD will show ‘Please wait…’ and then ‘Record Deleted successfully’. These two steps are not shown in demonstration video given in the end.
Code Explanation
Complete code along with the video for this biometric attendance system is given at the end. Code of this project is a little bit lengthy and complex for beginner. Hence we have tried to take descriptive variables to make good readability and understanding. First of all, we have included some necessary header file then written macros for different-different purpose.
#define F_CPU 8000000ul #include #include
After this, we have declared some variables and arrays for fingerprint command and response. We have also added some functions for fetching and setting data to RTC.
void RTC_stp() { TWCR=(1<
Then we have some functions for LCD which are responsible to drive the LCD. LCD driver function is written for 4-bit mode drive. Followed by that we also have some UART driver functions which are responsible for initializing UART and exchanging data between fingerprint sensor and microcontroller.
void serialbegin() { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB=(1<
Now we have some more UART function but they are software UART. It is used for transferring saved data to the computer via serial terminal. These functions are delay-based and don’t use any type of interrupt. And for UART only tx signal will work and we have hardcoded baud rate for soft UART as 9600.
void SerialSoftWrite(char ch) { PORTD&=~(1<<7); _delay_us(104); for(int i=0;i<8;i++) { if(ch & 1) PORTD-=(1<<7); else PORTD&=~(1<<7); _delay_us(104); ch>>=1; } PORTD-=(1<<7); _delay_us(104); } void SerialSoftPrint(char *str) { while(*str) { SerialSoftWrite(*str); str++; } }
Followed by that we have functions that are responsible for displaying the RTC time in the LCD. The below given functions are used for writing attendance data to EEPROM and reading attendance data from EEPROM.
int eeprom_write(unsigned int add,unsigned char data) { while(EECR&(1<
The below function is responsible for reading fingerprint image and convert them in template and matching with already stored image and show result over LCD.
void matchFinger() { // lcdwrite(1,CMD); // lcdprint("Place Finger"); // lcdwrite(192,CMD); // _delay_ms(2000); if(!sendcmd2fp((char *)&f_detect,sizeof(f_detect))) { if(!sendcmd2fp((char *)&f_imz2ch1,sizeof(f_imz2ch1))) { if(!sendcmd2fp((char *)&f_search,sizeof(f_search))) { LEDHigh; buzzer(200); uint id= data; id<<=8; id+=data; uint score=data; score<<=8; score+=data; (void)sprintf((char *)buf1,"Id: %d",(int)id); lcdwrite(1,CMD); lcdprint((char *)buf1); saveData(id); _delay_ms(1000); lcdwrite(1,CMD); lcdprint("Attendance"); lcdwrite(192,CMD); lcdprint("Registered"); _delay_ms(2000); LEDLow; }
Followed by that we have a function that is used for enrolling a new finger and displaying the result or status on LCD. Then the below function is used for deleting stored fingerprint from the module by using id number and show status of the same.
void deleteFinger() { id=getId(); f_delete=id>>8 & 0xff; f_delete=id & 0xff; f_delete=(21+id)>>8 & 0xff; f_delete=(21+id) & 0xff; if(!sendcmd2fp(&f_delete,sizeof(f_delete))) { lcdwrite(1,CMD); sprintf((char *)buf1,"Finger ID %d ",id); lcdprint((char *)buf1); lcdwrite(192, CMD); lcdprint("Deleted Success"); } else { lcdwrite(1,CMD); lcdprint("Error"); } _delay_ms(2000); }
Below function is responsible for sending attendance data to serial terminal via soft UART pin PD7 and TTL to USB converter.
/*function to show attendence data on serial moinitor using softserial pin PD7*/ void ShowAttendance() { char buf; lcdwrite(1,CMD); lcdprint("Downloding…."); SerialSoftPrintln("Attendance Record"); SerialSoftPrintln(" "); SerialSoftPrintln("S.No ID1 ID2 Id3 ID4 ID5 "); //serialprintln("Attendance Record"); //serialprintln(" "); //serialprintln("S.No ID1 ID2 Id3 ID4 ID5"); for(int cIndex=1;cIndex<=8;cIndex++) { sprintf((char *)buf,"%d " "%d:%d:%d %d/%d/20%d " "%d:%d:%d %d/%d/20%d " "%d:%d:%d %d/%d/20%d " "%d:%d:%d %d/%d/20%d " "%d:%d:%d %d/%d/20%d ", cIndex, eeprom_read((cIndex*6)),eeprom_read((cIndex*6)+1),eeprom_read((cIndex*6)+2),eeprom_read((cIndex*6)+3),eeprom_read((cIndex*6)+4),eeprom_read((cIndex*6)+5), eeprom_read((cIndex*6)+48),eeprom_read((cIndex*6)+1+48),eeprom_read((cIndex*6)+2+48),eeprom_read((cIndex*6)+3+48),eeprom_read((cIndex*6)+4+48),eeprom_read((cIndex*6)+5+48), eeprom_read((cIndex*6)+96),eeprom_read((cIndex*6)+1+96),eeprom_read((cIndex*6)+2+96),eeprom_read((cIndex*6)+3+96),eeprom_read((cIndex*6)+4+96),eeprom_read((cIndex*6)+5+96), eeprom_read((cIndex*6)+144),eeprom_read((cIndex*6)+1+144),eeprom_read((cIndex*6)+2+144),eeprom_read((cIndex*6)+3+144),eeprom_read((cIndex*6)+4+144),eeprom_read((cIndex*6)+5+144), eeprom_read((cIndex*6)+192),eeprom_read((cIndex*6)+1+192),eeprom_read((cIndex*6)+2+192),eeprom_read((cIndex*6)+3+192),eeprom_read((cIndex*6)+4+192),eeprom_read((cIndex*6)+5+192)); SerialSoftPrintln(buf); //serialprintln(buf); } lcdwrite(192,CMD); lcdprint("Done"); _delay_ms(2000); }
Below function is used for deleting all the attendance data from the microcontroller’s EEPROM.
void DeleteRecord() { lcdwrite(1,CMD); lcdprint("Please Wait…"); for(int i=0;i<255;i++) eeprom_write(i,10); _delay_ms(2000); lcdwrite(1,CMD); lcdprint("Record Deleted"); lcdwrite(192,CMD); lcdprint("Successfully"); _delay_ms(2000); }
In the main function we will initialize all the used module and gpio pins. Finally, all-controlling event are performed in this as shown below
while(1) { RTC(); // if(match == LOW) // { matchFinger(); // } if(enrol == LOW) { buzzer(200); enrolFinger(); _delay_ms(2000); // lcdinst(); } else if(delet == LOW) { buzzer(200); getId(); deleteFinger(); _delay_ms(1000); } } return 0; }
The complete working set-up is shown in the video linked below. Hope you enjoyed the project and learnt something new. If you have any questions leave them in the comment section or use the forums for other technical questions.