Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 82 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
82
Dung lượng
755,16 KB
Nội dung
Thiết kế mơ hình nhà thơng minh MỤC LỤC Sinh viên thực DANH SÁCH HÌNH ẢNH VÀ BẢNG Danh sách hình ảnh 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 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 nhà theo thói quen sinh hoạt nhu cầu cá nhân gia chủ Chúng ta hiểu ngơi 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 tồn góp phần sử dụng hợp lý nguồn tài ngun Hình 1-1 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 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 Hình 1-2 Các thành phần hệ thống nhà thông minh 1.2.1 Hệ th ống ch iếu sáng th ông minh Các thiết bị chiếu sáng như: bóng đèn sợi đốt, đèn neon, đèn led, đèn ngủ, đèn trang trí sử dụng nhiều Vì phối hợp chiếu sáng không hợp lý dẫn tới bị "ô nhiễm" ánh sáng Ngồi ra, việc chiếu sáng cịn gây lãng phí điện, giảm tuổi thọ thiết bị Bên cạch số lượng đèn dùng để chiếu sáng lớn, gia chủ gặp bất tiện nhỏ việc bật tắt, điều chỉnh độ sáng cho phù hợp Hệ thống chiếu sáng tích hợp chung với hệ thống khác tách riêng để điều khiển độc lập Các giải pháp nhằm tối ưu hóa hệ thống giúp người dùng điều khiển dễ dàng Các giải pháp kết hợp tính đến tự động hóa tới mức tối đa Các đèn phòng thiết kế với nối thiết bị khác phịng quạt thơng gió ánh sáng thiết kế điều khiển theo tình trạng chủ nhà, theo mùa, kết hợp với âm nhạc, tiểu cảnh, thác nước phịng (nếu có) Tồn hệ thống tự động điều khiển trạng thái tối ưu cho hòa cảnh sử dụng cụ thể Ví dụ: Chỉ cần ấn phím, tương ứng với chế độ định trước, đèn chiếu sáng bật 100%, đèn trang trí bật với 75% công suất, che cửa sổ khép lại (các thông sô dễ dàng thay đổi theo thực tế yêu cầu cụ thể chủ nhà) Cơng dụng cho phép kiến trúc sư tạo kịch ảnh sáng thiết kế nội thất cho hoạt động khác phu thuộc chủ nhà (ví dụ như: hội, tiệc, xem phim, ) I Những yếu tố hệ thống chiếu sáng thơng minh a Điều khiển phím Cách đơn giản để khiểm soát ánh sáng nhà bạn, công tắt thông thường việc điều khiển trở nên đơn giản thích thú nhiều Ví dụ: Bạn cần khỏi nhà, thay phải tắt hết tất đèn phòng, bạn cần ấn nút "tạm biệt" bàn phím điều khiển, tất thiết bị tự động tắt b Điều khiển qua smartphone, ipad Điều khiển màu sắc, ánh sáng mờ tối nhiều với smartphone Cũng cơng tắt tường, người dùng sử dụng hệ điều hành android, ios để bật tắt, mở lên xuống chí thay đổ màu sắc đèn nhà c Thiết lập ánh sáng tự động, điều chỉnh thời gian Người dùng thiết lập điều khiển ánh sáng theo mong muốn Người dùng thiết lập ánh sáng thiết bị cảm biến hồng ngoại, hệ thống relay, dimmer điều chình độ sáng, hay thiết lập ánh sáng theo thời gian II Một số chế độ hoạt động a Chế độ chủ vắng nhà Chế độ người chủ vắng nhà lập trình hệ thống nhà thông minh, cho phép tự động kích hoạt hệ thống nhà người chủ vắng nhà Ví dụ: số đèn tắt-mở thời gian ngắn hay mà tự động đóng hay mở thời gian thích hợp b Chế độ ăn tối Hệ thống đèn phòng ăn tự động điều chỉnh ánh sáng cho phù hợp với khơng khí buổi ăn tối c Chế độ tiệc liên hoan Hệ thống thông minh tự động chiếu sáng điều chỉnh ánh sáng khu vực chế độ nhạc sơi động phù hợp với khơng khí buổi tiệc d Chế độ xem phim Hệ thống đèn phịng giải trí, chiếu phim điều chỉnh ánh sáng dể tạo khơng khí dễ chịu thoải mái xem Hệ thống tự động dóng vào tùy thuộc vào thời gian ngày 1.2.2 Hệ th ống kiểm soát vào Khi gia chủ vắng nhà, việc kiểm soát hệ thống vào nhà quan trọng, giúp đề phịng trộm, tiết kiệm lượng Ngơi nhà thơng minh cung cấp hệ tống kiểm sốt vào cho phép chủ nhà quản lý cấp quyền "đăng nhập" cho thành viên gia đình vào người thân Hệ thống vào phòng lắp đặt khóa vân tay khóa phím nhằm nhận dạng người nhà khách để cấp quyền "đăng nhập" Ngồi ra, cịn dùng hệ thống nhận diện khuân mặt hay giọng nói tùy vào phòng riêng người 1.2.3 Hệ th ống quan sát Hệ thống quan sát giúp việc kiểm soát an ninh, người vào/ra nhà giúp cho gia chủ nhận diện khách nhanh chóng thơng qua hệ thống camera Với hệ thống camera, ngóc ngách nhà ln giám sát 24/7 Chủ nhà giám sát ngơi nhà mình, hay xem làm khơng có nhà Smartphone, máy tính bảng từ xa thống qua wifi, 3G, 4G Hệ thống chng hình nhà thơng minh bao gồm đầu nhận hình đặt phịng khác phịng ngủ cho phép người dùng nói chuyện, nhìn hình ảnh người khách đến nhà 1.2.4 Hệ th ống giải trí đa ph ương tiện Ngơi nhà nơi sinh hoạt gia đình gồm nhiều hệ thể hệ lại có nhu cầu giải trí khác Do đó, hệ thống giải trí đa phương tiện cung cấp cho thành viên hoạt động giải trí phù hợp Giải pháp âm tiết kiệm nhiều thời gian giải trí, quản lý bảo trì hệ thống âm thanh, với nguồn nhạc ta thưởng thức âm nhạc độc lập nhiều khu riêng biệt Tất việc phải làm lựa chọn nguồn nhạc album, ca sĩ, ca khúc mà bạn yêu thích tư bảng điều khiểm âm gắn tường, điều khiển tư xa trực tiếp từ smartphone Với thiết kế linh hoạt gọn nhẹ, hệ thống cho phép người dùng thưởng thức ca khúc yêu thích từ vị trí nhà 1.2.5 Hệ thống cảm biến, an ninh Hệ thống cảm biến thành phần quan trọng hệ thống ngơi nhà, cảm biến có nhiệm vụ gửi thông số đo xử lý trung tâm đểcó giải pháp phù hợp với gói liệu xử ly tình tương ứng Các cảm biến cảm biến nhiệt độ, độ ẩm, cảm biến gas, cảm biến áp suất, cảm biến hồng ngoại, cảm biến chuyển động Các cảm biến chuyển động hệ thống chiếu sáng kích hoạt tự động trở thành hệ thống chống trộm Khi có nguy bị đột nhập, thiết bị cảnh báo chỗ chuông báo động thống báo smartphone Tất cửa sổ trang bị cảm biến từ để thống báo tình trạng đóng mở cửa Khi hệ thống an ninh kích hoạt, số cửa sổ mở hệ thống cảnh báo chỗ còi hú thống báo smartphone 1.3 Giải pháp tiết kiệm nhà thông minh Nhà thông giúp bạn tiết kiệm chi phí sinh hoạt gia đình thiết bị điện có mức tiêu thụ điện thấp đồng thời chúng quản lý hiệu thiết bị điện khác nhà Chẳng hạn thiết bị điện nhà tự động tắt phát khơng có người nhà, đèn tự động tắt phòng đủ ánh sáng, máy lạnh tắt bạn mở cửa sổ hay tự điều chỉnh nhiệt độ khuya nhờ tránh lãng phí điện đáng kể 1.4 Phân loại chế thơng minh Có thể phân chia làm ba loại chế hoại động sau: Cơ chế nhận diện: chế nhận diện cho phép ghi nhớ đặc điểm cài đặt sẵn nhớ, trường hợp làm việc nhận diện xảy không trùng khớp, hệ thống từ chối phụ vụ thơng báo Ví dụ như: cổng, cửa gara mở với xe có biển số đăng kí với hệ thống, cửa tự động nhận diện vân tay mở người, khoảng thời gian • 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 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 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 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 số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 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_W indow_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, SCK595, 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; BedRoom_Window_Servo, 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)); Old_State_Output1 = Old_State_Output1 + Output_Buffer; Send_Data("Response", Valuel, 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) { 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); } 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", "", ""); } 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) Old_State = 0; BedRoom_Window_Servo.write(180); Kitchen_Window_Servo.write(0); Living_W indow_S ervo.write(75); Set_Output("0", "248"); Send_Data("Emergenéy","", ""); } 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_W indow_S ervo.attach(Kitchen_W indow); BedRoom_Window_Servo.attach(BedRoom_Window); Living_W indow_Servo attach(Living_W indow); 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; } == 0) { 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 DynamicJsonDocument Data(256); Data["Command"] = Command; Data["Value1"] = Value1; Data["Value2"] = Value2; serializeJson(Data, Serial); Serial.println(); } Command, 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; } String Value1, String Value2) { 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'); app.set('views', './views'); app.use(express.static('public')); var Save_Data = {State0 : "OFF", Statel : "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.State4, Save_Data.State 5, 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.State 14, Save_Data.State 15] 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", íunction (data) { io.sockets.emit("Server", data); console.log(data); }); socket.on("Response", function (data) { State [parseInt(data V alue 1)]=data.V alue2; 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", íunction (data) { socket.broadcast.emit("Esp_Temp", (data)); esp = socket.id; console.log("ESP8266 kết nối"); }); socket.on("Emergency", íunction (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)); }); socket.on("InitArduino", íunction (data) { socket.broadcast.emit("InitArduino", (data)); for(var i = 0; i < 15 ; i ++){ State[i] == "OFF" } }); }); app.get('/', function (req, res) { res.render('home'); }); ... 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à. .. độ 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... kiệm nhà thông minh Nhà thông giúp bạn tiết kiệm chi phí sinh hoạt gia đình thiết bị điện có mức tiêu thụ điện thấp đồng thời chúng quản lý hiệu thiết bị điện khác nhà Chẳng hạn thiết bị điện nhà