قطعات مورد نیاز:
مبدل USB به سریال
ماژول اثر انگشت
LCD 16×2
پتانسیومتر 10k
شماتیک مدار و توضیحات:
در ابتدای کار، ما باید تمام اتصال مورد نیاز را همانطور که در شماتیک مدار زیر نشان داده شده است، ایجاد کنیم. اتصالات ساده هستند، ما فقط ماژول اثر انگشت را با استفاده از مبدل USB به سریال به پورت USB Raspberry Pi متصل کرده ایم.
برای نمایش تمام پیام ها از LCD 16×2 استفاده می شود. از پتانسیومتر 10k برای کنترل کنتراست LCD استفاده می شود. پین های LCD 16×2 RS ، EN d4 ، d5 ، d6 و d7 به ترتیب با GPIO Pin 18 ، ۲۳ ، ۲۴ ، ۲۵ ، ۸ و ۷ Raspberry Pi متصل می شوند. چهار دکمه فشار به GPIO Pin 5 ، ۶ ، ۱۳ و ۱۹ Raspberry Pi متصل هستند. LED همچنین در پایه ۲۶ RPI متصل می شود.
نصب کتابخانه برای سنسور اثر انگشت:
پس از ایجاد تمام اتصالات ، ما باید Raspberry Pi را روشن کرده و با باز کردن ترمینال مراحل آماده سازی را انجام دهیم. باید با دنبال کردن مراحل زیر کتابخانه اثر انگشت را برای Raspberry Pi به زبان پایتون نصب کنیم.
مرحله ۱: برای نصب این کتابخانه، دسترسی root لازم است. بنابراین ابتدا با دستور داده شده وارد root می شویم:
sudo bash
wget –O – http://apt.pm-codeworks.de/pm-codeworks.de.gpg | apt-key add – wget http://apt.pm-codeworks.de/pm-codeworks.list -P /etc/apt/sources.list.d/
sudo apt-get update sudo apt-get install python-fingerprint –yes
ls /dev/ttyUSB*
عملکرد حسگر اثر انگشت با Raspberry Pi:
اکنون برای ثبت اثر انگشت، کاربر باید دکمه ثبت را فشار داده و پیام های دستورالعمل را در صفحه LCD دنبال کند.
اگر کاربر می خواهد هر کدام از اثر انگشت ها را حذف کند، کاربر باید دکمه حذف را فشار دهد. پس از آن، LCD موقعیت اثر انگشتی را که باید حذف شود درخواست می کند. اکنون با استفاده از دو دکمه فشار دیگر برای افزایش و کاهش، کاربر می تواند موقعیت اثر انگشت را انتخاب کرده و دکمه ثبت را فشار دهد (در این زمان دکمه ثبت نام مانند دکمه Ok رفتار می کند) تا اثر انگشت حذف شود.
برنامه نویسی پایتون:
کد GitHub برای آزمایش Raspberry pi شما با سنسور اثر انگشت در دسترس است.
در اینجا ما از کتابخانه استفاده کرده ایم بنابراین فقط باید عملکرد کتابخانه را فراخوانی کنیم. در کد، ابتدا باید کتابخانه هایی مانند اثر انگشت، GPIO و time را وارد کنیم، سپس باید پین ها را برای LCD ، LED و دکمه های فشار تعریف کنیم.
import time from pyfingerprint.pyfingerprint import PyFingerprint import RPi.GPIO as gpio RS =18 EN =23 D4 =24 D5 =25 D6 =8 D7 =7 enrol=5 delet=6 inc=13 dec=19 led=26 HIGH=1 LOW=0
gpio.setwarnings(False) gpio.setmode(gpio.BCM) gpio.setup(RS, gpio.OUT) gpio.setup(EN, gpio.OUT) gpio.setup(D4, gpio.OUT) gpio.setup(D5, gpio.OUT) gpio.setup(D6, gpio.OUT) gpio.setup(D7, gpio.OUT) gpio.setup(enrol, gpio.IN, pull_up_down=gpio.PUD_UP) gpio.setup(delet, gpio.IN, pull_up_down=gpio.PUD_UP) gpio.setup(inc, gpio.IN, pull_up_down=gpio.PUD_UP) gpio.setup(dec, gpio.IN, pull_up_down=gpio.PUD_UP) gpio.setup(led, gpio.OUT)
try: f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000) if ( f.verifyPassword() == False ): raise ValueError('The given fingerprint sensor password is wrong!') except Exception as e: print('Exception message: ' + str(e)) exit(1)
پس از نوشتن تمام عملکردهای درایور LCD، توابع را برای ثبت اثر انگشت، جستجو و حذف قرار داده ایم.
تابع def enrollFinger برای ثبت یا ذخیره چاپ انگشت جدید استفاده می شود.
از تابع def (Finger) برای جستجوی اثرهای انگشتی که قبلاً ذخیره شده اند استفاده می شود
تابع def deleteFinger برای حذف خط چاپ انگشتی که قبلاً ذخیره شده است با فشار دادن دکمه پاسخ مجدد استفاده می شود.
همه کد عملکرد بالا در کد پایتون آورده شده در زیر آورده شده است.
ما باید سیستم را با حلقه در while با مقدار ۱ با درخواست قرار دادن انگشت بر روی سنسور چاپ انگشت آغاز کنیم و سپس سیستم بررسی می کند که آیا این اثر انگشت آن معتبر است یا خیر و نتایج را بر این اساس نمایش می دهد.
begin() lcdcmd(0x01) lcdprint("FingerPrint ") lcdcmd(0xc0) lcdprint("Interfacing ") time.sleep(3) lcdcmd(0x01) lcdprint("Circuit Digest") lcdcmd(0xc0) lcdprint("Welcomes You ") time.sleep(3) flag=0 lcdclear() while 1: gpio.output(led, HIGH) lcdcmd(1) lcdprint("Place Finger") if gpio.input(enrol) == 0: gpio.output(led, LOW) enrollFinger() elif gpio.input(delet) == 0: gpio.output(led, LOW) while gpio.input(delet) == 0: time.sleep(0.1) deleteFinger() else: searchFinger()
کد پایتون کامل در زیر آورده شده است.
import time from pyfingerprint.pyfingerprint import PyFingerprint import RPi.GPIO as gpio RS =18 EN =23 D4 =24 D5 =25 D6 =8 D7 =7 enrol=5 delet=6 inc=13 dec=19 led=26 HIGH=1 LOW=0 gpio.setwarnings(False) gpio.setmode(gpio.BCM) gpio.setup(RS, gpio.OUT) gpio.setup(EN, gpio.OUT) gpio.setup(D4, gpio.OUT) gpio.setup(D5, gpio.OUT) gpio.setup(D6, gpio.OUT) gpio.setup(D7, gpio.OUT) gpio.setup(enrol, gpio.IN, pull_up_down=gpio.PUD_UP) gpio.setup(delet, gpio.IN, pull_up_down=gpio.PUD_UP) gpio.setup(inc, gpio.IN, pull_up_down=gpio.PUD_UP) gpio.setup(dec, gpio.IN, pull_up_down=gpio.PUD_UP) gpio.setup(led, gpio.OUT) try: f = PyFingerprint('/dev/ttyUSB0', 57600, 0xFFFFFFFF, 0x00000000) if ( f.verifyPassword() == False ): raise ValueError('The given fingerprint sensor password is wrong!') except Exception as e: print('Exception message: ' + str(e)) exit(1) def begin(): lcdcmd(0x33) lcdcmd(0x32) lcdcmd(0x06) lcdcmd(0x0C) lcdcmd(0x28) lcdcmd(0x01) time.sleep(0.0005) def lcdcmd(ch): gpio.output(RS, 0) gpio.output(D4, 0) gpio.output(D5, 0) gpio.output(D6, 0) gpio.output(D7, 0) if ch&0x10==0x10: gpio.output(D4, 1) if ch&0x20==0x20: gpio.output(D5, 1) if ch&0x40==0x40: gpio.output(D6, 1) if ch&0x80==0x80: gpio.output(D7, 1) gpio.output(EN, 1) time.sleep(0.005) gpio.output(EN, 0) # Low bits gpio.output(D4, 0) gpio.output(D5, 0) gpio.output(D6, 0) gpio.output(D7, 0) if ch&0x01==0x01: gpio.output(D4, 1) if ch&0x02==0x02: gpio.output(D5, 1) if ch&0x04==0x04: gpio.output(D6, 1) if ch&0x08==0x08: gpio.output(D7, 1) gpio.output(EN, 1) time.sleep(0.005) gpio.output(EN, 0) def lcdwrite(ch): gpio.output(RS, 1) gpio.output(D4, 0) gpio.output(D5, 0) gpio.output(D6, 0) gpio.output(D7, 0) if ch&0x10==0x10: gpio.output(D4, 1) if ch&0x20==0x20: gpio.output(D5, 1) if ch&0x40==0x40: gpio.output(D6, 1) if ch&0x80==0x80: gpio.output(D7, 1) gpio.output(EN, 1) time.sleep(0.005) gpio.output(EN, 0) # Low bits gpio.output(D4, 0) gpio.output(D5, 0) gpio.output(D6, 0) gpio.output(D7, 0) if ch&0x01==0x01: gpio.output(D4, 1) if ch&0x02==0x02: gpio.output(D5, 1) if ch&0x04==0x04: gpio.output(D6, 1) if ch&0x08==0x08: gpio.output(D7, 1) gpio.output(EN, 1) time.sleep(0.005) gpio.output(EN, 0) def lcdclear(): lcdcmd(0x01) def lcdprint(Str): l=0; l=len(Str) for i in range(l): lcdwrite(ord(Str[i])) def setCursor(x,y): if y == 0: n=128+x elif y == 1: n=192+x lcdcmd(n) def enrollFinger(): lcdcmd(1) lcdprint("Enrolling Finger") time.sleep(2) print('Waiting for finger...') lcdcmd(1) lcdprint("Place Finger") while ( f.readImage() == False ): pass f.convertImage(0x01) result = f.searchTemplate() positionNumber = result[0] if ( positionNumber >= 0 ): print('Template already exists at position #' + str(positionNumber)) lcdcmd(1) lcdprint("Finger ALready") lcdcmd(192) lcdprint(" Exists ") time.sleep(2) return print('Remove finger...') lcdcmd(1) lcdprint("Remove Finger") time.sleep(2) print('Waiting for same finger again...') lcdcmd(1) lcdprint("Place Finger") lcdcmd(192) lcdprint(" Again ") while ( f.readImage() == False ): pass f.convertImage(0x02) if ( f.compareCharacteristics() == 0 ): print "Fingers do not match" lcdcmd(1) lcdprint("Finger Did not") lcdcmd(192) lcdprint(" Mactched ") time.sleep(2) return f.createTemplate() positionNumber = f.storeTemplate() print('Finger enrolled successfully!') lcdcmd(1) lcdprint("Stored at Pos:") lcdprint(str(positionNumber)) lcdcmd(192) lcdprint("successfully") print('New template position #' + str(positionNumber)) time.sleep(2) def searchFinger(): try: print('Waiting for finger...') while( f.readImage() == False ): #pass time.sleep(.5) return f.convertImage(0x01) result = f.searchTemplate() positionNumber = result[0] accuracyScore = result[1] if positionNumber == -1 : print('No match found!') lcdcmd(1) lcdprint("No Match Found") time.sleep(2) return else: print('Found template at position #' + str(positionNumber)) lcdcmd(1) lcdprint("Found at Pos:") lcdprint(str(positionNumber)) time.sleep(2) except Exception as e: print('Operation failed!') print('Exception message: ' + str(e)) exit(1) def deleteFinger(): positionNumber = 0 count=0 lcdcmd(1) lcdprint("Delete Finger") lcdcmd(192) lcdprint("Position: ") lcdcmd(0xca) lcdprint(str(count)) while gpio.input(enrol) == True: # here enrol key means ok if gpio.input(inc) == False: count=count+1 if count>1000: count=1000 lcdcmd(0xca) lcdprint(str(count)) time.sleep(0.2) elif gpio.input(dec) == False: count=count-1 if count<0: count=0 lcdcmd(0xca) lcdprint(str(count)) time.sleep(0.2) positionNumber=count if f.deleteTemplate(positionNumber) == True : print('Template deleted!') lcdcmd(1) lcdprint("Finger Deleted"); time.sleep(2) begin() lcdcmd(0x01) lcdprint("FingerPrint ") lcdcmd(0xc0) lcdprint("Interfacing ") time.sleep(3) lcdcmd(0x01) lcdprint("Circuit Digest") lcdcmd(0xc0) lcdprint("Welcomes You ") time.sleep(3) flag=0 lcdclear() while 1: gpio.output(led, HIGH) lcdcmd(1) lcdprint("Place Finger") if gpio.input(enrol) == 0: gpio.output(led, LOW) enrollFinger() elif gpio.input(delet) == 0: gpio.output(led, LOW) while gpio.input(delet) == 0: time.sleep(0.1) deleteFinger() else: searchFinger()
مطالب پیشنهادی برای شما
- آموزش راه اندازی برد رزبری پای و ماژول GPS
- ارتباط سریال RS-485 بین Raspberry Pi و Arduino Uno
- معرفی Webmin برای کار با Raspberry Pi
- اندازه گیری فاصله با سنسور اولتراسونیک و Raspberry Pi
- ۸ عامل برای انتخاب یک IoT وب سرور
- تفاوت بین روتر و فایروال - مهر ۱۰, ۱۴۰۳
- مسیریابی استاتیک در ویندوز - مهر ۸, ۱۴۰۳
- پروتکل SNMP - شهریور ۱۵, ۱۴۰۳