- Потребне компоненте
- Кружни дијаграм
- Како функционише систем праћења отисака прстију
- Code Explanation
Према истраживачима са Државног универзитета Пен, људи имају већу вероватноћу да верују машинама људима, што је очигледно из тога што смо своју машину тако лако открили. Данас, у свету у коме АИ, машинско учење, цхат ботови, паметни звучници, роботи итд. Активно напредују, ова синергија између људи и робота треба само да се повећа. Данас од наплатника моста до наплатних благајни све око нас замењују машине како би посао обавили лакше и ефикасније. Да бисмо ишли у корак са фазом, у овом пројекту ћемо изградити систем биометријског присуства који користи АВР микроконтролере да би заменио ручни поступак похађања наставе. Овај систем ће бити поузданији и ефикаснији јер ће уштедети време и избећи измицање.
Системи за присуство отисака прстију већ су доступни директно са тржишта, али шта је забавније од израде? Такође смо раније изградили широк спектар система присуства, од једноставног система присуства заснованог на РФИД-у, до биометријског система присуства заснованог на ИоТ-у који користи Ардуино и Распберри Пи. У овом пројекту користили смо модул за отиске прстију и АВР (атмега32) за регистрацију присуства. Коришћењем сензора за отисак прста систем ће постати сигурнији за кориснике. Следећи одељци објашњавају техничке детаље израде Биометријског система за присуство на основу отиска прста помоћу АВР-а.
Потребне компоненте
- Атмега32 -1
- Модул отиска прста (р305) -1
- Тастер или мембранска дугмад - 4
- ЛЕД диоде -2
- 1К отпорник -2
- Отпорник 2.2К -1
- Напајање 12в адаптер
- Повезивање жица
- Зујалица -1
- ЛЦД 16к2 -1
- ПЦБ или плоча за хлеб
- РТЦ модул (дс1307 или дс3231) -1
- ЛМ7805 -1
- 1000уф, 10уф кондензатор -1
- Бургстипс мушко женско
- ДЦ ЈАЦК (опционално)
- БЦ547 Транзистор -1
У овом колу система за присуство отисцима прстију користили смо модул Сензор за отисак прста да бисмо потврдили идентитет особе или запосленог тако што смо унели њихов отисак прста у систем. Овде користимо 4 тастера за регистрацију , брисање, увећавање и смањивање података о отисцима прстију . Кључ 1 се користи за упис нове особе у систем. Дакле, када корисник жели да упише нови прст, тада он / она треба да притисне тастер 1, а затим ЛЦД тражи да два пута стави прст на сензор отиска прста, а затим тражи ИД запосленог. Слично томе, тастер 2 има двоструку функцију, на пример када корисник упише нови прст, тада он / она треба да изабере ИД отиска прстакоришћењем друга два тастера, наиме 3 и 4. Сада корисник треба да притисне тастер 1 (овај пут овај тастер се понаша као ОК) да би наставио са изабраним ИД-ом. А тастер 2 се такође користи за ресетовање или брисање података из ЕЕПРОМ- а микроконтролера.
Модул сензора отиска прста снима слику отиска прста, а затим је претвара у еквивалентан образац и чува у својој меморији према одабраном ИД-у микроконтролера. Сав процес заповеда микроконтролером, попут снимања отиска прста; претворите га у предлошке и похраните као личну карту итд. Такође можете погледати ове друге пројекте сензора за отиске прстију, где смо изградили сигурносни систем сензора за отисак прста и машину за гласање сензора отиска прста.
Кружни дијаграм
Комплетна шема кола за пројекат система присуства заснован на отисцима прстију је приказана испод. Поседује Атмега32 микроконтролер за контролу целокупног процеса пројекта. Дугме или мембранско дугме се користи за регистрацију , брисање, одабир ИД-ова за присуство, зујалица се користи за индикацију и ЛЦД 16к2 како би се корисници упутили како да користи машину.
Као што је приказано на дијаграму кола, дугмад или мембранска дугмад су директно повезана на пин ПА2 (тастер ЕНРОЛЛ 1), ПА3 (тастер ДЕЛ 2), ПА0 (тастер УП 3), ПА1 (тастер ДОЛЕ 4) микроконтролера у односу на масу или ПА4. И ЛЕД је повезан на пин ПЦ2 микроконтролера с обзиром на масу кроз 1к отпорник. Рк и Тк модула отиска прста су директно повезани на серијски пин ПД1 и ПД3 микроконтролера. Напајање од 5в користи се за напајање целог кола помоћу регулатора напона ЛМ7805које напаја 12в једносмерни адаптер. Зујалица је такође повезана на пин ПЦ3. ЛЦД од 16к2 је конфигурисан у 4-битном режиму и његови РС, РВ, ЕН, Д4, Д5, Д6 и Д7 су директно повезани на пин ПБ0, ПБ1, ПБ2, ПБ4, ПБ5, ПБ6, ПБ7 микроконтролера. РТЦ модул је повезан на И2Цпин ПЦ0 СЦЛ и ПЦ1 СДА. А ПД7 се користи као меки УАРТ Тк пин за добивање тренутног времена.
Како функционише систем праћења отисака прстију
Кад год корисник стави прст преко модула отиска прста, тада модул отиска прста снима слику прста и претражује да ли је неки ИД повезан са овим отиском прста у систему. Ако се открије ИД отиска прста, ЛЦД ће приказати присуство присутности и истовремено ће се огласити звучни сигнал.
Заједно са модулом отиска прста, користили смо и РТЦ модул за податке о времену и датуму. Време и датум се непрекидно покрећу у систему, тако да микроконтролер може узети време и датум кад год прави корисник пређе прстом преко сензора отиска прста, а затим их сачувати у ЕЕПРОМ-у на додељеном слоту меморије.
Корисник може преузети податке о присутности притиском и држањем тастера 4. Прикључите напајање у струјни круг и сачекајте, а након неког времена на ЛЦД-у ће се приказати „Преузимање….“. Корисник може видети податке о присутности преко серијског монитора, овде је у овом софтверу за кодове УАРТ програмиран на пин ПД7-пин20 као Тк за слање података на терминал. Кориснику је потребан и ТТЛ у УСБ претварач да би видео податке о присутности преко серијског терминала.
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.