پین سٹیٹ یونیورسٹی کے محققین کے مطابق ، انسانوں پر زیادہ تر مشینوں پر بھروسہ کرنے کا امکان زیادہ ہوتا ہے ، جو ممکن ہے کہ ہم سے یہ معلوم ہوتا ہے کہ ہمارا اے ٹی ایم پن کسی مشین پر اتنی آسانی سے ظاہر کرتا ہے۔ آج ، دنیا میں جہاں اے آئی ، مشین لرننگ ، چیٹ بوٹس ، اسمارٹ اسپیکرز ، روبوٹ وغیرہ سرگرمی سے ترقی کر رہے ہیں ، انسانوں اور روبوٹ کے مابین اس میل ملاپ میں صرف اضافہ ہی ہوا ہے۔ آج ، پل ٹول جمع کرنے والوں سے لے کر چیک آؤٹ کیشیئر تک ہر چیز کو مشینوں کے ذریعہ تبدیل کیا جارہا ہے تاکہ کام کو آسان اور موثر بنایا جاسکے۔ اس مرحلے کو برقرار رکھنے کے ل this ، اس پروجیکٹ میں ہم اے وی آر مائکروکنٹرولرز کا استعمال کرکے بائیو میٹرک حاضری کا نظام بنائیں گے تاکہ حاضری لینے کے دستی طریقہ کار کو تبدیل کیا جاسکے۔ یہ نظام زیادہ قابل اعتماد اور موثر ہوگا کیونکہ اس سے وقت کی بچت ہوگی اور ڈوجرز سے بچنا ہوگا۔
فنگر پرنٹ حاضری کے سسٹم پہلے ہی مارکیٹ سے آسانی سے آسانی سے دستیاب ہیں ، لیکن اس کی تعمیر سے زیادہ کیا خوشی ہے؟ ہم نے اس سے قبل آرڈوینو اور راسبیری پائ کا استعمال کرتے ہوئے IOT پر مبنی بائیو میٹرک حاضری کے سادہ RFID پر مبنی حاضری کے نظام سے پہلے بھی ایک مختلف قسم کے حاضری کے نظام بنائے ہیں۔ اس پروجیکٹ میں ، ہم نے حاضری رجسٹر کرنے کے لئے فنگر پرنٹ ماڈیول اور اے وی آر (atmega32) کا استعمال کیا ہے۔ فنگر پرنٹ سینسر کا استعمال کرکے ، صارفین کے لئے یہ نظام زیادہ محفوظ ہوجائے گا۔ درج ذیل حصے اے وی آر کا استعمال کرتے ہوئے فنگر پرنٹ پر مبنی بائیو میٹرک اٹینڈنس سسٹم بنانے کی تکنیکی تفصیلات کی وضاحت کرتے ہیں ۔
مطلوبہ اجزاء
- اتمیگا 32 -1
- فنگر پرنٹ ماڈیول (r305) -1
- پش بٹن یا جھلی والے بٹن - 4
- ایل ای ڈی -2
- 1K ریزٹر -2
- 2.2K ریزٹر -1
- پاور 12 وی اڈاپٹر
- مربوط تاروں
- بزر ۔1
- 16x2 LCD -1
- پی سی بی یا روٹی بورڈ
- آر ٹی سی ماڈیول (ds1307 یا ds3231) -1
- LM7805 -1
- 1000 یوف ، 10 اف کپیسیٹر -1
- برگسٹپس نر مادہ
- ڈی سی جیک (اختیاری)
- BC547 ٹرانجسٹر -1
اس فنگر پرنٹ حاضری سسٹم سرکٹ میں ، ہم نے نظام میں فنگر پرنٹ ان پٹ لے کر کسی فرد یا ملازم کی شناخت کو مستند کرنے کے لئے فنگر پرنٹ سینسر ماڈیول کا استعمال کیا ہے۔ یہاں ہم انگلی پرنٹ کے اعداد و شمار کے اندراج ، حذف ، اضافہ اور کمی کے ل to 4 پش بٹن استعمال کر رہے ہیں ۔ کلیدی 1 کو کسی نئے شخص کے سسٹم میں اندراج کے ل is استعمال کیا جاتا ہے۔ لہذا جب صارف کسی نئی انگلی کو اندراج کرنا چاہتا ہے تو ، پھر اسے کلیدی 1 دبانے کی ضرورت ہے تب ایل سی ڈی نے اسے / اس سے دو بار فنگر پرنٹ سینسر پر انگلی لگانے کے لئے کہا تو وہ ملازم کی شناخت طلب کرتا ہے۔ اسی طرح ، کلیدی 2 میں ڈبل فنکشن ہوتا ہے ، جیسے صارف نئی انگلی میں اندراج کرتا ہے ، پھر اسے فنگر پرنٹ ID منتخب کرنے کی ضرورت ہوتی ہےایک اور دو کلیدوں کا استعمال کرکے 3 اور 4۔ اب استعمال کنندہ کو منتخب ID کے ساتھ آگے بڑھنے کے لئے کلید 1 (اس بار یہ کلید ٹھیک کی طرح برتاؤ) کو دبانے کی ضرورت ہے۔ اور مائکروکنٹرولر کے EEPROM سے ڈیٹا کو دوبارہ ترتیب دینے یا حذف کرنے کیلئے کلیدی 2 کا بھی استعمال کیا جاتا ہے ۔
فنگر پرنٹ سینسر ماڈیول انگلی کی پرنٹ امیج کو گرفت میں لیتے ہیں اور پھر اسے مساوی ٹیمپلیٹ میں بدل دیتے ہیں اور مائکروکانٹرولر کے ذریعہ منتخب کردہ ID کے مطابق اس کی میموری میں محفوظ کرتا ہے۔ مائکروکینٹرلر کے ذریعہ سارے عمل کی کمان ہوتی ہے ، جیسے انگلی کے پرنٹ کی تصویر لینا؛ اسے ٹیمپلیٹس میں تبدیل کریں اور شناختی وغیرہ کی حیثیت سے اسٹور کریں۔ آپ ان دیگر فنگر پرنٹ سینسر پروجیکٹس کو بھی چیک کرسکتے ہیں ، جہاں ہم نے فنگر پرنٹ سینسر سیکیورٹی سسٹم اور فنگر پرنٹ سینسر ووٹنگ مشین بنائی ہے۔
سرکٹ ڈایاگرام
فنگر پرنٹ پر مبنی حاضری سسٹم پروجیکٹ کے لئے مکمل سرکٹ ڈایاگرام ، نیچے دکھایا گیا ہے۔ اس میں پروجیکٹ کے سارے عمل کو کنٹرول کرنے کے ل At اتمیگا 32 مائکروکانٹرولر ہے۔ پش یا جھلی والے بٹن کو اندراج کرنے ، حذف کرنے ، حاضری کے ل ID ID کو منتخب کرنے کے لئے استعمال کیا جاتا ہے ، کسی بزر کو اشارے کے ل inst اور 16x2 LCD استعمال کیا جاتا ہے تاکہ صارف کو مشین کو کس طرح استعمال کیا جاسکے۔
جیسا کہ سرکٹ آریگرام میں دکھایا گیا ہے ، دھکا یا جھلی والے بٹن زمین سے متعلق مائکروکنوٹرر کے PA2 (ENROLL key 1)، PA3 (DEL key 2)، PA0 (UP key 3)، PA1 (DOWN key 4) سے براہ راست جڑے ہوئے ہیں۔ یا PA4۔ اور مائکروکન્ટٹرولر کے پن پی سی 2 پر ایک ایل ای ڈی منسلک ہے جس میں 1K ریزسٹر کے ذریعہ زمین کے حوالے سے ہے۔ فنگر پرنٹ ماڈیول کے Rx اور Tx براہ راست مائکروکانٹرولر کے PD PD1 اور PD3 میں جڑا ہوا ہے۔ 5V سپلائی LM7805 وولٹیج ریگولیٹر کا استعمال کرکے پورے سرکٹ کو طاقت بخش بنانے کے ل. استعمال کی جاتی ہےجو 12 وی ڈی سی اڈاپٹر سے چلتا ہے۔ پن پی سی 3 پر بھی ایک بوزر منسلک ہوتا ہے۔ ایک 16x2 LCD 4 بٹ موڈ میں تشکیل دیا گیا ہے اور اس کا RS، RW، EN، D4، D5، D6، اور D7 مائکروکانٹرولر کے پن PB0، PB1، PB2، PB4، PB6، PB7 پر براہ راست جڑا ہوا ہے۔ آر ٹی سی ماڈیول I2Cpin PC0 SCL اور PC1 SDA پر منسلک ہے۔ اور PD7 موجودہ وقت حاصل کرنے کے لئے نرم UART Tx پن کے بطور استعمال ہوتا ہے۔
فنگر پرنٹ حاضری کا نظام کیسے کام کرتا ہے
جب بھی صارف اپنی انگلی کو فنگر پرنٹ ماڈیول پر رکھتا ہے تو فنگر پرنٹ ماڈیول فنگر کی تصویر لے جاتا ہے ، اور تلاش کریں کہ آیا اس نظام میں اس فنگر پرنٹ کے ساتھ کوئی ID منسلک ہے۔ اگر فنگر پرنٹ ID کا پتہ چلا تو ایل سی ڈی حاضری کو رجسٹرڈ دکھائے گا اور اسی وقت میں بزر ایک بار بپ ہوجائے گا۔
فنگر پرنٹ ماڈیول کے ساتھ ساتھ ، ہم نے وقت اور تاریخ کے ڈیٹا کیلئے RTC ماڈیول بھی استعمال کیا ہے ۔ وقت اور تاریخ سسٹم میں مستقل طور پر چل رہے ہیں ، لہذا مائکروکنٹرولر وقت اور تاریخ کا وقت لے سکتا ہے جب بھی کوئی حقیقی صارف فنگر پرنٹ سینسر پر اپنی انگلی رکھتا ہے اور پھر میموری کے الاٹ کردہ سلاٹ پر EEPROM میں محفوظ کرسکتا ہے۔
صارف کلیدی دبانے اور انعقاد کے ذریعے حاضری کا ڈیٹا ڈاؤن لوڈ کرسکتے ہیں ۔ 4 سپلائی کو سرکٹ سے وابستہ کریں اور انتظار کریں اور کچھ دیر بعد ، LCD 'ڈاؤن لوڈنگ….' دکھائے گا۔ اور صارف سیریل مانیٹر کے اوپر حاضری کا ڈیٹا دیکھ سکتا ہے ، یہاں اس کوڈ میں سوفٹویئر UART کو PIN PD7-pin20 پر Tx کے طور پر پروگرام کیا گیا ہے تاکہ ڈیٹا کو ٹرمینل پر بھیج سکیں۔ سیریل ٹرمینل پر حاضری کا ڈیٹا دیکھنے کے ل User صارف کو TTL سے USB کنورٹر کی بھی ضرورت ہے۔
اور اگر صارف تمام کوائف کو حذف کرنا چاہتا ہے تو اسے کلید 2 کو دبانا اور پکڑنا ہوگا اور پھر طاقت سے رابطہ قائم کرنا ہوگا اور کچھ وقت انتظار کرنا ہوگا۔ اب کچھ دیر بعد ایل سی ڈی دکھائے گا 'براہ کرم انتظار کریں…' اور پھر 'ریکارڈ کامیابی کے ساتھ حذف ہوگیا'۔ یہ دونوں اقدامات آخر میں دیئے گئے مظاہرے کی ویڈیو میں نہیں دکھائے گئے ہیں۔
کوڈ کی وضاحت
اس بایومیٹرک حاضری کے نظام کے لئے ویڈیو کے ساتھ مکمل کوڈ آخر میں دیا گیا ہے۔ اس پروجیکٹ کا کوڈ ابتدائیہ کے لئے تھوڑا سا لمبا اور پیچیدہ ہے۔ لہذا ہم نے بہتر پڑھنے اور سمجھنے کے ل des وضاحتی متغیرات لینے کی کوشش کی ہے۔ سب سے پہلے ، ہم نے کچھ ضروری ہیڈر فائل شامل کی ہے پھر مختلف مختلف مقصد کے ل written میکروز لکھا ہوا ہے۔
# وضاحت F_CPU 8000000ul # شامل کریں # شامل کریں
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.