1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thiết kế hệ thống khóa thông minh. Sử dụng RFID và vân tay

84 192 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 84
Dung lượng 3,45 MB

Nội dung

Đề tài bao gồm các chức năng: + Mở khóa bằng vân tay và thẻ RFID + Mở khóa từ xa thông qua website +Quản lí thông tin người dùng và nhật kí mở khóa bằng website +Xem video trực tuyến và chụp hình bằng camera bên ngoài cửa - Đề tài sử dụng ngôn ngữ python3 và KIT Raspberry Pi. -Website được thiết kế riêng biết, dễ dàng sử dụng trên điện thoại và máy tính. Sử dụng tên miền miễn phí và CSDL miễn phí dễ lưu trữ thông tin trực tuyến, không phải local như các dự án khác

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN ĐIỆN TỬ BỘ MÔN KỸ THUẬT MÁY TÍNH - VIỄN THƠNG ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ HỆ THỐNG KHĨA THƠNG MINH NGÀNH CƠNG NGHỆ KỸ THUẬT ĐIỆN TỬ - TRUYỀN THÔNG Sinh viên: LÊ QUANG PHÚC MSSV: 15141245 TRẦN THANH DUY MSSV: 15141120 TP HỒ CHÍ MINH – 6/2019 TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN ĐIỆN TỬ BỘ MƠN KỸ THUẬT MÁY TÍNH - VIỄN THƠNG ĐỒ ÁN TỐT NGHIỆP THIẾT KẾ HỆ THỐNG KHĨA THƠNG MINH NGÀNH CƠNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG Sinh viên: LÊ QUANG PHÚC MSSV: 15141245 TRẦN THANH DUY MSSV: 15141120 Hướng dẫn: ThS LÊ MINH THÀNH TP HỒ CHÍ MINH – 06/2019 THƠNG TIN KHĨA LUẬN TỐT NGHIỆP Thơng tin sinh viên Họ tên sinh viên: Lê Quang Phúc MSSV: 15141245 Email: 15141245@student.hcmute.edu.vn Điện thoại: 0368066817 Họ tên sinh viên: Trần Thanh Duy MSSV: 15141120 Email: 15141120@student.hcmute.edu.vn Điện thoại: 0388487784 Thông tin đề tài - Tên đề tài: Thiết kế hệ thống khóa thơng minh - Đơn vị quản lý: Bộ mơn Kỹ Thuật Máy Tính - Viễn Thông, Khoa Điện Điện Tử, Trường Đại Học Sư Phạm Kỹ Thuật Tp Hồ Chí Minh - Thời gian thực hiện: Từ ngày 18 / 02 / 2019 đến ngày 07 / 06 / 2019 - Thời gian bảo vệ trước hội đồng: Ngày 20 / 06 / 2019 Lời cam đoan sinh viên Chúng – Lê Quang Phúc Trần Thanh Duy cam đoan KLTN cơng trình nghiên cứu thân hướng dẫn thạc sỹ Lê Minh Thành Kết công bố KLTN trung thực khơng chép từ cơng trình khác Tp.HCM, ngày tháng 06 năm 2019 SV thực đồ án (Ký ghi rõ họ tên) Lê Quang Phúc Trần Thanh Duy Giảng viên hướng dẫn xác nhận báo cáo chỉnh sửa theo đề nghị ghi biên Hội đồng đánh giá Khóa luận tốt nghiệp …………………………………………………………………………………………… Xác nhận Bộ Mơn Tp.HCM, ngày tháng 06 năm 2019 Giáo viên hướng dẫn (Ký, ghi rõ họ tên học hàm - học vị) Th.s Lê Minh Thành BẢN NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP (Dùng cho giảng viên phản biện) Đề tài: Thiết kế hệ thống khóa thơng minh Sinh viên thực hiện: Lê Quang Phúc Trần Thanh Duy Giảng viên hướng dẫn: Ths Lê Minh Thành MSSV: 15141245 MSSV: 15141120 Nhận xét bao gồm nội dung sau đây: Tính hợp lý cách đặt vấn đề giải vấn đề; ý nghĩa khoa học thực tiễn [15/100]: Đặt vấn đề rõ ràng, mục tiêu cụ thể [5]; đề tài có tính mới, cấp thiết [5]; đề tài có khả ứng dụng, tính sáng tạo [5] Phương pháp thực hiện/ phân tích/ thiết kế [25/100]: Phương pháp hợp lý tin cậy dựa sở lý thuyết [10]; có phân tích đánh giá phù hợp [10]; có tính tính sáng tạo [5] Kết thực hiện/ phân tích đánh giá kết quả/ kiểm định thiết kế [25/100]: Phù hợp với mục tiêu [10]; phân tích đánh giá / kiểm thử thiết kế hợp lý [10]; có tính sáng tạo/ kiểm định chặt chẽ đảm bảo độ tin cậy [5] Kết luận đề xuất [10/100]: Kết luận phù hợp với cách đặt vấn đề, đề xuất mang tính cải tiến thực tiễn phục[5] [5] ; kết luận có đóng góp mẻ, đề xuất sáng tạo thuyết Hình thức trình bày, bố cục chất lượng báo cáo [15/100]: Văn phong quán, bố cục hợp lý, cấu trúc rõ ràng, định dạng mẫu [5]; có tính hấp dẫn, thể lực tốt, văn trau chuốt [15] Tài liệu trích dẫn [10/100] Tính trung thực việc trích dẫn tài liệu tham khảo; tính phù hợp tài liệu trích dẫn; trích dẫn theo dẫn APA Đánh giá trùng lặp đề tài Cần khẳng định đề tài có trùng lặp hay khơng? Nếu có, đề nghị ghi rõ mức độ, tên đề tài, nơi công bố, năm công bố đề tài công bố Những nhược điểm thiếu sót, điểm cần bổ sung chỉnh sửa* Câu hỏi sinh viên phải trả lời trước hội đồng* (ít 02 câu Đánh giá chung - Điểm (Quy thang điểm 10 không làm tròn): …………./10 - Xếp loại chung (Xuất sắc, Giỏi, Khá, Trung bình, Yếu, Kém):……………………………… Đề nghị giảng viên phản biện Ghi rõ: “Báo cáo đạt/ không đạt yêu cầu khóa luận tốt nghiệp kỹ sư, phép/ khơng phép bảo vệ khóa luận tốt nghiệp” Tp HCM, ngày tháng 06 năm 2019 Người nhận xét (Ký ghi rõ họ tên) LỜI CẢM ƠN Nhóm chúng em xin gửi lời cảm ơn sâu sắc đến thầy Lê Minh Thành Thầy tận tình hướng dẫn, góp ý cho chúng em tồn thời gian thực đồ án để chúng em hồn thành đồ án tốt Nhóm xin gửi lời cảm ơn chân thành đến quý thầy cô khoa Điện – Điện tử, đặc biệt quý thầy cô thuộc mơn Kỹ Thuật Máy Tính - Viễn Thơng tận tình dạy kiến thức từ đến chuyên sâu để nhóm tiến hành thực hoàn tất đồ án Xin chân thành gửi lời cảm ơn đến thầy cô hội đồng bảo vệ dành chút thời gian để xem luận văn tốt nghiệp này, giúp em mặt tích cực hạn chế đồ án Cuối cùng, nhóm xin gửi lời cảm ơn đến bậc cha mẹ, người thân động viên giúp đỡ chúng em suốt đường học tập trình nghiên cứu thực đồ án Đồng thời cảm ơn anh chị trước bạn bè có lời khuyên, lời góp ý chân thành để chúng em hoàn thiện hoàn thành đồ án thời hạn Mặc dù cố gắng thực đồ án cách tốt hạn chế mặt kiến thức nên chúng em nhiều thiếu sót nội dung hình thức Chúng em hy vọng quý thầy cô thông cảm mong nhận ý kiến quý báu từ q thầy để chúng em hồn thiện Một lần chúng em xin chân thành cảm ơn ! Nhóm thực đề tài Lê Quang Phúc vi Trần Thanh Duy TĨM TẮT Khái niệm khóa cửa thông minh trở nên quen thuộc đời sống Chúng xuất tòa nhà thơng minh, khách sạn, trung tâm thương mại nơi cần an ninh cao Khóa cửa thơng minh mở khóa dựa cơng nghệ đại cơng nghệ sinh trắc học, cơng nghệ RFID tích hợp nhiều tiện ích khác nhằm mang đến tiện lợi cho người dùng, nâng cao mức độ an ninh đảm bảo tính thẩm mỹ Trong đồ án này, hệ thống khóa thơng minh sử dụng cơng nghệ nhận diện vân tay công nghệ RFID để mở khóa từ bên ngồi cửa mở khóa nút nhấn từ bên cửa Ngồi ra, người dùng giám sát an ninh bên cửa từ giao diện web chụp lại hình ảnh cần thiết Khi mở khóa nhật ký lưu trữ với thơng tin họ tên thời gian mở khóa Người dùng xem tải dạng file Excel để lưu trữ website Sau thực thêm vân tay thêm thẻ RFID, người dùng cập nhật thông tin cho vân tay thẻ RFID từ website cách nhanh chóng vii MỤC LỤC LỜI CẢM ƠN vi TÓM TẮT vii MỤC LỤC viii DANH MỤC HÌNH x DANH MỤC BẢNG xii DANH MỤC TỪ VIẾT TẮT xiii CHƯƠNG TỔNG QUAN 1.1 TÌNH HÌNH NGHIÊN CỨU 1.2 MỤC TIÊU NGHIÊN CỨU 1.3 GIỚI HẠN NGHIÊN CỨU 1.4 BỐ CỤC CHƯƠNG CƠ SỞ LÝ THUYẾT 2.1 CÔNG NGHỆ SINH TRẮC HỌC 2.2 CÔNG NGHỆ NHẬN DẠNG SĨNG VƠ TUYẾN 2.3 HỆ THỐNG QUẢN LÝ BẰNG WEBSITE 10 2.4 CÁC HỆ THỐNG AN NINH 12 CHƯƠNG THIẾT KẾ HỆ THỐNG KHĨA THƠNG MINH 15 3.1 U CẦU HỆ THỐNG 15 3.2 SƠ ĐỒ KHỐI HỆ THỐNG 15 3.3 THIẾT KẾ TỪNG KHỐI 16 3.3.1 Khối cảm biến vân tay 16 3.3.2 Khối camera 18 3.3.3 Khối đọc thẻ RFID 18 3.3.4 Khối cảm biến từ 20 3.3.5 Khối hiển thị 21 3.3.6 Khối chuông báo 22 3.3.7 Khối nút nhấn 23 3.3.8 Khối điều khiển chốt khóa cửa 23 3.3.9 Khối nguồn 24 3.3.10 Khối điều khiển trung tâm 25 viii 3.4 THIẾT KẾ PHẦN MỀM 26 3.4.1 Lưu đồ giải thuật 26 3.4.2 Thiết kế giao diện website 31 CHƯƠNG KẾT QUẢ 36 4.1 HÌNH ẢNH MƠ HÌNH THỰC TẾ 36 4.2 PHÂN TÍCH VÀ ĐÁNH GIÁ HOẠT ĐỘNG CỦA HỆ THỐNG 42 CHƯƠNG KẾT LUẬN 55 5.1 KẾT LUẬN 55 5.2 HƯỚNG PHÁT TRIỂN ĐỀ TÀI 55 TÀI LIỆU THAM KHẢO 56 Phụ lục A 58 ix DANH MỤC HÌNH Hình 2.1: Công nghệ sinh trắc học Hình 2.2: Nhận diện khn mặt Hình 2.3: Nhận diện mống mắt Hình 2.4: Nhận diện vân tay Hình 2.5: Nhận diện giọng nói Hình 2.6: Cơng nghệ RFID Hình 2.7: Giao diện điều khiển nhà thơng minh 11 Hình 2.8: Vườn rau thông minh 11 Hình 2.9: Camera an ninh 12 Hình 2.10: Hệ thống báo động xâm nhập 13 Hình 2.11: Hệ thống cảnh báo hỏa hoạn 13 Hình 2.12: Khóa cửa vân tay 14 Hình 3.1: Sơ đồ khối hệ thống 15 Hình 3.2: Mơ-đun cảm biến vân tay R305 16 Hình 3.3: Sơ đồ kết nối Raspberry Pi với mơ-đun vân tay camera 17 Hình 3.4: Webcam Logitech C170 18 Hình 3.5: Mơ-đun RFID 18 Hình 3.6: Sơ đồ kết nối Raspberry Pi với mô-đun RFID 19 Hình 3.7: Cảm biến từ MC-38 20 Hình 3.8: Nguyên lý hoạt động 21 Hình 3.9: Sơ đồ kết nối Raspberry Pi với cơng tắc từ 21 Hình 3.10: Màn hình OLED 21 Hình 3.11: Sơ đồ kết nối Raspberry Pi với hình OLED 22 Hình 3.12: Còi buzzer 5V 22 Hình 3.13: Sơ đồ kết nối Raspberry Pi với buzzer, nút nhấn led 23 Hình 3.14: Nút nhấn 23 Hình 3.15: Động servo MG996 24 Hình 3.16: Sơ đồ kết nối Raspberry Pi với động servo 24 Hình 3.17: Raspberry Pi 26 Hình 3.18: Lưu đồ chương trình 27 Hình 3.19: Lưu đồ chương trình quét vân tay 28 Hình 3.20: Lưu đồ chương trình đọc thẻ RFID 29 Hình 3.21: Lưu đồ chương trình điều khiển chốt khóa cửa 30 Hình 3.22: Lưu đồ lưu nhật ký lên sở liệu 31 Hình 3.23: Bố cục giao diện quản lý 32 Hình 3.24: Tạo website 33 Hình 3.25: Địa URL website 34 Hình 3.26: Lưu đồ chương trình chụp ảnh 34 Hình 3.27: Lưu đồ chương trình mở khóa 35 x [Online] https://umit.vn/gioi-thieu-sinh-trac-van-tay/ [12] Mi Community, “Phần mềm nhận diện giọng nói hoạt động nào?”, 03 Sep 2017 [Online] https://c.mi.com/thread-364400-1-0.html [13] Trần Văn Điền, “Công nghệ RFID”, 10 Oct 2014 [Online] http://congngherfid.blogspot.com/ [14] Nguyễn Văn Thịnh, “7 nhà cung cấp hosting miễn phí tốt nhất” [Online] https://thuthuatwp.com/hosting-mien-phi-tot-nhat/ [15] Free Web Hosting, “Free Web Hosting FAQ” [Online] https://www.000webhost.com/ 57 Phụ lục A MÃ NGUỒN CHƯƠNG TRÌNH ## ### Smart Lock Door ### ## import time import datetime import Adafruit_SSD1306 from PIL import Image from PIL import ImageDraw from PIL import ImageFont ##***Thu vien van tay import RPi.GPIO as GPIO from pyfingerprint.pyfingerprint import PyFingerprint import hashlib #tv_fingerprint.init_fingerprint() ##****Thu vien os goi lenh chup hinh terminal import os import tv_buzzer from mfrc522 import SimpleMFRC522 reader = SimpleMFRC522() ###Thu vien Database import MySQLdb ## Thu vien URL from urllib.request import urlopen import urllib.error #Dinh nghia ten bien mastercard = 566569477217 admincard = 305938998205 #Mot so DEFINE RFID = FINGERPRINT = #Open INSIDE_BUTTON = 16 SEL_BUTTON = 14 MC38 = 21 #cam bien tu LED = 17 RST =0 disp = Adafruit_SSD1306.SSD1306_128_32(rst=RST) disp.begin() # Clear display disp.clear() disp.display() 58 width = disp.width height = disp.height image = Image.new('1', (width, height)) draw = ImageDraw.Draw(image) draw.rectangle((0,0,width,height), outline=0, fill=1) padding =0 top = padding bottom = height-padding x=0 name = font = ImageFont.load_default() fonts=["ChiKareGo","C&C Red Alert [INET]","fontawesomewebfont","code2000", "FreePixel","miscfs_","pixelmix","ProggyTiny","Volter 28Goldfish_29","tin y"] path="/home/pi/luma.examples/examples/fonts/"+str(fonts[7])+".ttf" print(path) font = ImageFont.load_default() font = ImageFont.truetype(str(path),20) ##Initiate the MySQL ## Khai bao duong dan luu hinh anh impath="/home/pi/_src/cap_image/" ##init fingerprint 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('The fingerprint sensor could not be initialized!') print('Exception message: ' + str(e)) ## -Chuong trinh #### # def read_tag(): id, text = reader.read() return id def SetAngle(angle): duty = (angle/18) +2 print(" "+str(duty)+" > "+str(angle)+" degree") pwm.ChangeDutyCycle(duty) time.sleep(1) 59 pwm.ChangeDutyCycle(0) def insert_db_enroll(position): try: db = MySQLdb.connect("remotemysql.com","ZOdhaOSTCF","XPeLutInEt","ZOdh aOSTCF") cur= db.cursor() print ("Connect database successfully !") except: print ("Connect database fail !") pass sql = "INSERT INTO `Info_Finger` (`Ho`,`Ten_dem`,`Ten`, `Finger_ID`) VALUES (%s, %s, %s, %s) " try: cur.execute(sql,( "","","Unknown",str(position) )) db.commit() print ("insert newFinger successfully!") except: pass db.rollback() print ("insert newFinger error") #db.close() def kiemtra_Tag(tag): global ten K = chech_network() if K == 101: ten= "Unknown" if(tag == mastercard): print("offline") return 99 elif tag == admincard: print("offline") draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x, top),"Network Error!",font=font, fill=255) draw.text((x, top+20),"Enroll fail !!!",font=font, fill=255) disp.image(image) disp.display() time.sleep(0.3) return 101 return 202 sql = "SELECT * FROM Info_RFID " try: global db, cur 60 try: db = MySQLdb.connect("remotemysql.com","ZOdhaOSTCF","XPeLutInEt","ZOdh aOSTCF") cur= db.cursor() print ("Connect database successfully !") except: print ("Connect database fail !") pass cur.execute(sql) # Thuc thi lenh SQL results = cur.fetchall() # Lay tat ca cac hang list for row in results: Tag = row[3][0:12] if Tag == str(tag): ten_ = row[2] print (" ID=%s,ten=%s" % (Tag, ten_)) if ten_ == "admin": return 999 elif str(tag) == Tag: return 99 return 202 except: pass print ("Error: khong doc duoc du lieu Tag") return 202 # ngat ket noi voi server # db.close() def insert_to_db(fingerID): global ten id_finger = fingerID zeit = (datetime.datetime.fromtimestamp(time.time()).strftime("%H:%M:%S")) datum = (datetime.datetime.fromtimestamp(time.time()).strftime("%d/%m/%Y")) K = chech_network() if K == 101: ten= "Unknown" file = open("/home/pi/_src/Log_offline.txt","a+") file.write("\n"+"+ FingerPrint\tID:"+str(id_finger)+"\t"+str(zeit)+"\t"+str(datum)) file.close() else: try: 61 db = MySQLdb.connect("remotemysql.com","ZOdhaOSTCF","XPeLutInEt","ZOdh aOSTCF") cur= db.cursor() print ("Connect database successfully !") except: print ("Connect database fail !") pass cur.execute("SELECT * FROM Info_Finger WHERE Finger_ID = %s" % (id_finger)) result1 = cur.fetchall() fullname = "NoName" for row in result1: fullname = row[0]+' '+row[1]+' '+row[2] ten = row[2] # print("ten:"+ten) print (" "+str(id_finger) + " - " + fullname + " - " + zeit + " - " + datum) #sql = "INSERT INTO NAME_TIME (ID, NAME, T_TIME, D_TIME) VALUES (%s, %s, %s, %s)" sql = "INSERT INTO `NAME_TIME` (`ID`, `NAME`, `METHOD`, `T_TIME`, `T_DATE`) VALUES (%s, %s, %s, %s, %s) " try: cur.execute(sql,( str(id_finger) , str(fullname),"FingerPrint", str(zeit), str(datum))) db.commit() ## except: pass db.rollback() print ("insert fingerID error") #db.close() def insert_db_RFID(rfid): global ten, db, cur zeit = (datetime.datetime.fromtimestamp(time.time()).strftime("%H:%M:%S")) datum = (datetime.datetime.fromtimestamp(time.time()).strftime("%d/%m/%Y")) K = chech_network() if K == 101: file = open("/home/pi/_src/Log_offline.txt","a+") file.write("\n"+"- RFID Tag\t"+str(rfid)+"\t"+str(zeit)+"\t"+str(datum)) file.close() else: # try: 62 # db = MySQLdb.connect("remotemysql.com","ZOdhaOSTCF","XPeLutInEt","ZOdh aOSTCF") # cur= db.cursor() # print ("Connect database successfully !") # except: # print ("Connect database fail !") # pass cur.execute("SELECT * FROM Info_RFID WHERE Tag_ID = %s" % (rfid)) result1 = cur.fetchall() for row in result1: fullname = row[0]+' '+row[1]+' '+row[2] ten = row[2] print (" "+str(rfid) + " - " + fullname + " - " + zeit + " - " + datum) #sql = "INSERT INTO NAME_TIME (ID, NAME, T_TIME, D_TIME) VALUES (%s, %s, %s, %s)" sql = "INSERT INTO `NAME_TIME` (`ID`, `NAME`, `METHOD`, `T_TIME`, `T_DATE`) VALUES (%s, %s, %s, %s, %s) " try: cur.execute(sql,( str(rfid) , str(fullname),"RFID Tag", str(zeit), str(datum))) db.commit() except: pass db.rollback() print ("insert RFID error") # db.close() def capture_image(name,impath): os.system("sudo fswebcam -p YUYV -r 640x480 "+str(impath)+str(name)+".jpg") os.system("exit") def kiemtra_vantay(): ## Search for a finger ## Tries to initialize the sensor ## Gets some sensor information draw.rectangle((0,0,width,height), outline=0, fill=0) print(' Currently used templates: ' + str(f.getTemplateCount()) +'/'+ str(f.getStorageCapacity())) ## Tries to search the finger and calculate hash global sel sel=0 try: 63 # while(positionNumber==-1): print(' Waiting for finger ') #draw.text((x, top),"Waiting for finger ",font=font, fill=255) draw.text((x+40, top),"LOCKED" ,font=font, fill=255) draw.text((x+10, top+18),"Scan to unlock" ,font=font, fill=255) disp.image(image) disp.display() ## Wait that finger is read #sel=GPIO.input(SEL_BUTTON) while( f.readImage() == False ) and (sel==FINGERPRINT): # setup_time() hien_thi(FINGERPRINT) #sel=GPIO.input(SEL_BUTTON) ex=second_current//10%10%2 if(ex==0): sel=RFID inbu = GPIO.input(INSIDE_BUTTON) web=GPIO.input(19) print(second_current) if (inbu == 1) or (web==1): Dstate = True global ten ten="(^.^)" return (100,404,100) pass if(sel==FINGERPRINT): pass else: return (100,101,100) ## Converts read image to characteristics and stores it in charbuffer f.convertImage(0x01) ## Searchs template result = f.searchTemplate() positionNumber = result[0] accuracyScore = result[1] if ( positionNumber == -1 ): print(' No match found!') draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x, top)," NO MATCH FOUND!",font=font, fill=255) draw.text((x, top+18),"Bell is ringing ",font=font, fill=255) disp.image(image) disp.display() 64 alert() return (100,101,100) # exit(0) else: print(' Found template at position #' + str(positionNumber)) print(' The accuracy score is: ' + str(accuracyScore)) draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x, top),"position #"+str(positionNumber),font=font, fill=255) draw.text((x, top+20),"score: "+str(accuracyScore),font=font, fill=255) disp.image(image) disp.display() time.sleep(.5) ## OPTIONAL stuff ## ## Loads the found template to charbuffer f.loadTemplate(positionNumber, 0x01) ## Downloads the characteristics of template loaded in charbuffer characterics = str(f.downloadCharacteristics(0x01)).encode('utf-8') ## Hashes characteristics of template print(' SHA-2 hash of template: ' + hashlib.sha256(characterics).hexdigest()) ### Tra ve gia tri Position & ma Hash return (99,positionNumber,accuracyScore) except Exception as e: print('Operation failed!') print('Exception message: ' + str(e)) return (100,101,100) # exit(1) def enroll_vantay(): ## Enrolls new finger ## Tries to enroll new finger try: print('Waiting for finger ') draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x, top),"Scan new finger ",font=font, fill=255) disp.image(image) disp.display() ## Wait that finger is read while ( f.readImage() == False ): pass ## Converts read image to characteristics and stores it in charbuffer f.convertImage(0x01) ## Checks if finger is already enrolled 65 result = f.searchTemplate() positionNumber = result[0] if ( positionNumber >= ): print('Template already exists at position #' + str(positionNumber)) draw.text((x, top+20),"Existed at #"+str(positionNumber),font=font, fill=255) disp.image(image) disp.display() time.sleep(1) return print('Remove finger ') draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x, top),"Remove finger ",font=font, fill=255) disp.image(image) disp.display() time.sleep(2) print('Waiting for same finger again ') draw.text((x, top+20),"Scan again ",font=font, fill=255) disp.image(image) disp.display() ## Wait that finger is read again while ( f.readImage() == False ): pass ## Converts read image to characteristics and stores it in charbuffer f.convertImage(0x02) ## Compares the charbuffers if ( f.compareCharacteristics() == ): raise Exception('Fingers not match') draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x, top),"Dont match ",font=font, fill=255) disp.image(image) disp.display() time.sleep(0.5) ## Creates a template f.createTemplate() ## Saves template at new position number positionNumber = f.storeTemplate() print('Finger enrolled successfully!') print('New template position #' + str(positionNumber)) draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x, top),"Enroll success ",font=font, fill=255) draw.text((x, top+20),"New position #"+str(positionNumber),font=font, fill=255) disp.image(image) disp.display() 66 insert_db_enroll(positionNumber) time.sleep(2) #Tra ve gia tri cua PositionNumber return positionNumber except Exception as e: print('Operation failed!') draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x, top),"Operation failed",font=font, fill=255) disp.image(image) disp.display() time.sleep(0.5) print('Exception message: ' + str(e)) #exit(1) return (100,101,100) def setup_time(): global second_current,today_date,current_time,now now = datetime.datetime.now() today_date = now.strftime("%d %b %y") current_time = now.strftime("%A %H:%M ") second_current= now.second #print(second_current//10%10%2) # print(second_current) def hien_thi(sel): draw.rectangle((0,0,width,height), outline=0, fill=0) if(second_current%10 < 8): draw.text((x+40, top),"LOCKED" ,font=font, fill=255) if(sel==FINGERPRINT): draw.text((x, top+18),"Scan fingerprint" ,font=font, fill=255) else: draw.text((x, top+20),"Scan RFID tag ",font=font, fill=255) else: draw.text((x+30, top), today_date,font=font, fill=255) draw.text((x+10, top+18),current_time ,font=font, fill=255) disp.image(image) disp.display() def hienthi_unlock(): draw.rectangle((0,0,width,height), outline=0, fill=0) draw.text((x+35, top),"UNLOCKED",font=font, fill=255) draw.text((x, top+18),"Hello "+str(ten) ,font=font, fill=255) for i in range(0,4): draw.rectangle((x+120,top,width,height), outline=0, fill=0) disp.image(image) disp.display() draw.text((x+120, top),str(3-i),font=font, fill=255) disp.image(image) 67 disp.display() time.sleep(1) def setgpio(): GPIO.setmode(GPIO.BCM) GPIO.setup(LED, GPIO.OUT, initial = 0) #LED.PIN GPIO.setup(MC38, GPIO.IN, pull_up_down=GPIO.PUD_UP) #MC38.PIN tv_buzzer.buzzer_setup(18) GPIO.setup(SEL_BUTTON, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.setup(INSIDE_BUTTON, GPIO.IN) GPIO.setup(12, GPIO.OUT) #SERVO GPIO.setup(19, GPIO.IN) #Nhan tin hieu mo khoa tu web PIN13 len HIGH GPIO.setwarnings(False) def alert(): tv_buzzer.buzzer(0.7) time.sleep(0.2) tv_buzzer.buzzer(0.3) def xlngat(pin): print(" {Ngat GPIO} MO KHOA BANG WEB") Dstate = True def chech_network(): try: weburl = urlopen('https://www.google.com/') code = weburl.getcode() time.sleep(0.2) print(" Network code: " + str(code)) return 404 except: print(" Network error") return 101 def main(): setgpio() GPIO.add_event_detect(19, GPIO.RISING, callback=xlngat, bouncetime=100) global sel, inbu, Dstate, pwm,ten, Wr_count sel=1 Wr_count = 0; ten = "Unknown" positionNumber = None c_temp=0 68 tag=0 Dstate = False pwm=GPIO.PWM(12,50) pwm.start(0) SetAngle(90) e=None while True: ## Dinh dang thoi gian e=0 setup_time() #sel=GPIO.input(SEL_BUTTON) print("sel:"+str(sel)) # Gia tri tag ban dau la NOne if(sel==RFID): tag =read_tag() print("RFID MODE") print(" Tag ban dau:"+str(tag)) print(" Please present the Card") while (tag==None) and (sel==RFID): tag=read_tag() #sel=GPIO.input(SEL_BUTTON) ex=second_current//10%10%2 if(ex==1): sel=FINGERPRINT setup_time() hien_thi(RFID) inbu = GPIO.input(INSIDE_BUTTON) web=GPIO.input(19) print(second_current) if (inbu == 1) or (web==1): ten = "(^-^)" Dstate = True web=0 break c_temp=0 print(" Tag da quet:"+str(tag)) if sel==RFID and ten != "(^-^)": e = kiemtra_Tag(tag) else: print("FINGERPRINT MODE") (c,positionNumber,accuracyScore)=kiemtra_vantay() c_temp = c print(" Ket qua van tay: "+str(c_temp)) setgpio() d=1 69 # e = kiemtra_Tag(tag) print(" Ham kiem tra Tag tra ve:"+str(e)) if (c_temp==99)or(e == 99): if sel == RFID: insert_db_RFID(tag) else: insert_to_db(positionNumber) tv_buzzer.buzzer(0.1) print (">>>>THE DOOR HAS BEEN UNLOCKEDthe rest of condition

Ngày đăng: 27/09/2019, 22:55

TỪ KHÓA LIÊN QUAN

w