A Pen Állami Egyetem kutatói szerint az emberek nagyobb valószínűséggel bíznak a gépekben az emberek felett, ami nyilvánvalóan nyilvánvaló, hogy az ATM-tűnket ilyen könnyen feltárjuk egy gép előtt. Ma, azon a világon, ahol az AI, a gépi tanulás, a csevegőrobotok, az intelligens hangszórók, a robotok stb. Aktívan haladnak, ez a szinergia az emberek és a robotok között csak fokozódni fog. Ma a híddíjszedőktől a pénztárosokig mindent megváltoztatnak körülöttünk a gépek, hogy könnyebben és hatékonyabban végezzék a munkát. A fázissal való lépéstartáshoz ebben a projektben felépítünk egy Bio-metric Attendance rendszert, amely AVR mikrovezérlőket használ a részvétel kézi eljárásának helyettesítésére. Ez a rendszer megbízhatóbb és hatékonyabb lesz, mivel időt takarít meg és elkerüli a kitérőket.
Az ujjlenyomat-nyilvántartási rendszerek már közvetlenül elérhetők a piacról, de mi szórakoztatóbb, mint létrehozni? Korábban sokféle Attendance rendszert is felépítettünk, az egyszerű RFID alapú Attendance rendszertől az IoT alapú biometrikus Attendance rendszerig, Arduino és Raspberry Pi használatával. Ebben a projektben ujjlenyomat-modult és AVR-t (atmega32) használtunk a részvétel regisztrálásához. Az ujjlenyomat-érzékelő használatával a rendszer biztonságosabbá válik a felhasználók számára. A következő szakaszok az ujjlenyomat-alapú biometrikus jelenléti rendszer AVR segítségével történő elkészítésének technikai részleteit ismertetik.
Szükséges alkatrészek
- Atmega32 -1
- Ujjlenyomat-modul (r305) -1
- Nyomógomb vagy membrángombok - 4
- LED-ek -2
- 1K ellenállás -2
- 2,2K ellenállás -1
- 12V-os tápegység
- Csatlakozó vezetékek
- Zümmögő -1
- 16x2 LCD -1
- NYÁK vagy kenyérlemez
- RTC modul (ds1307 vagy ds3231) -1
- LM7805 -1
- 1000uf, 10uf kondenzátor -1
- Burgstips hím nőstény
- DC JACK (opcionális)
- BC547 tranzisztor -1
Ebben az ujjlenyomat-jelenléti rendszer áramkörben az Ujjlenyomat-érzékelő modult alkalmaztuk egy személy vagy alkalmazott személyazonosságának hitelesítésére azáltal, hogy ujjlenyomat-bevitelüket a rendszerbe vittük. Itt 4 nyomógombot használunk az ujjlenyomat-adatok törléséhez, törléséhez, növeléséhez és csökkentéséhez . Az 1. kulcs új személy beíratására szolgál a rendszerbe. Tehát, amikor a felhasználó új ujjat akar regisztrálni, akkor meg kell nyomnia az 1 gombot, majd az LCD kéri, hogy tegye az ujját az ujjlenyomat-érzékelőre kétszer, majd munkavállalói azonosítót kér. Hasonlóképpen, a 2. gomb kettős funkcióval rendelkezik, például amikor a felhasználó új ujjat ír be, akkor ki kell választania az ujjlenyomat-azonosítóttovábbi két billentyű, nevezetesen a 3 és a 4. használatával. Most a felhasználónak meg kell nyomnia az 1-es gombot (ezúttal ez a gomb OK-ként viselkedik), hogy folytassa a kiválasztott azonosítót. A 2. kulcsot a mikrokontroller EEPROM-ból származó adatok visszaállításához vagy törléséhez is használják.
Az ujjlenyomat-érzékelő modul rögzíti az ujjlenyomat képét, majd átalakítja az egyenértékű sablonba, és a mikrovezérlő által a kiválasztott azonosító szerint menti a memóriájába. Az egész folyamatot a mikrovezérlő vezeti, például képet készít az ujjlenyomatról; konvertálja sablonokká és tárolja személyazonosító okmányként stb. Megnézheti ezeket a többi ujjlenyomat-érzékelő projektet is, ahol felépítettük az ujjlenyomat-érzékelő biztonsági rendszert és az ujjlenyomat-érzékelő szavazógépet.
Kördiagramm
Az ujjlenyomat alapú jelenléti rendszer projekt teljes kapcsolási rajza az alábbiakban látható. Atmega32 mikrovezérlővel rendelkezik a projekt teljes folyamatának vezérléséhez. A nyomógombbal vagy a membrángombbal lehet regisztrálni, törölni, kiválasztani a részvételi azonosítókat, egy hangjelzőt és egy 16x2-es LCD-t arra használva, hogy utasítsa a felhasználót a gép használatára.
Amint az az áramköri ábrán látható, a nyomógombok vagy a membrángombok közvetlenül csatlakoznak a mikrovezérlő PA2 (ENROLL gomb 1), PA3 (DEL billentyű 2), PA0 (UP 3 gomb), PA1 (UP gomb 3) csapokhoz vagy PA4. És egy LED van csatlakoztatva a mikrokontroller PC2 érintkezőjéhez a földhöz képest 1k ellenállással. Ujjlenyomat-modul Rx és Tx közvetlenül csatlakozik a mikrovezérlő PD1 és PD3 soros tűihez. Az 5v-os tápegységet a teljes áramkör táplálásához használják az LM7805 feszültségszabályozóvalamelyet 12v dc adapter táplál. A PC3 csaphoz egy hangjelző is csatlakozik. Egy 16x2 LCD-t 4 bites módban konfiguráltak, és RS, RW, EN, D4, D5, D6 és D7 közvetlenül csatlakozik a mikrovezérlő PB0, PB1, PB2, PB4, PB5, PB6, PB7 csatlakozóihoz. Az RTC modul az I2Cpin PC0 SCL és PC1 SDA csatlakozókhoz csatlakozik. A PD7-et pedig puha UART Tx tűként használják az aktuális idő lekérdezéséhez.
Hogyan működik az ujjlenyomat-figyelő rendszer
Amikor a felhasználó az ujját az ujjlenyomat-modul fölé helyezi, akkor az ujjlenyomat-modul rögzíti az ujj képét, és megkeresi, ha van-e valamilyen azonosító az ujjlenyomathoz a rendszerben. Ha ujjlenyomat-azonosítót észlel, az LCD-n megjelenik a Részvétel regisztrálva, és ezzel egyidőben a hangjelzés sípol.
Az ujjlenyomat-modullal együtt egy RTC-modult is használtunk az idő- és dátumadatokhoz. Az idő és a dátum folyamatosan fut a rendszerben, így a mikrokontroller időt és dátumot vehet igénybe, valahányszor egy valódi felhasználó az ujját az ujjlenyomat-érzékelő fölé helyezi, majd elmentheti az EEPROM-ba a kijelölt memóriahelyen.
A felhasználó letöltheti a jelenléti adatokat a 4-es gomb lenyomásával és nyomva tartásával. Csatlakoztassa az áramellátást az áramkörhöz, és várjon, és egy idő után az LCD-n megjelenik a "Letöltés…" felirat. És a felhasználó a soros monitoron keresztül láthatja a jelenléti adatokat, ebben a kódszoftverben az UART a PD7-pin20 tűre van programozva Tx-ként, hogy adatokat küldjön a terminálra. A felhasználónak TTL-USB átalakítóra is szüksége van a soros terminálon való részvételi adatok megtekintéséhez.
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.