Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 74 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
74
Dung lượng
2,55 MB
Nội dung
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