Pen Eyalet Üniversitesi'nden araştırmacılara göre, insanların makinelere insanlara güvenme olasılığı daha yüksek, bu da bizim ATM pimimizi bir makineye bu kadar kolay göstermemizden anlaşılıyor. Yapay zeka, Makine öğrenimi, Sohbet botları, Akıllı Hoparlörler, Robotlar vb. Aktif olarak ilerlediği günümüzde, insanlar ve robotlar arasındaki bu sinerji yalnızca artmaya hazır. Bugün, işin daha kolay ve verimli yapılması için köprü geçiş ücret toplayıcılarından kasa çıkışlarına kadar çevremizdeki her şey makinelerle değiştiriliyor. Bu aşamaya ayak uydurmak için, bu projede, manuel katılım alma prosedürünü değiştirmek için AVR mikrodenetleyicilerini kullanarak bir Biyo-metrik Seyirci sistemi oluşturacağız. Bu sistem zamandan tasarruf sağlayacağı ve kaçakları önleyeceği için daha güvenilir ve verimli olacaktır.
Parmak izi katılım sistemleri halihazırda doğrudan piyasadan temin edilebilir, ancak bir tane oluşturmaktan daha eğlenceli ne olabilir? Ayrıca daha önce basit bir RFID tabanlı Seyirci sisteminden Arduino ve Raspberry Pi kullanan bir IoT tabanlı biyometrik Seyirci sistemine kadar çok çeşitli Seyirci Sistemleri kurduk. Bu projede, katılımı kaydetmek için parmak izi Modülü ve AVR (atmega32) kullandık. Parmak izi sensörünün kullanılmasıyla sistem kullanıcılar için daha güvenli hale gelecektir. Aşağıdaki bölümler, AVR kullanarak parmak izi tabanlı Biyometrik Devam Sistemi oluşturmanın teknik ayrıntılarını açıklamaktadır.
Gerekli Bileşenler
- Atmega32 -1
- Parmak izi modülü (r305) -1
- Basmalı Düğme veya membran düğmeler - 4
- LED'ler -2
- 1K Direnç -2
- 2.2K direnç -1
- Güç 12v adaptörü
- Bağlantı telleri
- Buzzer -1
- 16x2 LCD -1
- PCB veya Ekmek Tahtası
- RTC Modülü (ds1307 veya ds3231) -1
- LM7805 -1
- 1000 uf, 10 uf kapasitör -1
- Burgstips erkek kadın
- DC JACK (isteğe bağlı)
- BC547 Transistör -1
Bu parmak izi katılım sistemi devresinde, sisteme parmak izi girişini alarak bir kişi veya çalışanın kimliğini doğrulamak için Parmak İzi Sensörü modülünü kullandık. Burada parmak izi verilerini kaydetmek, Silmek, Artırmak ve Azaltmak için 4 basma düğmesi kullanıyoruz . Anahtar 1, yeni bir kişinin sisteme kaydedilmesi için kullanılır. Dolayısıyla kullanıcı yeni bir parmak kaydetmek istediğinde, 1 tuşuna basması gerekir, ardından LCD ondan parmak izi sensörüne iki kez parmağını yerleştirmesini ister ve ardından bir çalışan kimliği ister. Benzer şekilde, kullanıcı yeni parmağını kaydettiğinde olduğu gibi, anahtar 2'nin çift işlevi vardır, ardından parmak izi kimliğini seçmesi gerekir.başka iki tuş, yani 3 ve 4 kullanarak, kullanıcının seçili ID ile devam etmek için 1 tuşuna (bu sefer bu tuş OK gibi davranır) basması gerekir. Anahtar 2 ayrıca mikrodenetleyicinin EEPROM'undan verileri sıfırlamak veya silmek için kullanılır.
Parmak izi sensör modülü, parmağın baskı görüntüsünü yakalar ve ardından eşdeğer şablona dönüştürür ve mikrodenetleyici tarafından seçilen kimliğe göre hafızasına kaydeder. Parmak izinin bir görüntüsünü almak gibi tüm süreç mikro denetleyici tarafından yönetilir; bunu şablonlara dönüştürün ve kimlik vb. olarak saklayın. Parmak izi sensörü güvenlik sistemi ve parmak izi sensörü oylama makinesi yaptığımız bu diğer parmak izi sensörü projelerine de göz atabilirsiniz.
Devre şeması
Parmak izi tabanlı katılım sistemi projesi için eksiksiz devre şeması aşağıda gösterilmiştir. Projenin tüm sürecini kontrol etmek için Atmega32 mikrodenetleyiciye sahiptir. Basma veya membran düğmesi, kayıt yapmak, silmek, katılım için kimlik seçmek için kullanılır, gösterge için bir zil kullanılır ve kullanıcıya makinenin nasıl kullanılacağı konusunda talimat vermek için bir 16x2 LCD kullanılır.
Devre şemasında gösterildiği gibi, mikrodenetleyicinin PA2 (KAYIT tuşu 1), PA3 (DEL tuşu 2), PA0 (YUKARI tuşu 3), PA1 (AŞAĞI tuşu 4) pinlerine toprağa göre basma veya membran butonları doğrudan bağlanır. veya PA4. Ve mikrodenetleyicinin PC2 pinine 1k direnç ile toprağa göre bir LED bağlanır. Parmak izi modülünün Rx ve Tx'i mikrodenetleyicinin PD1 ve PD3 Seri pinlerine doğrudan bağlıdır. LM7805 voltaj regülatörü kullanılarak tüm devreye güç sağlamak için 5v besleme kullanılır.12v dc adaptör ile güçlendirilmiştir. PC3 pinine bir zil de bağlanmıştır. 16x2 LCD, 4 bit modunda yapılandırılır ve RS, RW, EN, D4, D5, D6 ve D7, mikro denetleyicinin PB0, PB1, PB2, PB4, PB5, PB6, PB7 pinlerine doğrudan bağlanır. RTC modülü I2Cpin PC0 SCL ve PC1 SDA'ya bağlanır. PD7 ise o anki zamanı almak için yumuşak UART Tx pini olarak kullanılır.
Parmak İzi Devam Sistemi nasıl çalışır?
Kullanıcı parmağını parmak izi modülünün üzerine her koyduğunda parmak izi modülü parmak görüntüsünü yakalar ve sistemdeki bu parmak izi ile ilişkili herhangi bir kimlik olup olmadığını araştırır. Parmak izi kimliği tespit edilirse, LCD ekranda Katılım kaydedildi gösterecek ve aynı zamanda zil bir kez bipleyecektir.
Parmak izi modülünün yanı sıra, Saat ve tarih verileri için bir RTC modülü de kullandık. Saat ve tarih sistemde sürekli olarak çalışır, bu nedenle Mikroişlemci, gerçek bir kullanıcı parmağını parmak izi sensörünün üzerine koyduğunda saat ve tarih alabilir ve ardından bunları ayrılmış bellek yuvasında EEPROM'a kaydedebilir.
Kullanıcı, 4 tuşunu basılı tutarak yoklama verilerini indirebilir. Beslemeyi devreye bağlayın ve bekleyin ve bir süre sonra LCD 'İndiriliyor…' mesajını gösterecektir. Ve kullanıcı katılım verilerini seri monitör üzerinden görebilir, burada bu kod yazılımında UART, PD7-pin20 pininde Tx olarak terminale veri göndermek için programlanmıştır. Kullanıcının ayrıca seri terminal üzerinden katılım verilerini görebilmesi için TTL - USB dönüştürücüye ihtiyacı vardır.
Ve eğer kullanıcı tüm verileri silmek isterse, 2 tuşuna basıp basılı tutması ve ardından gücü bağlaması ve bir süre beklemesi gerekir. Şimdi bir süre sonra LCD'de 'Lütfen bekleyin…' ve ardından 'Kayıt başarıyla silindi' gösterecektir. Bu iki adım, sonunda verilen tanıtım videosunda gösterilmemiştir.
Kod Açıklama
Bu biyometrik devam sistemi için video ile birlikte eksiksiz kod en sonunda verilmiştir. Bu projenin kodu yeni başlayanlar için biraz uzun ve karmaşıktır. Bu nedenle, iyi okunabilirlik ve anlaşılırlık sağlamak için tanımlayıcı değişkenler almaya çalıştık. Öncelikle gerekli bazı başlık dosyalarını ekledik ve ardından farklı-farklı amaçlar için makrolar yazdık.
#define F_CPU 8000000ul #include #include
Bundan sonra, parmak izi komutu ve yanıtı için bazı değişkenler ve diziler tanımladık. Ayrıca verileri almak ve RTC'ye ayarlamak için bazı işlevler ekledik.
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.