Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 78 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
78
Dung lượng
2,86 MB
Nội dung
Thiết kế mơ hình nhà thơng minh MỤC LỤC MỤC LỤC DANH SÁCH HÌNH ẢNH VÀ BẢNG Chương TỔNG QUAN MƠ HÌNH NHÀ THƠNG MINH 1.1 Định nghĩa nhà thông minh 1.2 Các thành phần hệ thống nhà thông minh .10 1.2.1 Hệ thống chiếu sáng thông minh 11 1.2.2 Hệ thống kiểm soát vào 13 1.2.3 Hệ thống quan sát .14 1.2.4 Hệ thống giải trí đa phương tiện .14 1.2.5 Hệ thống cảm biến, an ninh 15 1.3 Giải pháp tiết kiệm nhà thông minh 15 1.4 Phân loại chế thông minh .15 1.5 Tiêu chuẩn nhà thông minh 16 1.6 Xu hướng tương lai nhà thông minh 17 Chương XÂY DỰNG Ý TƯỞNG MƠ HÌNH VÀ CÁC THIẾT BỊ NHÀ THÔNG MINH 19 Chương GIỚI THIỆU THIẾT BỊ TRONG MƠ HÌNH 21 Sinh viên thực Thiết kế mơ hình nhà thơng minh 3.1 Sơ đồ khối chức .21 3.2 Khối xử lý 21 3.2.1 Giới thiệu Arduino Nano .22 3.2.2 Phần mềm lập trình Arudino IDE .26 3.3 Khối cảm biến 26 3.3.1 Cảm biến vật cản 26 3.3.2 Cảm biến khí gas 28 3.3.3 Cảm biến nhiệt độ, độ ẩm 30 3.3.4 Động RC Servo 32 3.4 Relay trung gian .34 3.4.1 Tìm hiểu chung relay trung gian 34 3.4.2 Cấu tạo nguyên lý làm việc relay trung gian 34 3.4.3 Lựa chọn relay trung gian 35 3.5 Module Wifi ESP8266 36 3.5.1 Thông số kỹ thuật .36 3.5.2 Sơ đồ chân chức chân 37 3.5.3 Phần mềm lập trình 38 3.6 Module RFID RC522 .38 3.6.1 Giới thiệu 3.6.2 Nguyên lý hoạt Module RFID RC522 39 38 Sinh viên thực Thiết kế mô hình nhà thơng minh 3.6.3 Thơng số kĩ thuật: .40 3.6.4 Sơ đồ chân chức chân: 41 3.7 Module SIM800L .42 3.7.1 Giới thiệu 3.7.2 Thông số kỹ thuật .42 3.7.3 Tập lệnh AT 43 3.7.4 Sơ đồ chân chức chân 44 3.8 Sơ đồ tổng quát thiết bị .44 3.9 Cấu trúc mạch in .45 42 Chương CÁC PHẦN MỀM VÀ CHUẨN GIAO TIẾP .46 4.1 Giới thiệu phần mềm Arduino IDE 46 4.1.1 Phần mềm Arduino IDE 46 4.1.2 Phần mềm Visual Studio Code: 49 4.2 Các chuẩn giao tiếp sử dụng hệ thống: 51 4.2.1 Chuẩn giao tiếp SPI: 52 4.2.2 Chuẩn giao tiếp UART-Serial: 53 4.2.3 Chuẩn giao tiếp I2C: 55 4.2.4 Chuẩn giao tiếp Wifi 56 4.3 Chương trình điều khiển 58 4.4 Lưu đồ thuật toán 58 Sinh viên thực Thiết kế mơ hình nhà thơng minh 4.5 Nguyên lý hoạt động 59 Chương THỰC NGHIỆM VÀ KẾT LUẬN 61 5.1 Thi công thực nghiệm 61 5.2 Kết luận 66 PHỤ LỤC .67 Sinh viên thực Thiết kế mơ hình nhà thơng minh DANH SÁCH HÌNH ẢNH VÀ BẢNG Danh sách hình ảnh Hình 1-1 Mơ hình nhà thơng minh Hình 1-2 Các thành phần hệ thống nhà thông minh .11 Hình 1-3 Nhà thơng minh xu hướng tương lai 18 Hình 2-1 Mơ hình tổng qt hệ thống nhà thơng minh 19 Hình 3-1 Sơ đồ khối phần cứng hệ thống nhà thông minh 21 Hình 3-2 Arduino nano 22 Hình 3-3 Sơ đồ chân Arduino nano 24 Hình 3-4 Ảnh minh họa 26 Hình 3-5 Module cảm biến vật cản 27 Hình 3-6 Sơ đồ nguyên lý cảm biến vật cản 28 Hình 3-7 Cảm biến MQ-2 29 Hình 3-8 Cảm biến khí gas MQ-2 30 Hình 3-9 Cảm biến DHT11 31 Hình 3-10 Module DHT11 31 Hình 3-11 Động servo S90 .34 Hình 3-12 Cấu tạo relay 35 Hình 3-13 Module relay 5V kênh .35 Sinh viên thực Thiết kế mô hình nhà thơng minh Hình 3-14 Module Esp8266 v3 36 Hình 3-15 Sơ đồ chân ESP8266 v3 37 Hình 3-16 Module đọc RFID loại thẻ Mifare 39 Hình 3-17 Cấu tạo thẻ Mifare 39 Hình 3-18 Module RFID .41 Hình 3-19 Module SIM800L 42 Hình 3-20 Sơ đồ chân SIM800L 44 Hình 3-21 Tổng quát hệ thống 44 Hình 3-22 Cấu trúc mặt board điều khiển .45 Hình 4-1 Giao diện lệnh để thao tác với chương trình File menu .47 Hình 4-2 Giao diện các lệnh để thao tác với chương trình của Sketch 48 Hình 4-3 Giao diện lệnh để thao tác với chương trình Tool menu .48 Hình 4-4 Giao diện lệnh để thao tác với chương trình Toolbar 49 Hình 4-5 Giao diện sildebar 50 Hình 4-6 Giao diện trình soạn thảo Visual Studio Code 50 Hình 4-7 Giao diện trang Debug .51 Hình 4-8 Các chuẩn giao tiếp 52 Hình 4-9 Kết nối chuẩn giao tiếp SPI 53 Hình 4-10 Mơ hình kết nối Master với nhiều Slave .53 Hình 4-11 Sơ đồ kết nối UART .54 Sinh viên thực Thiết kế mô hình nhà thơng minh Hình 4-12 Giản đồ truyền liệu UART 55 Hình 4-13 Sơ đồ kết nối chuẩn giao tiếp I2C 55 Hình 4-14 Một hệ thống Wifi 57 Hình 4-15 Sơ đồ khối hệ thống nhà thông minh .58 Hình 4-16 Lưu đồ thuật tốn hệ thống nhà thông minh 59 Hình 5-1 Ảnh minh họa thiết kế mơ hình Corel .61 Hình 5-2 Ảnh minh họa thiết kế mơ hình Corel .61 Hình 5-3 Ảnh minh họa mơ hình 62 Hình 5-4 Ảnh minh họa mơ hình 62 Hình 5-5 Ảnh minh họa thi công tủ điện .63 Hình 5-6 Ảnh minh họa chương trình Arduino 63 Hình 5-7 Ảnh minh họa chương trình ESP8266 64 Hình 5-8 Ảnh minh họa chương trình WebServer với Nodejs .64 Hình 5-9 Ảnh minh họa chương trình giao diện Web 65 Hình 5-10 Ảnh minh họa giao diện Web .65 Hình 5-11 Ảnh minh họa mơ hình 65 Hình 5-12 Ảnh minh họa mơ hình 66 Sinh viên thực Thiết kế mơ hình nhà thơng minh Danh sách bảng Bảng 4-1 Tập lệnh AT điều khiển gọi 43 Bảng 4-2 Tập lệnh AT điều khiển tin nhắn 43 Sinh viên thực Thiết kế mơ hình nhà thơng minh Chương TỔNG QUAN MƠ HÌNH NHÀ THƠNG MINH 1.1 Định nghĩa nhà thơng minh Nhà thông minh (tiếng anh "Smart Home") hệ thống nhà thông minh nhà/căn hộ trang bị hệ thống tự động thông minh với bố trí hợp lý, hệ thống có khả tự điều phối hoạt động ngơi nhà theo thói quen sinh hoạt nhu cầu cá nhân gia chủ Chúng ta hiểu nhà thông minh hệ thống chỉnh thể mà đó, tất thiết bị điện tử gia dụng liên kết với thiết bị điều khiển trung tâm phối hợp với để thực chức Các thiết bị đưa cách xử lý tình lập trình trước, điều khiển giám sát từ xa nhằm mục đính cho sống ngày tiện nghi, an toàn góp phần sử dụng hợp lý nguồn tài nguyên Hình 1-1 Mơ hình nhà thơng minh Sinh viên thực Thiết kế mơ hình nhà thơng minh Các thành phần hệ thống nhà thông minh bao gồm cảm biến (như cảm biến nhiệt độ, cảm biến ánh sáng cử chỉ), điều khiển máy chủ thiết bị chấp hành khác Nhờ hệ thống cảm biến, điều khiển máy chủ theo dõi trạng thái bên ngồi nhà để đưa định điều khiển thiết bị chấp hành cách phù hợp nhằm đảm bảo môi trường sống tốt cho người Ngoài ra, với phát triển thiết bị điện tử cá nhân máy tính bảng điện thoại thông minh hạ tầng thông tin ngày tiên tiến internet mạng thông tin di động wifi, 3G, 4G, ngày hệ thống nhà thơng minh cịn cung cấp khả tương tác với người sử dụng thông qua giao diện cảm ứng smart phone cho phép người giám sát điều khiển nhà từ đâu Tùy theo nhu cầu, người sử dụng cấu hình hệ thống theo kịch lập trình hẹn tắt đèn ngủ, quên tắt tivi, kéo rèm cửa sổ… tới nơi làm việc, họ có điều khiển qua điện thoại smartphone để điều khiển từ xa Tùy theo mức độ sử dụng mà mức giá Nhà Thông Minh dao động từ vài triệu đến vài trăm triệu đồng cho nhà 1.2 Các thành phần hệ thống nhà thông minh Các thành phần hệ thống nhà thông minh bao gồm hệ thống cảm biến cảm biến nhiệt độ, cảm biến ánh sáng cử chỉ, điều khiển máy chủ thiết bị chấp hành khác Nhờ hệ thống cảm biến, điều khiển máy chủ theo dõi trạng thái bên ngơi nhà để đưa định điều khiển thiết bị chấp hành cách phù hợp nhằm đảm bảo môi trường sống tốt cho người Sinh viên thực 10 Thiết kế mơ hình nhà thơng minh Hình 5-46 Ảnh minh họa mơ hình Thi cơng tủ điện đấu nối thiết bị Hình 5-5 ảnh minh họa trình Hình 5-47 Ảnh minh họa thi công tủ điện Sinh viên thực 64 Thiết kế mơ hình nhà thơng minh Xây dựng chương trình Arduino Esp8266 Hình 5-6 5-7 ảnh minh họa thực trình Hình 5-48 Ảnh minh họa chương trình Arduino Hình 5-49 Ảnh minh họa chương trình ESP8266 Xây dựng Webserver phần mềm Visual Studio Code Hình 5-8 ảnh minh họa thực trình Sinh viên thực 65 Thiết kế mơ hình nhà thơng minh Hình 5-50 Ảnh minh họa chương trình WebServer với Nodejs Xây dựng giao diện Web phần mềm Visual Studio Code Hình 5-9 5-10 ảnh minh họa thực trình Hình 5-51 Ảnh minh họa chương trình giao diện Web Sinh viên thực 66 Thiết kế mơ hình nhà thơng minh Hình 5-52 Ảnh minh họa giao diện Web Hồn thiện mơ hình Hình 5-11 5-12 ảnh minh họa mơ hình Hình 5-53 Ảnh minh họa mơ hình Hình 5-54 Ảnh minh họa mơ hình Sinh viên thực 67 Thiết kế mơ hình nhà thơng minh 5.2 Kết luận Sau q trình thi cơng thực nghiệm, nhóm hồn thành ý tưởng xây dựng ban đầu như: Điều khiển thiết bị mơ hình nhà thơng minh thơng qua Web nút nhấn Kiểm soát nhiệt độ độ ẩm theo dõi Web hình Oled Vận dụng cảm biến khí Gas module Sim để cảnh báo cháy cho chủ nhà Tích hợp RFID để tăng độ bảo mật nhà trình vào Sinh viên thực 68 Thiết kế mơ hình nhà thơng minh PHỤ LỤC Chương trình Arduino: #include #include #include #define SH_165 // Load #define INH_165 // Enable #define SCK_165 // Clock #define SO_165 // Data #define SDA_595 #define LATCH_595 #define SCK_595 #define Gara_Door #define Living_Door 10 #define Kitchen_Window 11 #define BedRoom_Window 12 #define Living_Window 13 //IR - blue #define DHT11_PIN A2 //- Black #define Gas A3 //- Brown #define DHTTYPE DHT11 DHT dht(DHT11_PIN, DHTTYPE); Servo Gara_Door_Servo, Living_Door_Servo, Kitchen_Window_Servo, Living_Window_Servo; byte Input_Value1, Input_Value2; String Serial_Data = ""; unsigned long time; int Old_State = 1; int Old_State_Output1 = 0; int Old_State_Output2 = 0; int State_Array[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; void Reset_Servo() { BedRoom_Window_Servo.write(75); Living_Window_Servo.write(150); Gara_Door_Servo.write(0); Kitchen_Window_Servo.write(90); Living_Door_Servo.write(90); } byte Read_Button() { digitalWrite(SH_165, LOW); delayMicroseconds(5); digitalWrite(SH_165, HIGH); delayMicroseconds(5); digitalWrite(SCK_165, HIGH); digitalWrite(INH_165, LOW); byte Incoming1 = shiftIn(SO_165, SCK_165, LSBFIRST); byte Incoming2 = shiftIn(SO_165, SCK_165, LSBFIRST); digitalWrite(INH_165, HIGH); return Incoming1, Incoming2; } void Set_Output(String Output1, String Output2) { digitalWrite(LATCH_595, LOW); shiftOut(SDA_595, SCK_595, MSBFIRST, Output2.toInt()); shiftOut(SDA_595, SCK_595, MSBFIRST, Output1.toInt()); digitalWrite(LATCH_595, HIGH); } void Send_Data(String Command, String Value1, String Value2) { StaticJsonDocument data; data["Value1"] = Value1; data["Value2"] = Value2; Sinh viên thực 69 BedRoom_Window_Servo, Thiết kế mơ hình nhà thông minh } Serial.print(Command); Serial.print("\r"); serializeJson(data, Serial); Serial.print("\r"); void Execute_Data(String data) { DynamicJsonDocument Data(256); deserializeJson(Data, data); String Command = Data["Command"]; String Value1 = Data["Value1"]; String Value2 = Data["Value2"]; if (Command.compareTo("Control") == 0) { int Output_Buffer = 0; if (Value1.compareTo("0") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 1; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1 + Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 1; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1 - Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("1") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 2; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1 + Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 2; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1 - Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("2") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 32; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1 + Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 32; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1 - Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("3") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 128; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1 + Output_Buffer), String(Old_State_Output2)); Sinh viên thực 70 Thiết kế mơ hình nhà thơng minh Old_State_Output1 = Old_State_Output1 + Output_Buffer; Send_Data("Response", Value1, Value2); } } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 128; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1 - Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; else if (Value1.compareTo("4") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 4; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1 + Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 4; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1 - Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("5") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 8; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1 + Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 8; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1 - Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("6") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 8; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1), String(Old_State_Output2 + Output_Buffer)); Old_State_Output2 = Old_State_Output2 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 8; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1), String(Old_State_Output2 - Output_Buffer)); Old_State_Output2 = Old_State_Output2 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("7") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 64; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1), String(Old_State_Output2 + Output_Buffer)); Old_State_Output2 = Old_State_Output2 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Sinh viên thực 71 Thiết kế mơ hình nhà thơng minh Output_Buffer = 64; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1), String(Old_State_Output2 - Output_Buffer)); Old_State_Output2 = Old_State_Output2 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("8") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 32; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1), String(Old_State_Output2 + Output_Buffer)); Old_State_Output2 = Old_State_Output2 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 32; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1), String(Old_State_Output2 - Output_Buffer)); Old_State_Output2 = Old_State_Output2 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("9") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 16; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1), String(Old_State_Output2 + Output_Buffer)); Old_State_Output2 = Old_State_Output2 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 16; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1), String(Old_State_Output2 - Output_Buffer)); Old_State_Output2 = Old_State_Output2 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("10") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { Output_Buffer = 128; State_Array[Value1.toInt()] = 1; Set_Output(String(Old_State_Output1), String(Old_State_Output2 + Output_Buffer)); Old_State_Output2 = Old_State_Output2 + Output_Buffer; Send_Data("Response", Value1, Value2); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { Output_Buffer = 128; State_Array[Value1.toInt()] = 0; Set_Output(String(Old_State_Output1), String(Old_State_Output2 - Output_Buffer)); Old_State_Output2 = Old_State_Output2 - Output_Buffer; Send_Data("Response", Value1, Value2); } else; } else if (Value1.compareTo("11") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { State_Array[Value1.toInt()] = 1; BedRoom_Window_Servo.write(180); } else if (Value2.compareTo("OFF" ) == && State_Array[Value1.toInt()] == 1) { State_Array[Value1.toInt()] = 0; BedRoom_Window_Servo.write(75); } else; } else if (Value1.compareTo("12") == 0) { if (Value2.compareTo("ON") == && State_Array[Value1.toInt()] == 0) { State_Array[Value1.toInt()] = 1; Living_Window_Servo.write(75); Sinh viên thực 72 Thiết kế mơ hình nhà thơng minh } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { State_Array[Value1.toInt()] = 0; Living_Window_Servo.write(150); } else; } } else if (Value1.compareTo("13") == && State_Array[Value1.toInt()] == 0) { if (Value2.compareTo("ON") == 0) { State_Array[Value1.toInt()] = 1; Gara_Door_Servo.write(90); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { State_Array[Value1.toInt()] = 0; Gara_Door_Servo.write(0); } else; } else if (Value1.compareTo("14") == && State_Array[Value1.toInt()] == 0) { if (Value2.compareTo("ON") == 0) { State_Array[Value1.toInt()] = 1; Kitchen_Window_Servo.write(0); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { State_Array[Value1.toInt()] = 0; Kitchen_Window_Servo.write(90); } else; } else if (Value1.compareTo("15") == && State_Array[Value1.toInt()] == 0) { if (Value2.compareTo("ON") == 0) { State_Array[Value1.toInt()] = 1; Living_Door_Servo.write(0); } else if (Value2.compareTo("OFF") == && State_Array[Value1.toInt()] == 1) { State_Array[Value1.toInt()] = 0; Living_Door_Servo.write(90); } else; } else; else if (Command.compareTo("IR") == 0) { int Output_Buffer = 0; if (State_Array[5] == 0) { Output_Buffer = 8; State_Array[5] = 1; Set_Output(String(Old_State_Output1 + Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 + Output_Buffer; Send_Data("Arduino", "5", "ON"); } else if (State_Array[5] == 1) { Output_Buffer = 8; State_Array[5] = 0; Set_Output(String(Old_State_Output1 - Output_Buffer), String(Old_State_Output2)); Old_State_Output1 = Old_State_Output1 - Output_Buffer; Send_Data("Arduino", "5", "OFF"); } else; } else if (Command.compareTo("Reset") == 0) { Set_Output("0", "0"); Reset_Servo(); memset(State_Array, 0, sizeof(State_Array)); Old_State_Output2 = 0; Old_State_Output1 = 0; } else if (Command.compareTo("RFID") == 0) { if (Value1.compareTo("53c98c19") == 0) { Send_Data("RFID", "", ""); } Sinh viên thực 73 Thiết kế mơ hình nhà thông minh else { } } else ; } void Upload() { if ((unsigned long)(millis() - time) > 1000) { time = millis(); float h = dht.readHumidity(); float t = dht.readTemperature(); Send_Data("Upload", String(h), String(t)); } } void Emergency() { if (digitalRead(Gas) != Old_State) { if (digitalRead(Gas) == 0) { Old_State = 0; BedRoom_Window_Servo.write(180); Kitchen_Window_Servo.write(0); Living_Window_Servo.write(75); Set_Output("0", "248"); Send_Data("Emergency", "", ""); } else { Old_State = 1; delay(10000); Set_Output("0", "0"); Reset_Servo(); memset(State_Array, 0, sizeof(State_Array)); Old_State_Output2 = 0; Old_State_Output1 = 0; } } else ; } void setup() { Serial.begin(115200); pinMode(LATCH_595, OUTPUT); pinMode(SCK_595, OUTPUT); pinMode(SDA_595, OUTPUT); pinMode(SH_165, OUTPUT); pinMode(INH_165, OUTPUT); pinMode(SCK_165, OUTPUT); pinMode(SO_165, INPUT); pinMode(Gas, INPUT); Gara_Door_Servo.attach(Gara_Door); Living_Door_Servo.attach(Living_Door); Kitchen_Window_Servo.attach(Kitchen_Window); BedRoom_Window_Servo.attach(BedRoom_Window); Living_Window_Servo.attach(Living_Window); delay(2000); Set_Output("0", "0"); Reset_Servo(); memset(State_Array, 0, sizeof(State_Array)); Send_Data("InitArduino", "", ""); delay(250); time = millis(); } void loop() { //Upload(); Emergency(); if (Serial.available() > 0) { char Buffer_Data = Serial.read(); if (String(Buffer_Data).compareTo("{") == 0) { Serial_Data = ""; Serial_Data = Serial_Data + Buffer_Data; } Sinh viên thực 74 Thiết kế mơ hình nhà thơng minh else if (String(Buffer_Data).compareTo("}") == 0) { Serial_Data = Serial_Data + Buffer_Data; Execute_Data(Serial_Data); } else Serial_Data = Serial_Data + Buffer_Data; } } Input_Value1, Input_Value2 = Read_Button(); Chương trình ESP #include #include #include #include #include #include #include #include #include #include #define SS_PIN D8 #define RST_PIN D1 #define IR_Sensor D2 MFRC522 RFID(SS_PIN, RST_PIN); MFRC522::MIFARE_Key key; // client.connect("esp8266mcu-smart.herokuapp.com"); extern "C" { #include "user_interface.h" } SerialCommand sCmd; char host[] = "172.20.10.3"; int port = 3000; extern String RID; extern String Rfull; SocketIOClient client; unsigned long timer; int Old_State = 1; String dump_byte_array(byte *buffer, byte bufferSize) { String ID_RFID = ""; for (byte i = 0; i < bufferSize; i++) { ID_RFID = ID_RFID + String(buffer[i], HEX); } return ID_RFID; } void Transfer_Data(String Command, String Value1, String Value2) { DynamicJsonDocument Data(256); Data["Command"] = Command; Data["Value1"] = Value1; Data["Value2"] = Value2; serializeJson(Data, Serial); Serial.println(); } void Read_Sensor() { if (digitalRead(IR_Sensor) != Old_State) { if (digitalRead(IR_Sensor) == 0) { Old_State = 0; Transfer_Data("IR", "", ""); } else Old_State = 1; } else; } Sinh viên thực 75 Thiết kế mơ hình nhà thông minh void Read_RFID() { if (RFID.PICC_IsNewCardPresent()) { if (RFID.PICC_ReadCardSerial()) { String ID_RFID_Tag = ""; ID_RFID_Tag = dump_byte_array(RFID.uid.uidByte, RFID.uid.size); Transfer_Data("RFID", ID_RFID_Tag, ""); RFID.PICC_HaltA(); } } } void setup() { SPI.begin(); RFID.PCD_Init(); for(byte i = 0; i < 6; i++){ key.keyByte[i] = 0xFF; } Serial.begin(115200); WiFiManager wifiManager; wifiManager.autoConnect("ESP8266-SmartHome", "12345678"); client.connect(host, port); if (!client.connect(host, port)) { return; } if (client.connected()) { client.send("Esp_Connection", "message", "Connected!!!!"); } sCmd.addDefaultHandler(defaultCommand); } void loop() { Read_Sensor(); Read_RFID(); sCmd.readSerial(); if (client.monitor()) { if (RID == "Server") { StaticJsonDocument Data; deserializeJson(Data, Rfull); String V1 = Data["Address"]; String V2 = Data["State"]; Transfer_Data("Control", V1, V2); } } } if (!client.connected()) { client.connect(host, port); } unsigned long a = millis() - timer; if (a > 30000) { timer = millis(); client.connect(host, port); client.send("Esp_Connection", "message", "Connected!!!!"); } void defaultCommand(String command) { char *json = sCmd.next(); client.send(command, (String) json); } Chương trình WebServer var express = require('express'); var app = express(); app.set('view engine', 'ejs'); Sinh viên thực 76 Thiết kế mơ hình nhà thông minh app.set('views', './views'); app.use(express.static('public')); var Save_Data = {State0 : "OFF", State1 : "OFF", State2 : "OFF", State3 : "OFF", State4 : "OFF", State5 : "OFF", State6 : "OFF", State7 : "OFF", State8 : "OFF", State9 : "OFF", State10 : "OFF", State11 : "OFF", State12 : "OFF", State13 : "OFF", State14 : "OFF", State15 : "OFF"} var State = [Save_Data.State0, Save_Data.State1, Save_Data.State2, Save_Data.State3, Save_Data.State5, Save_Data.State6, Save_Data.State7, Save_Data.State8, Save_Data.State9, Save_Data.State10, Save_Data.State11, Save_Data.State12, Save_Data.State13, Save_Data.State14, Save_Data.State15] var server = require("http").Server(app); var io = require("socket.io")(server); var esp; server.listen(process.env.PORT||3000, function () { console.log("Start Server"); }); io.on("connection", function (socket) { socket.emit("Initilize", State); console.log("Đã có người kết nối Server"); socket.on("disconnect", function () { if(socket.id == esp){ socket.broadcast.emit("Esp_Disconnection", esp); console.log("ESP8266 ngắt kết nối"); } }); socket.on("Send_Data", function (data) { io.sockets.emit("Server", data); console.log(data); }); socket.on("Response", function (data) { State[parseInt(data.Value1)]=data.Value2; socket.broadcast.emit("Response", data); console.log(data); }); socket.on("Arduino", function (data) { socket.broadcast.emit("Arduino", (data)); if(data.State == "OFF") { State[parseInt(data.Address)]="OFF"; } else{ State[parseInt(data.Address)]="ON"; } console.log(data); }); socket.on("Esp_Connection", function (data) { socket.broadcast.emit("Esp_Temp", (data)); esp = socket.id; console.log("ESP8266 kết nối"); }); socket.on("Emergency", function (data) { socket.broadcast.emit("Emergency", (data)); }); socket.on("Safe", function (data) { socket.broadcast.emit("Safe", (data)); }); socket.on("Upload", function (data) { socket.broadcast.emit("Upload", (data)); }); socket.on("RFID", function (data) { console.log("RFID") socket.broadcast.emit("RFID", (data)); Sinh viên thực 77 Save_Data.State4, Thiết kế mơ hình nhà thơng minh }); socket.on("InitArduino", function (data) { socket.broadcast.emit("InitArduino", (data)); for(var i = 0; i < 15 ; i ++){ State[i] == "OFF" } }); }); app.get('/', function (req, res) { res.render('home'); }); Sinh viên thực 78 ... Sinh viên thực Thiết kế mơ hình nhà thơng minh Chương TỔNG QUAN MƠ HÌNH NHÀ THƠNG MINH 1.1 Định nghĩa nhà thông minh Nhà thông minh (tiếng anh "Smart Home") hệ thống nhà thông minh nhà/ căn hộ trang... khối hệ thống nhà thông minh .58 Hình 4-16 Lưu đồ thuật tốn hệ thống nhà thông minh 59 Hình 5-1 Ảnh minh họa thiết kế mơ hình Corel .61 Hình 5-2 Ảnh minh họa thiết kế mơ hình Corel... thực Thiết kế mơ hình nhà thơng minh DANH SÁCH HÌNH ẢNH VÀ BẢNG Danh sách hình ảnh Hình 1-1 Mơ hình nhà thơng minh Hình 1-2 Các thành phần hệ thống nhà thông minh .11 Hình 1-3 Nhà