Luận Văn 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

74 52 0
Luận Văn 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

Đ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

TR NG H SPKT TP H C NG HÒA XÃ H I CH NGH A VI T NAM CHÍ MINH KHOA I N- I N T B MỌN I N T CL P-T CÔNG NGHI P ậ Y SINH DO - H NH PHÚC o0o -Tp HCM, ngày 05 tháng 07 n m 2019 NHI M V H tên sinh viên: Nguy n Thành D ÁN T T NGHI P ng MSSV: 14141051 Tr n V nh S n MSSV: 14141266 i n t công nghi p Chuyên ngành: H đào t o: i h c quy Khóa: 2014 I TểN Mã ngành: 141 Mã h : L p: 14141DT3 TÀI: THI T K VÀ THI CƠNG MƠ HÌNH KHịA I N T GIÁM SÁT T XA S CÓ 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 m 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 u n 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 u n giám sát thi t b nhà có h tr Google Assistant”, đ án t t nghi p, tr -H ng HSPKT TpHCM, 2018 ng d n s d ng Module sim900-MLAB (http://mlab.vn/huong-dan-su- dung-module-sim900.html) - Nguyen Dinh Phu, Truong Ngoc Anh, giáo trình vi x lý , Xu t b n 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 u 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 CÁN B H NG D N H NG D N: PGS.TS Nguy n Thanh H i BM I N T ii CÔNG NGHI P – YSINH TR B NG H SPKT TP H CHệ MINH KHOA I N- I N T 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 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 v đ 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 v đ tài s th c hi n Tìm hi u v linh ki n s s d ng Tìm hi u v giao ti p gi a module Sim v i Arduino V s đ kh i n i dung t ng 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 c s lý thuy t, thi t k nguyên lý t ng kh i Hoàn thành giao ti p (g i sms) gi a 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 CÓ GIÁM 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 gi a RFID Arduino Tu n (15/04 - 21/04) Hoà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) Tu n 12 (06/05 12/05) Tu n 13(13/05 19/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 T ng h p code toàn m ch Vi t báo cáo Báo cáo ti n đ v i GVHD 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 tr Chúng em xin cam đoan đ tài chúng em th c hi n d a tài li u 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 hi n đ tài Tr n V nh S n Nguy n ThƠnh D v ng L IC M N Trong trình th c hi n đ án t t nghi p, chúng em đư nh n đ c nhi u s 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, c ng nh chia s nhi u kinh nghi m quý báu, t o u ki n t t nh t đ chúng em hoàn thành t t đ tài Chúng em c ng xin c m n Th y, Cô khoa i n i n t đư t o u ki n t t nh t đ chúng em hoàn thành t t đ tài Và xin c m n t t c 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 s giúp đ c a m i ng i nh ng th i gian th c hi n ch 15 tu n, kinh nghi m h n ch nên chúng em khơng tránh đ c nh ng 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 hoàn thi n t t đ tài h n 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 hi n đ tài Tr n V nh S n Nguy n ThƠnh D vi ng M CL 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 IC 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 TV 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 Ch C C 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 u 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 Ch ng trình 34 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 qu đ t đ c 40 5.1.2 K t qu th c nghi m 40 5.3 NH N XÉT 45 5.3.1 u 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 a c m bi n PIR HC-SR501 Hình 2.2 Hình nh nguyên lý ho t đ ng c a c m bi n PIR Hình 2.3 Hình nh s đ chân c a c m bi n PIR Hình 2.4 Hình nh s đ k t n i c a 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 gi a 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 c a mơ hình 17 Hình 3.2 S đ nguyên lý c a kh i u n arduino 19 Hình 3.3 S đ nguyên lý c a 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 c 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 b 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 c a 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 Hình 5.4 Hình Hình 5.5 Hình Hình 5.6 Hình Hình 5.7 Hình Hình 5.8 Hình Hình 5.9 Hình nh m ch báo đ ng ho t đ ng 42 nh module Sim g i tin nh n c nh báo qu t th sai 42 nh hình LCD tr ng thái qu n lý 43 nh LCD ch đ thêm th 43 nh LCD ch n ch đ xóa th 44 nh LCD yêu c u nh p m t kh u c ch n ch đ đ i m t kh u 44 nh tin nh n c nh báo PIR phát hi n 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 ... module RFID RC522 [7] 1.2 M C TIÊU Thi t k thi công mô hình u n giám sát khóa ch ng tr m thơng minh Có th giám sát t xa qua m ng vi n thông (tin nh n) u n tr c ti p t ma tr n phím 4x4, th RFID. .. 5.3 Hình Hình 5.4 Hình Hình 5.5 Hình Hình 5.6 Hình Hình 5.7 Hình Hình 5.8 Hình Hình 5.9 Hình nh m ch báo đ ng ho t đ ng 42 nh module Sim g i tin nh n c nh báo qu t th sai 42 nh hình LCD... yêu c u có m t thi t b thông minh h n giúp b o v tài s n đ c an toàn h n T th c ti n trên, nhóm em quy t đ nh l a ch n đ tài Thi t k thi cơng mơ hình khóa n t có giám sát t xa s d ng GSM RFID

Ngày đăng: 16/11/2019, 15:12

Từ khóa liên quan

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

Tài liệu liên quan