Podle vědců z Pen state University je pravděpodobné, že lidé budou více důvěřovat strojům než lidem, což je pravděpodobně patrné z toho, že jsme náš stroj ATM odhalili tak snadno. Dnes, ve světě, kde AI, strojové učení, chatovací roboty, inteligentní reproduktory, roboti atd. Aktivně postupují, se tato synergie mezi lidmi a roboty pouze zvýší. Dnes, od sběratelů mostního mýtného až po pokladny pokladny, vše kolem nás nahrazují stroje, aby byla práce jednodušší a efektivnější. Abychom udrželi krok s fází, v tomto projektu postavíme biometrický docházkový systém využívající mikrokontroléry AVR, který nahradí manuální postup při docházce. Tento systém bude spolehlivější a efektivnější, protože by ušetřil čas a vyhnul se podvodníkům.
Docházkové systémy s otisky prstů jsou již snadno dostupné přímo z trhu, ale co je zábavnější než jejich vytvoření? Také jsme dříve vybudovali širokou škálu docházkových systémů, od jednoduchého docházkového systému založeného na RFID až po biometrický docházkový systém založený na IoT pomocí Arduino a Raspberry Pi. V tomto projektu jsme k registraci docházky použili modul otisků prstů a AVR (atmega32). Díky použití snímače otisků prstů bude systém pro uživatele bezpečnější. Následující části vysvětlují technické podrobnosti výroby biometrického docházkového systému založeného na otiscích prstů pomocí AVR.
Požadované komponenty
- Atmega32 -1
- Modul otisků prstů (r305) -1
- Tlačítko nebo membránová tlačítka - 4
- LED diody -2
- 1K rezistor -2
- 2,2K rezistor -1
- Napájecí adaptér 12 V
- Připojovací vodiče
- Bzučák -1
- 16x2 LCD -1
- PCB nebo chlebová deska
- Modul RTC (ds1307 nebo ds3231) -1
- LM7805 -1
- 1000uf, 10uf kondenzátor -1
- Burgstips mužské ženy
- DC JACK (volitelně)
- Tranzistor BC547 -1
V tomto okruhu systému docházky otisků prstů jsme použili modul snímače otisků prstů k ověření totožnosti osoby nebo zaměstnance tím, že jsme v systému použili vstup otisků prstů. Zde používáme 4 tlačítka k registraci, mazání, zvyšování a snižování údajů o otiscích prstů . Klíč 1 se používá pro registraci nové osoby do systému. Když tedy chce uživatel zaregistrovat nový prst, musí stisknout klávesu 1, poté jej LCD dvakrát požádá, aby umístil prst na snímač otisků prstů, poté požádá o ID zaměstnance. Podobně má klávesa 2 dvojí funkci, jako když si uživatel zaregistruje nový prst, pak musí vybrat ID otisku prstupomocí dalších dvou kláves, konkrétně 3 a 4. Nyní musí uživatel stisknout klávesu 1 (tentokrát se tato klávesa chová jako OK), aby mohl pokračovat s vybraným ID. A klíč 2 se také používá k resetování nebo mazání dat z EEPROM mikrokontroléru.
Modul snímače otisků prstů zachytí otisk prstu a poté jej převede na ekvivalentní šablonu a uloží je do své paměti podle zvoleného ID pomocí mikrokontroléru. Celý proces je ovládán mikrokontrolérem, jako je pořízení snímku otisku prstu; převést jej do šablon a uložit jako ID atd. Můžete si také prohlédnout tyto další projekty snímačů otisků prstů, kde jsme vytvořili bezpečnostní systém snímače otisků prstů a hlasovací zařízení snímače otisků prstů.
Kruhový diagram
Kompletní schéma zapojení pro projekt docházkového systému založeného na otiscích prstů je uveden níže. Má mikrokontrolér Atmega32 pro řízení celého procesu projektu. Tlačítko nebo membránové tlačítko se používá pro registraci, mazání, výběr ID pro docházku, pro indikaci se používá bzučák a 16x2 LCD pro instruování uživatele, jak používat stroj.
Jak je znázorněno na schématu zapojení, tlačítka nebo membránová tlačítka jsou přímo připojena k pinu PA2 (ENROLL klávesa 1), PA3 (klávesa DEL 2), PA0 (klávesa UP 3), PA1 (klávesa DOWN 4) mikrokontroléru vzhledem k zemi nebo PA4. A LED je připojena na pin PC2 mikrokontroléru vzhledem k zemi přes 1k rezistor. Modul otisků prstů Rx a Tx přímo připojený k sériovému pinu PD1 a PD3 mikrokontroléru. Napájení 5 V se používá k napájení celého obvodu pomocí regulátoru napětí LM7805který je napájen 12v DC adaptérem. Na pin PC3 je také připojen bzučák. 16x2 LCD je nakonfigurován ve 4bitovém režimu a jeho RS, RW, EN, D4, D5, D6 a D7 jsou přímo připojeny na piny PB0, PB1, PB2, PB4, PB5, PB6, PB7 mikrokontroléru. RTC modul je připojen na I2Cpin PC0 SCL a PC1 SDA. A PD7 se používá jako měkký pin UART Tx pro získání aktuálního času.
Jak funguje docházkový systém otisků prstů
Kdykoli uživatel umístí prst na modul otisků prstů, pak modul otisků prstů pořídí snímek prstu a vyhledá, zda je s tímto otiskem prstu v systému spojeno nějaké ID. Pokud je detekováno ID otisku prstu, na LCD displeji se zobrazí Attendance registered a současně bzučák jednou pípne.
Spolu s modulem otisků prstů jsme také použili modul RTC pro data času a data. Čas a datum v systému běží nepřetržitě, takže mikrokontrolér může trvat čas a datum, kdykoli skutečný uživatel umístí prst na snímač otisků prstů a poté je uloží do EEPROM v přiděleném slotu paměti.
Uživatel si může stáhnout údaje o docházce stisknutím a podržením klávesy 4. Připojte napájení k okruhu a počkejte a po nějaké době se na LCD displeji zobrazí „Stahování….“. A uživatel může vidět data docházky přes sériový monitor, zde v tomto kódovém softwaru je UART naprogramován na pin PD7-pin20 jako Tx pro odesílání dat do terminálu. Uživatel také potřebuje převodník TTL na USB, aby viděl data docházky přes sériový terminál.
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.