KHÓA CỬA THÔNG MINH CÓ CHỨC NĂNG ĐỔI MẬT KHẨU, THÊM XÓA VÂN TAY FULL CODE

55 4 0
KHÓA CỬA THÔNG MINH CÓ CHỨC NĂNG ĐỔI MẬT KHẨU, THÊM XÓA VÂN TAY FULL CODE

Đ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

Không phí tiền tải về !!!!!!! Khóa cửa thông minh có thể mở khóa bằng vân tay, password, tin nhắn. Đặc biệt có chức năng đổi password, thêm xóa vân tay trong hệ thống ( các chức năng này được phân quyền > chỉ có chủ nhà mới có quyền)

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 MƠN HỌC: ĐỒ ÁN ĐỀ TÀI THIẾT KẾ KHĨA CỬA THƠNG MINH DỰA TRÊN ARDUINO MEGA 2560 NGÀNH CÔNG NGHIỆP KỸ THUẬT ĐIỆN TỬ - VIỄN THÔNG Sinh viên: THÁI TUẤN VŨ MSSV: 19161327 Hướng dẫn: ThS ĐẶNG PHƯỚC HẢI TRANG Học kì I năm học: 2022 – 2023 TP Hồ Chí Minh, tháng 12 năm 2022 i Sinh viên thực đề tài: Thái Tuấn Vũ - 19161327 Giảng viên cho điểm: Nhận xét giảng viên ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… ……………………………………………………………………… Ngày… tháng… năm 2022 Chữ ký giảng viên hướng dẫn (Ký ghi rõ họ tên) ii DANH MỤC HÌNH ẢNH Hình Dạng song trình thiết bị chủ ghi liệu vào thiết bị tớ Hình 2 Dạng sóng q trình thiết bị chủ đọc liệu từ thiết bị tớ Hình Định dạng khung liệu UART 10 bit Hình Quá trình nhận liệu UART Hình Hình ảnh thực tế Ardiuno Mega 2560 Hình Sơ đồ chân Arduino Mega 2560 Hình Hình ảnh thực tế cảm biến vân tay AS608 10 Hình Sơ đồ chân mơ-đun cảm biến vân tay AS608 12 Hình Mô-đun SIM800L 13 Hình 10 Hình ảnh LCD 16x2 15 Hình 11 Mô-đun giao tiếp I2C 16 Hình Sơ đồ khối thiết kế 17 Hình Mô-đun giảm áp LM2596 18 Hình 3 Mạch nguyên lý khối nguồn 19 Hình Kết nối khối xử lý trung tâm với khối ngoại vi 19 Hình Hình ảnh bàn phím ma trận 4x4 20 Hình Mạch nguyên lý còi báo 21 Hình Mạch nguyên lý đóng mở khóa cửa 21 Hình Khóa điện 12V 22 Hình Lưu đồ giải thuật phần 23 Hình 10 Lưu đồ giải thuật phần 24 Hình 11 Lưu đồ giải thuật phần 25 Hình 12 Lưu đồ giải thuật phần 26 Hình 13 Lưu đồ giải thuật phần 27 Hình Mạch thực tế thiết kế 28 Hình Giao diện nhập mật 29 Hình 3a Giao diện mật 29 Hình 3b Giao diện mật sai 29 Hình 4a Giao diện vân tay 30 Hình 4b Giao diện vân tay sai 30 Hình Giao diện yêu cầu xác minh vân tay chủ nhà 30 Hình Giao diện thêm vân tay 31 Hình Giao diện xóa vân tay 31 iii DANH MỤC BẢNG Bảng Thông số kỹ thuật Mô-đun cảm biến vân tay AS608 11 Bảng 2 Chức chân mô-đun cảm biến vân tay AS608 12 Bảng Chức chân mô-đun SIM800L V2 13 iv CÁC TỪ VIẾT TẮT Từ viết tắt AT DC DCS EEPROM EGSM FRR FAR GND GPRS GSM ID IDE I2C LCD PCS SCL SDA SIM SMS SPI SRAM UART USB Từ gốc Attention command Direct Current Digital Cellular System Electrically Erasable Programmable Read-Only Memory Extended Groupe Spécial Mobile False Rejection Rate False Acceptance Rate Ground General Packet Radio Service Groupe Spécial Mobile Identification Integrated Development Environment Inter-Integrated Circuit Liquid Crystal Display Personal Communication Service Serial Clock Serial Data Subscriber Identity Module Short Message Service Serial Peripheral Interface Static Random Access Memory Universal Asynchronous Receiver – Transmitter Universal Serial Bus v MỤC LỤC DANH MỤC HÌNH ẢNH DANH MỤC BẢNG CÁC TỪ VIẾT TẮT Chương 1: TỔNG QUAN 1.1 LÝ DO CHỌN ĐỀ TÀI 1.2 MỤC TIÊU NGHIÊN CỨU 1.3 GIỚI HẠN CỦA ĐỀ TÀI 1.4 BỐ CỤC Chương 2: CƠ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU MỘT VÀI CHUẨN TRUYỀN THƠNG CĨ DÂY 2.1.1 Giới thiệu chuẩn truyền thông I2C 2.1.2 Giới thiệu chuẩn truyền thông UART không đồng 2.2 GIỚI THIỆU BOARD ARDUINO MEGA 2560 2.3 GIỚI THIỆU MÔ-ĐUN CẢM BIẾN VÂN TAY AS608 10 2.4 GIỚI THIỆU MODULE SIM800L V2 13 2.5 GIỚI THIỆU MÀN HÌNH LCD 16X2 KÈM MÔ-ĐUN GIAO TIẾP I2C 15 Chương 3: THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG 17 3.1 SƠ ĐỒ KHỐI THIẾT KẾ 17 3.2 THIẾT KẾ CHI TIẾT 18 3.2.1 Khối nguồn 18 3.2.2 Khối xử lý trung tâm 19 3.2.3 Khối cảm biến vân tay khối mô-đun SIM 20 3.2.4 Khối ma trận phím 20 3.2.5 Khối hiển thị 20 3.2.6 Khối chấp hành 21 3.3 LƯU ĐỒ GIẢI THUẬT 23 Chương 4: KẾT QUẢ THỰC HIỆN 28 4.1 KẾT QUẢ THỰC HIỆN PHẦN CỨNG 28 4.2 KẾT QUẢ THỰC HIỆN PHẦN MỀM 29 vi Chương 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 32 5.1 KẾT LUẬN 32 5.2 HƯỚNG PHÁT TRIỂN 32 TÀI LIỆU THAM KHẢO 33 PHỤ LỤC MÃ NGUỒN CHƯƠNG TRÌNH 34 vii Chương 1: TỔNG QUAN 1.1 LÝ DO CHỌN ĐỀ TÀI Ngày nay, với phát triển cơng nghệ đại, khóa cửa thơng minh dần thay khóa chìa truyền thống Khóa cửa thơng minh giúp hạn chế nguy như: nhà bị đột nhập, cắp,… bảo vệ tài sản có giá trị gia đình Trong vài năm trở lại đây, nhu cầu sử dụng khóa thơng minh ngày trở nên phổ biến, đặc biệt khu chung cư, biệt thự cao cấp Bên cạnh đó, việc phát triển khơng ngừng dịng vi điều khiển cho đời nhiều loại sản phẩm thơng minh nhỏ gọn, tích hợp nhiều chức cho người dùng dễ sử dụng Không thể không kể đến kit Arduino, sản phẩm sử dụng phổ biến có cộng đồng người dùng lớn Kit Arduino kết hợp với nhiều mơ-đun khác để tạo nên ứng dụng thiết thực cho sống đại ngày Với đặc tính trên, tác giả định thực đề tài “THIẾT KẾ CỬA THÔNG MINH DỰA TRÊN ARDUINO MEGA 2560”, thực mơ hình bao gồm Arduino, mơ-đun cảm biến vân tay, bàn phím, mơ-đun SIM để làm khóa cửa thơng minh 1.2 MỤC TIÊU NGHIÊN CỨU Thiết kế khóa cửa thơng minh có chức sau: - Cho phép đóng/mở cửa vân tay - Cho phép đóng/mở cửa mật - Cho phép đóng/mở cửa từ xa tin nhắn SMS - Cho phép thêm ID vân tay mới, xóa ID vân tay có thay đổi mật (chỉ có chủ nhà dùng chức này) - Có hình hiển thị thơng tin, để giao tiếp với người dùng - Có nguồn dự phòng điện 1.3 GIỚI HẠN CỦA ĐỀ TÀI  Thiết kế sử dụng Arduino Mega 2560 giao tiếp với mô-đun cảm biến vân tay AS608 mô-đun SIM 800L thông qua chuẩn truyền thông UART Đồng thời, đề tài sử dụng chuẩn truyền thông I2C để giao tiếp Arduino hình LCD  Người thiết kế sử dụng phần mềm Arduino IDE để viết biên dịch chương trình điều khiển, với thư viện hỗ trợ lập trình bao gồm: , 1.4 BỐ CỤC Nội dung đề tài gồm chương: Chương 1: Tổng quan: Chương trình bày lý chọn đề tài, mục tiêu phạm vi nghiên cứu đề tài Chương 2: Cơ sở lý thuyết: Chương trình bày lý thuyết chuẩn truyền thơng có dây sử dụng đề tài, giới thiệu mô-đun, linh kiện lựa chọn Chương 3: Thiết kế hệ thống: Trình bày sơ đồ khối, thiết kế sơ đồ nguyên lý cho khối xây dựng lưu đồ giải thực hệ thống Chương 4: Kết thực hiện: Trình bày kết thực thiết kế Chương 5: Kết luận hướng phát triển: Đưa kết luận hướng phát triển đề tài Chương 2: CƠ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU MỘT VÀI CHUẨN TRUYỀN THƠNG CĨ DÂY 2.1.1 Giới thiệu chuẩn truyền thơng I2C I2C viết tắc từ Inter-Integrated Circuit chuẩn truyền thông hãng điện tử Philips Semiconductor sáng lập cho phép giao tiếp thiết bị chủ (Master) với nhiều thiết bị tớ (Slave) thơng qua đường tín hiệu: SDA (serial data) dùng để truyền tải liệu SCL (serial clock) để truyền tải xung clock Master phát cho Slave nhằm đồng thời gian tồn bit liệu đường truyền Để phân biệt Slave Slave có địa riêng bit 10 bit nhà sản xuất thiết bị có sử dụng chuẩn truyền thơng I2C thiết lập Dạng sóng q trình thiết bị chủ ghi liệu vào thiết bị tớ hình 2.1: Đầu tiên thiết bị chủ tạo trạng thái START để bắt đầu trình truyền liệu Tiếp đến, thiết bị chủ gửi địa thiết bị tớ cần giao tiếp Trong liệu bit có bit địa bit điều khiển đọc/ghi (R/W) bit để báo cho thiết bị tớ nhận byte Sau đó, thiết bị chủ chờ nhận tín hiệu bắt tay từ thiết bị tớ cần giao tiếp Tiếp theo, thiết bị chủ tiến hành gửi địa ô nhớ bắt đầu cần ghi liệu Sau đó, thiết bị chủ chờ nhận tín hiệu trả lời từ thiết bị tớ Cuối cùng, thiết bị chủ tiến hành gửi liệu để ghi vào thiết bị tớ Hình Dạng song trình thiết bị chủ ghi liệu vào thiết bị tớ Nguồn: trang 365 tài liệu tham khảo [3] PHỤ LỤC MÃ NGUỒN CHƯƠNG TRÌNH Mã nguồn thư viện cho ma trận phím keypad4x4.cpp #include "keypad4x4.hpp" unsigned int col[5]; unsigned int row[5]; int rowpress=0, colpress=0; char keypadPhone [4][4] ={'1','2','3','A', '4','5','6','B', '7','8','9','C', '*','0','#','D'}; void keypadInit(){ col[1]= A12;//Set chan cot col[2]= A13;//Set chan cot col[3]= A14;//Set chan cot col[4]= A15; //Set chan cot row[1]= A8;//Set chan hang row[2]= A9;//Set chan hang row[3]= A10;//Set chan hang row[4]= A11;//Set chan hang for(int i = 1; i < 5; i++) { pinMode(col[i],OUTPUT); pinMode(row[i],INPUT_PULLUP); // điện trở kéo lên digitalWrite(row[i],HIGH); digitalWrite(col[i],HIGH); }} char defineButtonPhone4x4(){ colpress = rowpress = 0; digitalWrite (col[1],HIGH); digitalWrite (col[2],HIGH); digitalWrite (col[3],HIGH); digitalWrite (col[4],HIGH); for (int i=1; i 15) { lcd.setCursor(0,1); lcd.print(" pass qua dai ! "); } else { lcd.setCursor(5,1); for (int i = 0; i < inputPass.length(); i++) lcd.print("*"); }delay(200); } value=' '; } ////// Change Password ////////// void change_Password(){ lcd.clear(); while(a0 < pass.length()){ lcd.setCursor(0,0); lcd.print("Nhap NewPassword"); value1 = defineButtonPhone4x4(); if (value1 !=' ' && value1!='A' && value1!='B' && value1!='C' && value1!='D' && value1!='*'&&value1!='#') { inputPass1 += value1; lcd.setCursor(5,1); for (int i = 0; i < inputPass1.length(); i++) lcd.print("*"); delay(200); a0++; value1 =' '; }else if(value1=='C'){ inputPass1=""; a0=0; lcd.setCursor(0,1); lcd.print(" "); }else if(value1=='D'){ mode = 0; break;} } lcd.clear(); while(a1 < pass.length()){ // Nhập xong Password lần 1, tiến hành nhập lần lcd.setCursor(0,0); lcd.print("Nhap lai NewPass"); value1 = defineButtonPhone4x4(); if(value1 !=' ' && value1!='A' && value1!='B' && value1!='C' && value1!='D' && value1!='*' && value1!='#'){ inputPass2 += value1; lcd.setCursor(5,1); for (int i = 0; i < inputPass2.length(); i++) lcd.print("*"); delay(200); a1++; value1=' '; }else if(value1=='C'){ inputPass1=""; a1=0; lcd.setCursor(0,1); lcd.print(" "); } } // So sánh newpass1 newpass2 if(inputPass1!=' '&& inputPass2!=' '){ if(inputPass1 == inputPass2 ){ lcd.clear(); 40 lcd.setCursor(0,0); lcd.print("DA DOI PASSWORD "); pass = inputPass1; delay(2000); }else { lcd.clear(); lcd.setCursor(0,0); lcd.print("PASS KHONG KHOP "); delay(2000); } } inputPass1 =' '; inputPass2 =' '; id =-1; mode =0; a0 =0; a1=0; } // HÀM TRẢ VỀ ID VÂN TAY//// int get_main_ID() { uint8_t p = finger.getImage(); if (p != FINGERPRINT_OK) return -1; p = finger.image2Tz(); if (p != FINGERPRINT_OK) return -1; p = finger.fingerFastSearch(); if (p != FINGERPRINT_OK) return -2; return finger.fingerID; } void eraseBuffer(){ int i; for(i=0;i= buffer_size) xbuff=0; else buffer[xbuff++]=c; }} /////// fingerPrint ////// void fingerInit(){ Serial.println("\n\nAdafruit finger detect test"); finger.begin(57600);//tốc độ truyền nhận data giũa cảm biến vs arduino delay(5); if (finger.verifyPassword()) { Serial.println("Found fingerprint sensor!"); } else { Serial.println("Did not find fingerprint sensor :("); while (1) delay(1);} 41 finger.getTemplateCount();//đếm số lượng vân tay đc lưu cảm biến Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates"); Serial.println("Waiting for valid finger ");} ///nhận ID vân tay để xử lí uint8_t getFingerprintID(){ uint8_t p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: Serial.println("No finger detected"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); return p; default: Serial.println("Unknown error"); return p; } p = finger.image2Tz(); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p; case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p; default: Serial.println("Unknown error"); return p; } p = finger.fingerFastSearch();///tìm vân tay nhanh if (p == FINGERPRINT_OK) { 42 Serial.println("Found a print match!"); }else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_NOTFOUND) { Serial.println("Did not find a match"); tryNumber++; lcd.setCursor(0, 0); lcd.print("MO KHOA VAN TAY "); lcd.setCursor(0, 1); lcd.print("Van tay sai"); if(tryNumber >= 3) { digitalWrite(BUZZER, HIGH); lcd.clear(); lcd.setCursor(0,0); lcd.print(" CANH BAO!!!! "); sendSMS("Co Trom!!!"); delay(5000); tapThePhone(); tryNumber = 0; eraseBuffer();} else{ lcd.setCursor(11,1); lcd.print(tryNumber); lcd.print(" lan"); delay(2000); } delay(2000); lcd.clear(); lcd.setCursor(0, 0);lcd.print(" Moi Nhap Pass "); return p; }else { Serial.println("Unknown error"); return p;} Serial.print("Found ID #"); Serial.print(finger.fingerID Serial.print(" with confidence of "); Serial.println(finger.confidence); lcd.clear(); lcd.setCursor(0, 0); lcd.print("MO KHOA VAN TAY "); lcd.setCursor(0, 1); lcd.print("Van tay hop le !"); digitalWrite(BUZZER,LOW); digitalWrite(RELAY, HIGH); delay(5000); digitalWrite(RELAY, LOW); tryNumber = 0; lcd.clear(); lcd.setCursor(0, 0); lcd.print(" Moi Nhap Pass "); return finger.fingerID;} //////// CHON ID THÊM VÂN TAY VÀO CẢM BIẾN/////// void AddFinger(){ char id_char[4]; int id_number =0, a=0; for(int i=0;i=2 && id_number

Ngày đăng: 28/02/2023, 08:33

Tài liệu cùng người dùng

Tài liệu liên quan