Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 75 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
75
Dung lượng
4,76 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆPNGÀNH ĐIỆN TỬ CÔNG NGHIỆP 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 GVHD:Nguyễn Thanh Hải SVTH:Nguyễn Thành Dương MSSV: 14141051 SVTH:Trần Vỉnh Sơn MSSV: 14141266 SKL 0 6 Tp Hồ Chí Minh, tháng 7/2019 an 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 an - 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 an 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) 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 Tuần (01/04 - 07/04) Tìm hiểu giao tiếp Arduino phím ma trận Viết code cho phím ma trận Arduino iii an 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 an 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 an 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 cịn hạn chế nên chúng em khơng tránh thiếu sót Chúng em mong quý Thầy /Cô, người thân, bạn bè cảm thông chân thành góp ý để chúng em hồ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 an 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 .2 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 .7 2.2.4 Vi điều khiển .7 2.2.5 Công nghệ RFID .9 2.3 GIAO TIẾP I2C 12 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 an 3.2.2 Thiết kế chi tiết 17 3.2.3 Sơ đồ nguyên lý toàn mạch .27 Chương THI CƠNG MƠ HÌNH 29 4.1 GIỚI THIỆU 29 4.2 THI CƠNG MƠ HÌNH 29 4.2.1 Danh sách linh kiện 29 4.2.2 Lắp ráp mơ hình 30 4.3 LẬP TRÌNH CHO MƠ HÌNH 33 4.3.1 Lưu đồ chương trình 33 Chương KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 39 5.1 GIỚI THIỆU 39 5.2 KẾT QUẢ 39 5.1.1 Kết đạt 39 5.1.2 Kết thực nghiệm 39 5.3 NHẬN XÉT 44 5.3.1 Ưu điểm 44 5.3.2 Hạn chế 45 5.4 ĐÁNH GIÁ 45 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 46 6.1 KẾT LUẬN 46 6.2 HƯỚNG PHÁT TRIỂN 46 TÀI LIỆU THAM KHẢO 47 PHỤ LỤC 48 viii an 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 .7 Hình 2.7 Hình ảnh Arduino Mega Hình 2.8 Hình ảnh Module RFID RC522 Hình 2.9 Hình ảnh LCD 16x2 11 Hình 2.10 Mạch chuyển giao tiếp LCD 16x2 12 Hình 2.11 Hình ảnh kết nối Master Slave 14 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 15 Hình 3.1 Sơ đồ khối mơ hình 16 Hình 3.2 Sơ đồ nguyên lý khối điều khiển arduino 18 Hình 3.3 Sơ đồ nguyên lý khối giám sát 19 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 20 Hình 3.6 Sơ đồ nguyên lý khối động nút nhấn 21 Hình 3.7 Sơ đồ nguyên lý khối mở khóa 22 Hình 3.8 Sơ đồ nguyên lý mạch mở khóa dùng RFID 23 Hình 3.9 Sơ đồ ngun lý mạch mở khóa dùng ma trận phím 24 Hình 3.10 Sơ đồ nối dây ma trận phím 4x4 24 Hình 3.11 Sơ đồ nguyên lý khối hiển thị 25 Hình 3.12 Hình ảnh module hạ áp LM2596 26 Hình 3.13 Sơ đồ ngun lý mơ hình khóa thơng minh 27 Hình 4.1 Hình ảnh mạch xử lý trung tâm 30 Hình 4.2 Hình ảnh mạch giám sát module sim 30 Hình 4.4 Hình ảnh mạch báo động 31 Hình 4.5 Hình ảnh mơ hình hoàn thiện 32 Hình 4.6 Lưu đồ chương trình tổng qt tồn hoạt động .33 Hình 4.7 Lưu đồ chương trình 34 Hình 4.8 Lưu đồ chương trình thêm thẻ, xóa thẻ đổi pass 35 Hình 4.9 Lưu đồ chương trình kiểm tra ngắt nút nhấn cánh báo PIR 36 Hình 5.1 Hình ảnh hình LCD trạng thái chờ quẹt thẻ 40 Hình 5.2 Hình ảnh LCD quẹt thẻ sai 40 ix an PHỤ LỤC /////////////////////////KHAI BAO BIEN PHIM MATRIX/////////////////////// const byte rows = 4; //số hàng const byte columns = 4; //số cột int holdDelay = 700; int n = 3; // int state = 0; //nếu state =0 ko nhấn,state =1 nhấn thời gian nhỏ , state = nhấn giữ lâu 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}; //Cách nối chân với Arduino 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ảng đọc mã card unsigned char pass_temp[4] = {0, 0, 0, 0}; // Mảng đọc mã card 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() BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 49 PHỤ LỤC { Serial.println("BUTTON DUOC NHAN"); 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 an 50 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 ); // gọi hàm tatled liên tục nhấn nút pinMode(BUTTON_PIN, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), BUTTON_HANDLE_FUNCTION, FALLING ); // gọi hàm tatled liên tục nhấn nút 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; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 51 PHỤ LỤC case STATE_SEND_REPORT: REPORT_SOS_SIM_LED_BUZZER(); 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(); } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 52 PHỤ LỤC else { lcd.clear(); 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]); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 53 PHỤ LỤC if (check_pass_key() == true) { //mo servo va mo khoa 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); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 54 PHỤ LỤC } else { 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++) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 55 PHỤ LỤC pass_temp[u] = 0x00; pass_show[u] = ' '; } 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) { //So sáng phần tử mảng reading_card với mảng master BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 56 PHỤ LỤC if ((readCard[0] == EEPROM.read(i))) //Nếu có phần tử bất kỳ nào khơng phù hợp thỳ thoát vịng lặp, lúc này ta nhận giá trị 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ếu có phần tử bất kỳ nào khơng phù hợp thỳ thoát vịng lặp, lúc này ta nhận giá trị i { 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) { //So sáng phần tử mảng reading_card với mảng master 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ếu có phần tử bất kỳ nào không phù hợp thỳ thoát vòng lặp, lúc này ta nhận giá trị i { 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; } } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 57 PHỤ LỤC 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ếu có phần tử bất kỳ nào khơng phù hợp thỳ thoát vòng lặp, lúc này ta nhận giá trị i { 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); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 58 PHỤ LỤC } void ADD_PASS_KEYBOARD(uint16_t addr_start_save) { 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("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() { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 59 PHỤ LỤC Serial.println("XOA THE RFID"); lcd.setCursor(0, 0); lcd.print("MOI QUET THE XOA"); { 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) { //So sáng phần tử mảng reading_card với mảng master 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ếu có phần tử bất kỳ nào khơng phù hợp thỳ thoát vịng lặp, lúc này ta nhận giá trị 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ếu có phần tử bất kỳ nào khơng phù hợp thỳ thoát vịng lặp, lúc này ta nhận giá trị i { 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() { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 60 PHỤ LỤC 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 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"); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH an 61 PHỤ LỤC delay(300); Serial2.print("AT+CMGD=1\r\n"); delay(300); Serial.print("Thiet lap xong."); Serial2.print("AT+CMGDA=\“DEL ALL\”\r\n"); 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 an 62 an ... 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... 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... 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