THIẾT KẾ VÀ THI CÔNG MÔ HÌNH KHÓA ĐIỆN TỬ CÓ GIÁM SÁT TỪ XA SỬ DỤNG GSM VÀ RFID.........................................................................................................................................................................................................................................................................................................
TRƢỜNG ĐH SPKT TP HỒ CHÍ MINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o -Tp HCM, ngày 05 tháng 07 năm 2019 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Thành Dương MSSV: 14141051 Trần Vỉnh Sơn MSSV: 14141266 Chuyên ngành: Điện tử công nghiệp Mã ngành: 141 Hệ đào tạo: Đại học quy Mã hệ: Khóa: 2014 Lớp: 14141DT3 I TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CƠNG MƠ HÌNH KHÓA ĐIỆN TỬ CÓ GIÁM SÁT TỪ XA SỬ DỤNG GSM VÀ RFID II NHIỆM VỤ Các số liệu ban đầu: - Pham Minh Tuan, ebook :Internet Of Things(IoT): cho người bắt đầu, 2017 (https://iotmakervn.github.io/iot-starter-book/) - Nguyễn Ngọc Lực, “Thiết kế , thi cơng mơ hình hệ thơng điều khiển điện giám sát nhà” , đồ án tốt nghiệp , trường ĐHSPKT Tp HCM, 2018 - Phạm Hưng Thịnh, “Thiết kế, thi công hệ thống điều khiển giám sát thiết bị nhà có hỗ trờ Google Assistant”, đồ án tốt nghiệp, trường ĐHSPKT TpHCM, 2018 - Hướng dẫn sử dụng Module sim900-MLAB (http://mlab.vn/huong-dan-sudung-module-sim900.html) - Nguyen Dinh Phu, Truong Ngoc Anh, giáo trình vi xử lý , Xuất ĐH Quốc Gia, Tp.HCM, 2013 - Hướng dẫn sử dụng Module cảm biến chuyển động HC - SR501-MLAB (http://mlab.vn/18496-huong-dan-su-dung-module-cam-bien-chuyen-dong-hcsr501.html) i - Lập trình sử dụng module đọc thẻ RFID-RC522 – Arduino.vn (http://arduino.vn/bai-viet/833-lap-trinh-va-su-dung-modul-doc-rfid-rc522) Nội dung thực hiện: - Tìm hiểu Arduino, module sim900, module RFID, cảm biến chuyển động, phím ma trận 4x4 - Thiết kế, tính tốn, thi cơng mạch giao tiếp module sim với Arduino - Thiết kế, tính tốn, thi cơng mạch giao tiếp cảm biến chuyển động với Arduino - Thiết kế, tính tốn, thi cơng mạch giao tiếp cảm biến chuyển động với Arduino - Thiết kế, tính tốn, thi cơng mạch giao tiếp module RFID với Arduino - Viết chương trình điều khiển mơ hình - Thiết kế nguồn cung cấp cho mơ hình - Chạy thử nghiệm mơ hình - Viết báo cáo - Báo cáo cáo đề tài tốt nghiệp III NGÀY GIAO NHIỆM VỤ: 19/02/2019 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 05/07/2019 V HỌ VÀ TÊN CÁN BỘ HƢỚNG DẪN: PGS.TS Nguyễn Thanh Hải CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – YSINH ii TRƢỜNG ĐH SPKT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH CỘNG HÕA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÖC o0o -Tp HCM, ngày tháng năm 2019 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Trần Vỉnh Sơn Lớp: 14141DT3B MSSV: 14141266 Họ tên sinh viên: Nguyễn Thành Dƣơng Lớp: 14141DT3A MSSV: 14141051 Tên đề tài: THIẾT KẾ VÀ THI CƠNG MƠ HÌNH KHĨA ĐIỆN TỬ CĨ GIÁM SÁT TỪ XA SỬ DỤNG GSM VÀ RFID Tuần/ngày Nội dung Tuần (18/02 - 24/02) Gặp gỡ GVHD trao đổi đề tài tốt nghiệp Tuần (25/02 - 03/03) Tìm hiểu đề tài nghiên cứu có liên quan Tuần (04/03 - 10/03) Tuần (11/03 - 17/03) Gặp báo cáo với GVHD đề tài thực Tìm hiểu linh kiện sử dụng Tìm hiểu giao tiếp module Sim với Arduino Vẽ sơ đồ khối nội dung khối Thiết kế lập trình cho Arduino module Sim Tuần (18/03 - 24/03) Báo cáo tiến độ với GVHD Tuần (25/03 - 31/03) Tuần (01/04 - 07/04) Hoàn thành sở lý thuyết, thiết kế nguyên lý khối Hoàn thành giao tiếp (gửi sms) module Sim Arrduino Tìm hiểu giao tiếp Arduino phím ma trận Viết code cho phím ma trận Arduino iii Xác nhận GVHD Báo cáo tiến độ cho GVHD Tuần (08/04 - 14/04) Viết báo cáo thiết kế khối mở khóa dùng phím ma trận Tìm hiểu giao tiếp RFID Arduino Tuần (15/04 - 21/04) Hồn thành giao tiếp phím ma trận viết code RFID Viết báo cáo Báo cáo tiến độ cho GVHD Tuần 10 (22/04 28/04) Gửi tài liệu, hình ảnh, báo cáo tiến độ 50% Viết code cho RFID , ma trận phím Arduino Tuần 11 (29/04 05/05) Tìm hiểu giao tiếp cảm biến chuyển động PIR, nút nhấn đơn với Arduino Viết code cho PIR, nút nhấn với Arduino Tuần 12 (06/05 12/05) Tổng hợp code toàn mạch Tuần 13(13/05 19/05) Báo cáo tiến độ với GVHD Viết báo cáo Chỉnh sửa báo cáo Kiểm tra chỉnh sửa toàn mạch Tuần 14,15,16 (20/05 Đi dây, hồn thành mơ hình – 09/06) Viết nhận xét đánh giá Hoàn thành báo cáo GV HƢỚNG DẪN (Ký ghi rõ họ tên) iv LỜI CAM ĐOAN Chúng em xin cam đoan đề tài chúng em thực dựa tài liệu trước khơng chép tài liệu hay cơng trình trước Tp HCM, ngày 05 tháng 07 năm 2019 Người thực đề tài Trần Vỉnh Sơn Nguyễn Thành Dƣơng v LỜI CẢM ƠN Trong trình thực đồ án tốt nghiệp, chúng em nhận nhiều giúp đỡ từ Thầy/Cô người thân bạn bè Đặc biệt, chúng em xin gửi lời cảm ơn chân thành, sâu sắc tới Thầy PGS.TS Nguyễn Thanh Hải hướng dẫn góp ý tận tình, chia sẻ nhiều kinh nghiệm quý báu, tạo điều kiện tốt để chúng em hoàn thành tốt đề tài Chúng em xin cảm ơn Thầy, Cô khoa Điện Điện tử tạo điều kiện tốt để chúng em hoàn thành tốt đề tài Và xin cảm ơn tất bạn bè, người thân ủng hộ giúp đỡ nhiệt tình cho chúng em Sau cùng, dù có nhiều cố gắng giúp đỡ người thời gian thực 15 tuần, kinh nghiệm hạn chế nên chúng em không tránh thiếu sót Chúng em mong q Thầy /Cơ, người thân, bạn bè cảm thơng chân thành góp ý để chúng em hoàn thiện tốt đề tài Chúng em xin chân thành cảm ơn! Tp HCM, ngày 05 tháng 07 năm 2019 Người thực đề tài Trần Vỉnh Sơn Nguyễn Thành Dƣơng vi MỤC LỤC NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP i LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP iii LỜI CAM ĐOAN v LỜI CẢM ƠN vi MỤC LỤC vii LIỆT KÊ HÌNH ẢNH ix LIỆT KÊ BẢNG x TÓM TẮT xi Chƣơng TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘI DUNG NGHIÊN CỨU 1.4 GIỚI HẠN 1.5 BỐ CỤC Chƣơng CƠ SỞ LÝ THUYẾT 2.1 GIỚI THIỆU VỀ IOTS (INTERNET OF THINGS) 2.2 GIỚI THIỆU PHẦN CỨNG 2.2.1 Module cảm biến chuyển động PIR HC – SR501 2.2.2 Phím ma trận 4x4 2.2.3 Module Sim900a 2.2.4 Vi điều khiển 2.2.5 Công nghệ RFID 2.3 GIAO TIẾP I2C 13 2.4 CHUẨN TRUYỀN THÔNG UART 13 2.5 GIAO TIẾP SPI 14 2.6 PHẦN MỀM ARDUINO IDE 15 Chƣơng TÍNH TỐN VÀ THIẾT KẾ 16 3.1 GIỚI THIỆU 16 vii 3.2.2 Thiết kế chi tiết 18 3.2.3 Sơ đồ nguyên lý toàn mạch 28 Chƣơng THI CƠNG MƠ HÌNH 30 4.1 GIỚI THIỆU 30 4.2 THI CÔNG MÔ HÌNH 30 4.2.1 Danh sách linh kiện 30 4.2.2 Lắp ráp mơ hình 31 4.3 LẬP TRÌNH CHO MƠ HÌNH 34 4.3.1 Lưu đồ chương trình 34 Chƣơng KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 40 5.1 GIỚI THIỆU 40 5.2 KẾT QUẢ 40 5.1.1 Kết đạt 40 5.1.2 Kết thực nghiệm 40 5.3 NHẬN XÉT 45 5.3.1 Ưu điểm 45 5.3.2 Hạn chế 46 5.4 ĐÁNH GIÁ 46 Chƣơng KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 47 6.1 KẾT LUẬN 47 6.2 HƢỚNG PHÁT TRIỂN 47 TÀI LIỆU THAM KHẢO 48 PHỤ LỤC 49 viii LIỆT KÊ HÌNH ẢNH Hình 2.1 Hình dạng cảm biến PIR HC-SR501 Hình 2.2 Hình ảnh nguyên lý hoạt động cảm biến PIR Hình 2.3 Hình ảnh sơ đồ chân cảm biến PIR Hình 2.4 Hình ảnh sơ đồ kết nối phím ma trận 4x4 Hình 2.5 Hình ảnh phim ma trận 4x4 Hình 2.6 Hình ảnh Module SIM900A Hình 2.7 Hình ảnh Arduino Mega Hình 2.8 Hình ảnh Module RFID RC522 10 Hình 2.9 Hình ảnh LCD 16x2 11 Hình 2.10 Mạch chuyển giao tiếp LCD 16x2 13 Hình 2.11 Hình ảnh kết nối Master Slave 15 Hình 2.12 Logo phần mềm IDE 15 Hình 2.13 Hình ảnh giao diện phần mềm IDE 16 Hình 3.1 Sơ đồ khối mơ hình 17 Hình 3.2 Sơ đồ nguyên lý khối điều khiển arduino 19 Hình 3.3 Sơ đồ nguyên lý khối giám sát 20 Hình 3.4 Sơ đồ nguyên lý khối cảm biến 20 Hình 3.5 Sơ đồ nguyên lý khối báo động 21 Hình 3.6 Sơ đồ nguyên lý khối động nút nhấn 22 Hình 3.7 Sơ đồ nguyên lý khối mở khóa 23 Hình 3.8 Sơ đồ nguyên lý mạch mở khóa dùng RFID 24 Hình 3.9 Sơ đồ nguyên lý mạch mở khóa dùng ma trận phím 25 Hình 3.10 Sơ đồ nối dây ma trận phím 4x4 25 Hình 3.11 Sơ đồ nguyên lý khối hiển thị 26 Hình 3.12 Hình ảnh module hạ áp LM2596 27 Hình 3.13 Sơ đồ ngun lý mơ hình khóa thơng minh 28 Hình 4.1 Hình ảnh mạch xử lý trung tâm 31 Hình 4.2 Hình ảnh mạch giám sát module sim 31 Hình 4.4 Hình ảnh mạch báo động 32 Hình 4.5 Hình ảnh mơ hình hồn thiện 33 Hình 4.6 Lưu đồ chương trình tổng qt tồn hoạt động 34 Hình 4.7 Lưu đồ chương trình 35 Hình 4.8 Lưu đồ chương trình thêm thẻ, xóa thẻ đổi pass 36 Hình 4.9 Lưu đồ chương trình kiểm tra ngắt nút nhấn cánh báo PIR 37 Hình 5.1 Hình ảnh hình LCD trạng thái chờ quẹt thẻ 41 Hình 5.2 Hình ảnh LCD quẹt thẻ sai 41 ix Hình 5.3 Hình ảnh mạch báo động hoạt động 42 Hình 5.4 Hình ảnh module Sim gửi tin nhắn cảnh báo quẹt thẻ sai 42 Hình 5.5 Hình ảnh hình LCD trạng thái quản lý 43 Hình 5.6 Hình ảnh LCD chế độ thêm thẻ 43 Hình 5.7 Hình ảnh LCD chọn chế độ xóa thẻ 44 Hình 5.8 Hình ảnh LCD yêu cầu nhập mật cũ chọn chế độ đổi mật 44 Hình 5.9 Hình ảnh tin nhắn cảnh báo PIR phát có người lạ xâm nhập 45 LIỆT KÊ BẢNG Bảng 4.1 Danh sách linh kiện sử dụng…………………………………………… 30 x PHỤ LỤC PHỤ LỤC #include #include #include #include #include #include #include #include LiquidCrystal_I2C lcd(0x27, 16, 2); #define STATE_LOGIN #define STATE_KEY_PASS #define STATE_NEW_PASS #define STATE_SEND_REPORT #define STATE_MAIN #define STATE_CHANGE_PASSWORK #define STATE_ADD_RFID #define STATE_ADD_PASS #define STATE_REMOVE_RFID #define DEBUG /////////////////////////KHAI BAO BIEN TOAN CUC CHUONG TRINH/////////////////////// int state_machine = 0; uint8_t count_report = 0; uint16_t num_user; char phone_report[10]; uint16_t addr_current_user; #define LED_PIN 13 #define BUZZER_PIN 48 #define REPORT_COUNT_NUM 10 bool REPORT_STATE = false; uint8_t REPORT_COUNT = 0; #define SMS_REPORT #define BUZZER_REPORT bool REPORT_SMS_BUZZER_STATE = SMS_REPORT; #define door_close false #define door_open true bool state_door = door_close; /////////////////////////KHAI BAO CAC BIEN EEPROM DIA CHI//////////////// #define addr_phone #define size_phone 10 #define addr_num_user 12 #define addr_fisr_ID 14 #define size_ID #define size_pass #define zise_user #define EEPROM_MIN_ADDR #define EEPROM_MAX_ADDR 511 char buf_pass[4]; uint16_t addr_save_new = 512; /////////////////////////KHAI BAO BIEN PHIM MATRIX/////////////////////// BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 49 PHỤ LỤC const byte rows = 4; const byte columns = 4; int holdDelay = 700; int n = 3; // int state = 0; char key = 0; char keys[rows][columns] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'}, }; byte rowPins[rows] = {8, 7, 6, 5}; byte columnPins[columns] = {12, 11, 10, 9}; Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rows, columns); //////////////////////////////RFID/////////////////////////// #define SS_PIN 53 #define RST_PIN MFRC522 mfrc522(SS_PIN, RST_PIN); uint8_t successRead; unsigned char pass_keyboard[4]; unsigned char readCard[4]; Mả đọ mã unsigned char pass_temp[4] = {0, 0, 0, 0}; Mả đọ mã char pass_show[4] = " "; uint8_t count = 0; /////////////////////////////SERVO/////////////////////////// Servo myservo; #define SERVO_PIN #define Ser_on #define Ser_off 90 ///////////////////////////MODULE SIM////////////////////////// bool REPORT_SMS_SENDED = false; uint32_t SMS_TIMEOUT = 0; #define SIM_ENA_PIN 22 String sodienthoai="0379792379"; //SoftwareSerial SIM900(24, 26); // RX, TX //////////////////////////BUTTON LOCK HANDLE///////////////////////// void check_door() { if(state_door==door_close) { myservo.write(Ser_off); } else { myservo.write(Ser_on); } } #define BUTTON_PIN 18 //interrupt bool state_button=false; void BUTTON_HANDLE_FUNCTION() { Serial.println("BUTTON DUOC NHAN"); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50 PHỤ LỤC state_button=true; } ///////////////////////////PIR HANDLE///////////////////////// #define PIR_PIN bool PIR_REPORT_STATE = false; void PIR_HANDLE_FUNCTION() { Serial.println("PIR PHAT HIEN"); PIR_REPORT_STATE = true; } ///////////////////////////TIMER HANDLE////////////////////////// #define Time_handle 50 uint32_t timer2_count = 0; void Timer_handle_func() { timer2_count++; if (timer2_count % 10 == 0) //1 count =50ms => 500ms vo function lan { if ((REPORT_STATE == 1) && (REPORT_COUNT < REPORT_COUNT_NUM)) { digitalWrite(LED_PIN, !digitalRead(LED_PIN)); digitalWrite(BUZZER_PIN, !digitalRead(BUZZER_PIN)); REPORT_COUNT++; Serial.println("CANH BAO SAI THE" + String(REPORT_COUNT)); } if (REPORT_COUNT >= REPORT_COUNT_NUM) { REPORT_COUNT = 0; REPORT_STATE = 0; } } if (timer2_count % == 0) //1 count =50ms => 200ms vo function lan { check_door(); if (PIR_REPORT_STATE == true) { digitalWrite(LED_PIN, !digitalRead(LED_PIN)); digitalWrite(BUZZER_PIN,!digitalRead(BUZZER_PIN)); Serial.println("CANH BAO CO NGUOI VAO"); if (!digitalRead(PIR_PIN)) { PIR_REPORT_STATE = false; digitalWrite(LED_PIN, LOW); digitalWrite(BUZZER_PIN,LOW); Serial.println("PIR TAT"); } } } if (REPORT_SMS_SENDED == true) { SMS_TIMEOUT++; //sau 30s moi kiem tra lai fun 50ms vo lan => 30000/50=600 if (SMS_TIMEOUT >= 600) { REPORT_SMS_SENDED = false; SMS_TIMEOUT = 0; Serial.println("HET TIMEOUT CHUAN BI CHO TIN NHAN KE TIEP"); } } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 51 PHỤ LỤC } void setup() { Serial.begin(115200); //enable DEBUG lcd.begin(); lcd_start_init(); //SIM_Enable(); Serial.println("Dang khoi tao chuong trinh "); //let start program SPI.begin(); mfrc522.PCD_Init(); myservo.attach(SERVO_PIN); //myservo.write(Ser_off); //get_phone_eep_rom(); num_user = EEPROM.read(addr_num_user); Serial.println(" SO THE TRONG EEPROM: " + String(num_user)); //printf numbers users in system pinMode(LED_PIN, OUTPUT); pinMode(BUZZER_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); digitalWrite(BUZZER_PIN, LOW); pinMode(PIR_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(PIR_PIN), PIR_HANDLE_FUNCTION, RISING ); ọ m ê ụ ò ú pinMode(BUTTON_PIN, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), BUTTON_HANDLE_FUNCTION, FALLING ); ọ m ê ụ ò ú delay(500); state_button=false; state_door=door_close; MsTimer2::set(Time_handle, Timer_handle_func); // 50ms period MsTimer2::start(); Serial.println("Start"); //let start program //SIM_INIT(); //SIM_SEND_SMS(sodienthoai,"OKOKOK"); lcd_start(); } void loop() { machine_state_func(); check_button(); check_report_sms(); } void machine_state_func() { switch (state_machine) { case STATE_LOGIN: LOGIN(); break; case STATE_KEY_PASS: KEYBOARD_PASS(); break; case STATE_MAIN: LOCK_MAIN(); break; case STATE_SEND_REPORT: REPORT_SOS_SIM_LED_BUZZER(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 52 PHỤ LỤC break; case STATE_CHANGE_PASSWORK: CHANGE_PASS_FUN(); break; case STATE_NEW_PASS: CHANGE_NEW_PASS(); break; case STATE_ADD_RFID: READ_NEW_RFID(); break; case STATE_ADD_PASS: ADD_NEW_PASS_RFID(); break; case STATE_REMOVE_RFID: REMOVE_RFID_USER(); break; default: break; } } void check_report_sms() { if(PIR_REPORT_STATE==true && REPORT_SMS_BUZZER_STATE == SMS_REPORT) { REPORT_PIR_SEND_SMS(); } } void check_button() { if(state_button==true) { state_door=!state_door; delay(500); if(state_machine==STATE_MAIN) { lcd.clear(); lcd_start(); count_report=0; state_machine = STATE_LOGIN; } state_button=false; Serial.println("DOI TRANG THAI CUA!!!!!!!!!!!"); } } void LOGIN() { if (CHECK_RFID() == true) { lcd.clear(); lcd.setCursor(0, 1); lcd.print("THE DUNG"); lcd.clear(); state_machine = STATE_KEY_PASS; clear_pass_key(); } else { lcd.clear(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53 PHỤ LỤC lcd.setCursor(0, 0); lcd.print("VUI LONG THU LAI"); count_report++; Serial.println(" Sai Lan:" + String(count_report)); lcd.setCursor(1, 1); lcd.print("SAI LAN:" + String(count_report)); if (count_report >= 3) state_machine = STATE_SEND_REPORT; //clear_pass_key(); } } void KEYBOARD_PASS() { lcd.setCursor(0, 0); lcd.print(" MAT KHAU THE"); lcd.setCursor(1, 1); lcd.print(" PASS:"); lcd.setCursor(7, 1); for (uint8_t count2 = 0; count2 < 4; count2++)lcd.print(pass_show[count2]); if (check_pass_key() == true) { //mo servo va mo khoa state_door=door_open; state_machine = STATE_MAIN; count_report=0; lcd.clear(); } } void REPORT_SOS_SIM_LED_BUZZER() { Serial.println("TRANG THAI CANH BAO"); REPORT_STATE = 1; if (REPORT_SMS_SENDED == false) { REPORT_SEND_SMS(); REPORT_SMS_SENDED == true; } //thuc hien viec canh bao (SMS, LED, BUZZER, ) //Sau ve lai Login lcd_start(); count_report = 0; state_machine = STATE_LOGIN; } void LOCK_MAIN() { check_door(); lcd.setCursor(5, 0); lcd.print("CUA MO "); if (REPORT_SMS_BUZZER_STATE == SMS_REPORT) { lcd.setCursor(15, 0); lcd.print("*"); } else { lcd.setCursor(15, 0); lcd.print(" "); } lcd.setCursor(2, 1); lcd.print("CO QUYEN Q/LY"); check_function_security(); } void CHANGE_PASS_FUN() { lcd.setCursor(0, 0); lcd.print("NHAP M/KHAU CU"); lcd.setCursor(0, 1); lcd.print("M/KHAU:"); for (uint8_t count2 = 0; count2 < 4; count2++)lcd.print(pass_show[count2]); if (check_pass_key() == true) { //mo servo va mo khoa BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54 PHỤ LỤC lcd.clear(); clear_pass_key(); state_machine = STATE_NEW_PASS; } } void CHANGE_NEW_PASS() { lcd.setCursor(0, 0); lcd.print("NHAP M/KHAU MOI"); lcd.setCursor(0, 1); lcd.print("M/KHAU:"); for (uint8_t count2 = 0; count2 < 4; count2++)lcd.print(pass_show[count2]); change_pass(); } void get_phone_eep_rom() { Serial.println("SO DT KHOI TAO"); uint8_t count_phone; for (count_phone = 0; count_phone < size_phone; count_phone++) { phone_report[count_phone] = EEPROM.read(addr_phone + count_phone); Serial.print(phone_report[count_phone]); } Serial.println(""); } uint8_t check_function_security() { char temp_k = keypad.getKey(); switch (temp_k) { case 'A': state_machine = STATE_ADD_RFID; lcd.clear(); break; case 'B': state_machine = STATE_REMOVE_RFID; break; case 'C': state_machine = STATE_CHANGE_PASSWORK; clear_pass_key(); lcd.clear(); break; case 'D': break; case '*': state_door=door_close; lcd.clear(); lcd_start(); count_report=0; state_machine = STATE_LOGIN; break; case '#': //LUA CHON CHE DO GUI SMS HOAC BAO BUZZER if (REPORT_SMS_BUZZER_STATE == SMS_REPORT) { REPORT_SMS_BUZZER_STATE = BUZZER_REPORT; lcd.setCursor(2, 0); lcd.print(" TAT SMS "); delay(1000); } else BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55 PHỤ LỤC { REPORT_SMS_BUZZER_STATE = SMS_REPORT; lcd.setCursor(2, 0); lcd.print(" BAT SMS delay(1000); "); } break; } } void change_pass() { char temp = keypad.getKey(); if (temp) { if ((count < 4) && (temp != '#')) // **** { pass_temp[count] = temp; pass_show[count] = '*'; Serial.println(temp); Serial.println(pass_temp[count]); count++; } if (temp == 'D') { Serial.print("Set Pass Moi La: "); for (uint8_t add_pass_count = 0; add_pass_count < 4; add_pass_count++) { pass_keyboard[add_pass_count] = pass_temp[add_pass_count]; Serial.print((char)pass_keyboard[add_pass_count]); //addr_current_user EEPROM.write(addr_current_user + size_ID + add_pass_count, pass_keyboard[add_pass_count]); } state_door=door_close; lcd_start(); clear_pass_key(); state_machine = STATE_LOGIN; } if (temp == '#') { for (uint8_t u = 0; u < 4; u++) { pass_temp[u] = 0x00; pass_show[u] = ' '; } count = 0; } } } bool check_pass_key() { char temp = keypad.getKey(); if (temp) { if (temp == '#') { for (uint8_t u = 0; u < 4; u++) { pass_temp[u] = 0x00; pass_show[u] = ' '; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56 PHỤ LỤC } count = 0; } if (temp == 'D') { uint8_t check_count = 0; for ( check_count = 0; check_count < 4; check_count++) { if (pass_temp[check_count] != pass_keyboard[check_count]) break; } Serial.println("D"); if (check_count == 4)return 1; else return 0; } if ((count < 4) && (temp != '#')) // **** { pass_temp[count] = temp; pass_show[count] = '*'; Serial.print((char)temp); //Serial.print(pass_temp[count]); count++; } } return 0; } void clear_pass_key() { for (uint8_t u = 0; u < 4; u++) { pass_temp[u] = 0x00; pass_show[u] = ' '; } count = 0; } bool CHECK_RFID() { { successRead = getID(); // sets successRead to when we get read from reader otherwise // When device is in use if wipe button pressed for 10 seconds initialize Master Card wiping check_button(); } while (!successRead); //the program will not go further while you are not getting a successful read uint16_t i; for (i = addr_fisr_ID; i < (EEPROM_MAX_ADDR - zise_user); i += zise_user) { S p ầ ủ mả _ mả m if ((readCard[0] == EEPROM.read(i))) N ó p ầ b ỳ ô p ù ợp ỳ ò ặp ú y ậ đượ ị ủ { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57 PHỤ LỤC break; } } if ((readCard[0] == EEPROM.read(i)) && (readCard[1] == EEPROM.read(i + 1)) && (readCard[2] == EEPROM.read(i + 2)) && (readCard[3] == EEPROM.read(i + 3))) N ó p ầ b ỳ ô p ù ợp ỳ ò ặp ú y ậ đượ ị ủ { Serial.println("TIM THAY THE"); //Serial.print(i); addr_current_user = i; for (uint16_t eep_count = 0; eep_count < 4; eep_count++) { pass_keyboard[eep_count] = EEPROM.read(i + eep_count + 4); } return 1; } else return 0; } bool READ_NEW_RFID() { Serial.println("THEM USER CHO THE RDIF MOI"); lcd.setCursor(0, 0); lcd.print("MOI QUET THE MOI"); { successRead = getID(); // sets successRead to when we get read from reader otherwise // When device is in use if wipe button pressed for 10 seconds initialize Master Card wiping check_button(); } while (!successRead); //the program will not go further while you are not getting a successful read uint16_t i; for (i = addr_fisr_ID; i < (EEPROM_MAX_ADDR - zise_user); i += zise_user) { S p ầ ủ mả _ mả m if ((readCard[0] == EEPROM.read(i)) && (readCard[1] == EEPROM.read(i + 1)) && (readCard[2] == EEPROM.read(i + 2)) && (readCard[3] == EEPROM.read(i + 3))) N ó p ầ b ỳ ô p ù ợp ỳ vịng ặp ú y ậ đượ ị ủ { break; } else if ((EEPROM.read(i) == 0xff) && (EEPROM.read(i + 1) == 0xff) && (EEPROM.read(i + 2) == 0xff) && (EEPROM.read(i + 3) == 0xff)) { Serial.println("VI TRI LUU THE MOI LA" + String(i)); addr_save_new = i; break; } } if ((readCard[0] == EEPROM.read(i)) && (readCard[1] == EEPROM.read(i + 1)) && (readCard[2] == EEPROM.read(i + 2)) && (readCard[3] == EEPROM.read(i + 3))) N ó p ầ b ỳ p ù ợp ỳ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58 PHỤ LỤC ò ặp ú y ậ đượ ị ủ { Serial.println("TIM THAY THE DA CO"); lcd.setCursor(0, 0); lcd.print(" DA CO THE NAY "); delay(1000); } else { if (successRead) state_machine = STATE_ADD_PASS; clear_pass_key(); Serial.println("CHUYEN TOI TRANG THAI NHAP PASS MOI"); lcd.clear(); } } uint8_t getID() { if ( ! mfrc522.PICC_IsNewCardPresent()) { return 0; } if ( ! mfrc522.PICC_ReadCardSerial()) { return 0; } //Serial.println(F("Scanned PICC's UID:")); for ( uint8_t i = 0; i < 4; i++) { // readCard[i] = mfrc522.uid.uidByte[i]; Serial.print(readCard[i]); Serial.print('-'); } Serial.println(""); mfrc522.PICC_HaltA(); // Stop reading return 1; } void lcd_start() { lcd.clear(); lcd.print("KHOA CUA DIEN TU"); lcd.setCursor(2, 1); lcd.print("MOI QUET THE"); } void lcd_start_init(){ lcd.clear(); lcd.print(" DANG KHOI DONG"); lcd.setCursor(2, 1); lcd.print("VUI LONG CHO"); } void ADD_NEW_PASS_RFID() { lcd.setCursor(0, 0); lcd.print("NHAP MKHAU MOI"); lcd.setCursor(0, 1); lcd.print("MKHAU: "); for (uint8_t count2 = 0; count2 < 4; count2++)lcd.print(pass_show[count2]); //while(1); //Serial.println("THEM PASS CHO THE RDIF MOI"); ADD_PASS_KEYBOARD(addr_save_new); } void ADD_PASS_KEYBOARD(uint16_t addr_start_save) { char temp = keypad.getKey(); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59 PHỤ LỤC if (temp) { if ((count < 4) && (temp != '#')) // **** { pass_temp[count] = temp; pass_show[count] = '*'; Serial.println(temp); Serial.println(pass_temp[count]); count++; } if (temp == 'D') { Serial.print("ID THE MOI: "); Serial.print(readCard[0]); Serial.print(readCard[1]); Serial.print(readCard[2]); Serial.print(readCard[3]); Serial.println(""); Serial.print("SET PASS THE MOI La: "); for (uint8_t add_pass_count = 0; add_pass_count < 4; add_pass_count++) { pass_keyboard[add_pass_count] = pass_temp[add_pass_count]; Serial.print((char)pass_keyboard[add_pass_count]); //addr_current_user EEPROM.write(addr_start_save + add_pass_count, readCard[add_pass_count]); EEPROM.write(addr_start_save + size_ID + add_pass_count, pass_keyboard[add_pass_count]); } if (num_user > 0)num_user++; EEPROM.write(addr_num_user, num_user); Serial.println(""); state_door=door_close; lcd_start(); clear_pass_key(); state_machine = STATE_LOGIN; } if (temp == '#') { for (uint8_t u = 0; u < 4; u++) { pass_temp[u] = 0x00; pass_show[u] = ' '; } count = 0; } } } void REMOVE_RFID_USER() { Serial.println("XOA THE RFID"); //lcd_delete_RFID(); //lcd_start(); //state_machine=STATE_LOGIN; READ_DELETE_RFID(); } bool READ_DELETE_RFID() { Serial.println("XOA THE RFID"); lcd.setCursor(0, 0); lcd.print("MOI QUET THE XOA"); { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 60 PHỤ LỤC successRead = getID(); // sets successRead to when we get read from reader otherwise check_button(); // When device is in use if wipe button pressed for 10 seconds initialize Master Card wiping } while (!successRead); //the program will not go further while you are not getting a successful read uint16_t i; for (i = addr_fisr_ID; i < (EEPROM_MAX_ADDR - zise_user); i += zise_user) { S p ầ ủ mả _ mả m if ((readCard[0] == EEPROM.read(i)) && (readCard[1] == EEPROM.read(i + 1)) && (readCard[2] == EEPROM.read(i + 2)) && (readCard[3] == EEPROM.read(i + 3))) N ó p ầ b ỳ p ù ợp ỳ ò ặp ú y ậ đượ ị ủ { break; } } if ((readCard[0] == EEPROM.read(i)) && (readCard[1] == EEPROM.read(i + 1)) && (readCard[2] == EEPROM.read(i + 2)) && (readCard[3] == EEPROM.read(i + 3))) N ó p ầ b ỳ ô p ù ợp ỳ ò ặp ú y ậ đượ ị ủ { if (successRead) state_machine = STATE_MAIN; clear_pass_key(); Serial.println("TIM THAY DIA CHI XOA, XOA DATA THE"); lcd.setCursor(0, 0); lcd.print(" XOA THANH CONG "); for (uint16_t count_delete = i ; count_delete < (i + zise_user); count_delete++) { EEPROM.write(count_delete, 0xff); } if (num_user > 0)num_user ; EEPROM.write(addr_num_user, num_user); delay(1000); lcd.clear(); } else { lcd.setCursor(0, 0); lcd.print(" KO CO THE NAY "); delay(1000); lcd.clear(); if (successRead) state_machine = STATE_MAIN; } } void SIM_Enable() { digitalWrite(SIM_ENA_PIN, HIGH); // Du chan PWR_KEY len cao it nhat 1s delay(1500); // o day ta de 1,5s digitalWrite(SIM_ENA_PIN, LOW); // Du chan PWR_KEY BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 61 PHỤ LỤC xuong thap delay(100); // cac ban xem Hardware designed sim900A de hieu ro hon } void SIM_INIT() { long select_baundrate[8] = {1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}; int i = 1, dem = 0, tt = 0, init = 0; char nah = Serial2.read(); int time_delay = 0; Serial.println(" chon toc baud"); while (init == 0) { tt = 0; Serial2.begin(select_baundrate[i]); delay(10); Serial2.print("ATZ\r\n"); delay(10); Serial2.print("ATE1\r\n"); delay(10); Serial2.print("AT\r\n"); delay(10); for (dem = 0; dem < 20000; dem++) { char nah = Serial2.read(); if (nah > 0) { if (nah == 'A') tt = 1; if (nah == 'T' && tt == 1) tt = 2; if (nah == 'O' && tt == 2) tt = 3; if (nah == 'K' && tt == 3) tt = 4; } delayMicroseconds(100); if (tt == 4) { Serial.print("Toc baud : "); Serial.print(select_baundrate[i]); Serial.println(""); init = 1; break; } } i++; if (i > 7) i = 0; } delay(200); Serial2.print("AT+IPR=9600\r\n"); delay(200); Serial2.begin(9600); delay(200); Serial2.print("AT+CLIP=1\r\n"); delay(300); Serial2.print("AT+CMGF=1\r\n"); delay(300); Serial2.print("AT+CNMI=1,2,0,0,0\r\n"); delay(300); Serial2.print("AT+CMGD=1\r\n"); delay(300); Serial.print("Thiet lap xong."); Serial2.print("AT+CMGDA=\“DEL LL\”\r\n"); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 62 PHỤ LỤC delay(2000); } void SIM_CALL(String phone) { Serial2.println("ATD" + phone + ";"); // Goi dien delay(10000); // Sau 10s Serial2.println("ATH"); // Ngat cuoc goi delay(2000); } void SIM_SEND_SMS(String phone, String content) { Serial2.print("AT+CSCS=\"GSM\"\r\n"); delay(500); Serial2.print("AT+CMGF=1\r\n"); delay(500); Serial2.print("AT+CMGS=\""); Serial2.print(phone); Serial2.print("\"\r"); delay(500); Serial2.print(content); delay(500); Serial2.print((char)26); delay(1000); Serial.println("da gui SMS"); } void REPORT_SEND_SMS() { Serial.println("GUI SMS CANH BAO CO NGUOI LA QUET THE"); SIM_SEND_SMS(sodienthoai,"PHAT HIEN CO NGUOI QUET THE"); REPORT_SMS_SENDED = true; SMS_TIMEOUT = 0; } void REPORT_PIR_SEND_SMS() { Serial.println("GUI SMS CANH BAO CO NGUOI LA TRONG NHA"); SIM_SEND_SMS(sodienthoai,"PHAT HIEN CO NGUOI TRONG NHA"); REPORT_SMS_SENDED = true; SMS_TIMEOUT = 0; } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 63 ... an toàn Từ thực tiễn trên, nhóm em định lựa chọn đề tài ? ?Thi? ??t kế thi công mô hình khóa điện tử có giám sát từ xa sử dụng GSM RFID? ?? để góp phần hạn chế tối đa mát tài sản Hệ thống sử dụng điều... cấp vấn đề đáng lo ngại thế,” Thi? ??t kế thi cơng mơ hình khóa điện tử có giám sát từ xa sử dụng GSM RFID? ?? đưa giải pháp thay hệ thống bảo mật truyền thống Mơ hình sử dụng board Arduino Mega 2560... Nguyễn Thành Dƣơng Lớp: 14141DT3A MSSV: 14141051 Tên đề tài: THI? ??T KẾ VÀ THI CÔNG MƠ HÌNH KHĨA ĐIỆN TỬ CĨ GIÁM SÁT TỪ XA SỬ DỤNG GSM VÀ RFID Tuần/ngày Nội dung Tuần (18/02 - 24/02) Gặp gỡ GVHD trao