Pen State Universityn tutkijoiden mukaan ihmiset luottavat todennäköisemmin koneisiin ihmisiin, mikä käy todennäköisesti ilmi siitä, että paljastamme pankkiautomaatin tappi koneelle niin helposti. Nykyään maailmassa, jossa tekoäly, koneoppiminen, chat-robotit, älykkäät kaiuttimet, robotit jne. Etenevät aktiivisesti, tämän synergian ihmisten ja robottien välillä on tarkoitus vain lisääntyä. Nykyään kaikki ympärillämme olevat tilanlaskijoista kassanlaskureihin korvataan koneilla, jotta työ olisi helpompaa ja tehokkaampaa. Vaiheen seuraamiseksi rakennamme tässä projektissa Bio-metric Attendance -järjestelmän, joka käyttää AVR-mikrokontrollereita korvaamaan läsnäolon manuaalisen menettelyn. Tämä järjestelmä on luotettavampi ja tehokkaampi, koska se säästää aikaa ja välttää harhaajia.
Sormenjälkien läsnäolojärjestelmät ovat jo helposti saatavilla suoraan markkinoilta, mutta mikä on hauskempaa kuin sellaisen rakentaminen? Olemme myös aiemmin rakentaneet laajan valikoiman osallistumisjärjestelmiä yksinkertaisesta RFID-pohjaiseen osallistumisjärjestelmään IoT-pohjaiseen biometriseen osallistumisjärjestelmään, jossa käytetään Arduinoa ja Raspberry Pi: tä. Tässä projektissa olemme käyttäneet sormenjälkimoduulia ja AVR: ää (atmega32) läsnäolon rekisteröimiseksi. Käyttämällä sormenjälkitunnistinta järjestelmä tulee turvallisemmaksi käyttäjille. Seuraavissa osioissa selitetään tekniset yksityiskohdat sormenjälkiin perustuvan biometrisen läsnäolojärjestelmän valmistamiseksi AVR: n avulla.
Vaaditut komponentit
- Atmega32 -1
- Sormenjälkimoduuli (r305) -1
- Painike- tai kalvopainikkeet - 4
- LEDit -2
- 1K vastus -2
- 2.2K vastus -1
- Virtalähde 12v
- Johtojen liittäminen
- Summeri -1
- 16x2 LCD -1
- Piirilevy tai leipälauta
- RTC-moduuli (ds1307 tai ds3231) -1
- LM7805-1
- 1000uf, 10uf kondensaattori -1
- Burgstips uros naaras
- DC JACK (valinnainen)
- BC547-transistori -1
Tässä sormenjälkien läsnäolojärjestelmässä olemme käyttäneet Sormenjälkitunnistin-moduulia todentamaan henkilön tai työntekijän henkilöllisyyden ottamalla sormenjälkitiedot järjestelmään. Täällä käytämme 4 painonappia rekisteröidä, poista, lisää ja vähennä sormenjälkitietoja . Avainta 1 käytetään uuden henkilön rekisteröintiin järjestelmään. Joten kun käyttäjä haluaa rekisteröidä uuden sormen, hänen on painettava näppäintä 1 ja nestekidenäyttö pyytää häntä asettamaan sormen sormenjälkitunnistimeen kaksi kertaa, minkä jälkeen se pyytää työntekijän henkilötodistusta. Vastaavasti näppäimellä 2 on kaksoistoiminto, kuten silloin, kun käyttäjä rekisteröi uuden sormen, hänen on valittava sormenjälkitunnuskäyttämällä kahta toista näppäintä, nimittäin 3 ja 4. Nyt käyttäjän on painettava näppäintä 1 (tällä kertaa tämä näppäin käyttäytyy kuten OK) jatkaakseen valitun tunnuksen käyttöä. Ja avainta 2 käytetään myös tietojen palauttamiseen tai poistamiseen mikro-ohjaimen EEPROM-tiedostosta.
Sormenjälkitunnistinmoduuli sieppaa sormenjälkikuvan ja muuntaa sen sitten vastaavaksi malliksi ja tallentaa ne muistiinsa valitun tunnuksen mukaan mikro-ohjaimella. Mikrokontrolleri komentaa kaiken prosessin, kuten kuvan ottamisen sormenjäljestä; muuntaa sen malleiksi ja tallentaa henkilöllisyystodistukseksi jne. Voit myös tarkistaa nämä muut sormenjälkitunnistinprojektit, joissa olemme rakentaneet sormenjälkitunnistimen turvajärjestelmän ja sormenjälkitunnistimen äänestyskoneen.
Piirikaavio
Sormenjälkiin perustuvan läsnäolojärjestelmän koko piirikaavio on esitetty alla. Siinä on Atmega32-mikrokontrolleri, joka ohjaa projektin kaikkea prosessia. Painiketta tai kalvopainiketta käytetään rekisteröimiseen, poistamiseen, henkilöllisyystodistusten valitsemiseen, summeria käytetään ilmoitukseen ja 16x2 nestekidenäyttöä opastamaan käyttäjää koneen käytöstä.
Kuten piirikaaviossa on esitetty, painike- tai kalvopainikkeet on kytketty suoraan mikrokontrollerin tapiin PA2 (ENROLL-näppäin 1), PA3 (DEL-näppäin 2), PA0 (UP-näppäin 3), PA1 (DOWN-näppäin 4) maahan tai PA4. Ja LED on kytketty mikrokontrollerin tapiin PC2 maadoitukseen 1 k: n vastuksen kautta. Sormenjälkimoduulin Rx ja Tx kytketty suoraan mikrokontrollerin sarjaliittimiin PD1 ja PD3. 5v-syöttöä käytetään koko virran virtalähteeseen LM7805-jännitesäätimelläjonka virtalähteenä on 12v DC-sovitin. Nasta PC3 on kytketty myös summeriin. 16x2-nestekidenäyttö on konfiguroitu 4-bittisessä tilassa ja sen RS, RW, EN, D4, D5, D6 ja D7 on kytketty suoraan mikrokontrollerin nastoihin PB0, PB1, PB2, PB4, PB5, PB6, PB7. RTC-moduuli on kytketty I2Cpin PC0 SCL- ja PC1 SDA -liittimiin. Ja PD7: tä käytetään pehmeänä UART Tx -nastana nykyisen ajan saamiseksi.
Kuinka sormenjälkien läsnäolojärjestelmä toimii
Aina kun käyttäjä asettaa sormensa sormenjälkimoduulin päälle, sormenjälkimoduuli sieppaa sormen kuvan ja etsi, jos järjestelmään liittyy sormenjälkeen mitään tunnusta. Jos sormenjälkitunnus havaitaan, nestekidenäytössä näkyy Läsnäolo rekisteröity ja samaan aikaan summeri piippaa kerran.
Sormenjälkimoduulin ohella olemme käyttäneet myös RTC-moduulia aika- ja päivämäärätietoihin. Aika ja päivämäärä ovat jatkuvasti käynnissä järjestelmässä, joten mikrokontrolleri voi viedä ajan ja päivämäärän aina, kun todellinen käyttäjä laittaa sormensa sormenjälkitunnistimen päälle ja tallentaa ne sitten EEPROM-muistiin varattuun muistipaikkaan.
Käyttäjä voi ladata läsnäolotiedot pitämällä näppäintä 4. Kytke syöttö piiriin ja odota, ja jonkin ajan kuluttua nestekidenäytössä näkyy 'Ladataan….'. Ja käyttäjä voi nähdä läsnäolotiedot sarjamoduulin kautta, tässä tässä ohjelmisto-ohjelmassa UART on ohjelmoitu pin PD7-pin20: ksi Tx: ksi lähettämään dataa päätelaitteelle. Käyttäjä tarvitsee myös TTL-USB-muuntimen nähdäksesi läsnäolotiedot sarjaliitännän kautta.
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.