Thiết kế và thi công hệ thống giám sát, điều khiển các thiết bị điện trong nhà thông qua App Android màn hình cảm ứng dùng mạng Lora và wifi

132 7 0
Thiết kế và thi công hệ thống giám sát, điều khiển các thiết bị điện trong nhà thông qua App Android  màn hình cảm ứng dùng mạng Lora và wifi

Đ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

Khi công nghệ ngày càng phát triển, nhu cầu đời trong đời sống của con ngườisẽ ngày càng cao. Những thiết bị công nghệ sẽ là một phần không thể thiếu trong cuộcsống. Đặc biệt, ai cũng muốn xây dựng cho mình một tổ ấm an toàn và tiện ích nhất.Chính vì thế, một hệ thống điều khiển các thiết bị trong nhà từ xa sẽ là một giải pháptiện lợi để con người sử dụng trong ngôi nhà của mình.Giải pháp điều khiển các thiết bị phổ biến ngày nay đó là điều khiển trực tiếpbằng nút nhấn, công tắc cơ... Thay vì phải đến trực tiếp các công tắc để bậttắt thiếtbị trong nhà hay đi hàng trăm mét để điều khiển một thiết bị bơm ngoài vườn... thìlúc này chúng ta có thể điều khiển nó từ xa, đặc biệt hơn có thể sử dụng smartphoneđể làm điều này.Đề tài tài “Thiết kế và thi công hệ thống giám sát, điều khiển các thiết bị điệntrong nhà thông qua App Android màn hình cảm ứng dùng mạng Lora và Wifi” Sẽgiải quyết vấn đề đó. Các thiết bị có thể được giám sát và điều khiển từ xa bằng điệnthoại chỉ cần điện thoại và bộ điều khiển trung tâm có kết nối internet hoặc bằng mànhình cảm ứng. Bên cạnh đó còn có thể giám sát được các thông số như nhiệt độ, độẩm, độ ẩm đất... Khi không có internet, thiết bị ở các bộ điều khiển con vẫn có thểđược điều khiển từ xa thông qua mạng Lora, một mạng truyền thông không dây tầmxa được ứng dụng rộng rãi trong các lĩnh vực IoT(Internet of Things).

BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN – ĐIỆN TỬ BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH - ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG HỆ THỐNG GIÁM SÁT, ĐIỀU KHIỂN CÁC THIẾT BỊ ĐIỆN TRONG NHÀ THƠNG QUA APP ANDROID & MÀN HÌNH CẢM ỨNG DÙNG MẠNG LORA VÀ WIFI GVHD: ThS Võ Đức Dũng SVTH: Nguyễn Ngọc Nhiệm - 16141218 Trương Tuấn Anh Tp Hồ Chí Minh – 08/2020 - 16141105 TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o -Tp HCM, ngày 04 tháng 08 năm 2020 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Chuyên ngành: Hệ đào tạo: Khóa: Nguyễn Ngọc Nhiệm Trương Tuấn Anh Kỹ thuật Điện Tử, Truyền Thông Đại học quy 2016 MSSV: 16141218 MSSV: 16141105 Mã ngành: 141 Mã hệ: Lớp: 16141DT I TÊN ĐỀ TÀI: THIẾT KẾ VÀ THI CÔNG HỆ THỐNG GIÁM SÁT, ĐIỀU KHIỂN CÁC THIẾT BỊ ĐIỆN TRONG NHÀ THÔNG QUA APP ANDROID & MÀN HÌNH CẢM ỨNG DÙNG MẠNG LORA VÀ WIFI II NHIỆM VỤ Các số liệu ban đầu: - Các loại vi điều khiển: Arduino Uno, Arduino Nano, Esp32 WROOM Các loại Module: Lora SX1278 UART, RTC DS1307 Màn hình hiển thị: LCD_TFT SPI 3.2inch, LCD 20X4, LCD 16X2 Cảm biến độ ẩm đất, cảm biến nhiệt độ, độ ẩm DHT11 Ngõ điều khiển: Relay, transistor, diode, led Nguồn: Adapter 5V-2A, Adapter 5V-1A Nội dung thực hiện: - Tìm hiểu tham khảo tài liệu, giáo trình, nội dung liên quan đến đề tài Tìm hiểu hình cảm ứng TFT, thiết kế giao diện giám sát điều khiển Thiết kế thi cơng phần cứng hế thống Viết chương trình giao tiếp ứng dụng Android, Firebase điều khiển trung tâm Viết chương trình để giao tiếp Arduino, Lora module cảm biến Nghiên cứu xây dựng ứng dụng Android Chạy thử nghiệm, hiệu chỉnh đánh giá kết Viết luận văn báo cáo Bảo vệ đồ án tốt nghiệp III NGÀY GIAO NHIỆM VỤ: 10/03/2020 IV NGÀY HOÀN THÀNH NHIỆM VỤ: 03/07/2020 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN:ThS VÕ ĐỨC DŨNG CÁN BỘ HƯỚNG DẪN BM ĐIỆN TỬ CÔNG NGHIỆP – Y SINH i TRƯỜNG ĐH SPKT TP HỒ CHÍ MINH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM KHOA ĐIỆN-ĐIỆN TỬ ĐỘC LẬP - TỰ DO - HẠNH PHÚC BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH o0o -Tp HCM, ngày 04 tháng 08 năm 2020 LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Nguyễn Ngọc Nhiệm MSSV: 16141218 Họ tên sinh viên: Trương Tuấn Anh MSSV: 16141105 Lớp: 16141TD2B Tên đề tài: Thiết kế thi công hệ thống giám sát, điều khiển thiết bị điện nhà thông qua App Android & hình cảm ứng dùng mạng Lora Wifi Tuần/ngày Nội dung Tuần (30/3 – 5/4) Gặp GVHD để nghe phổ biến yêu cầu làm đồ án, tiến hành chọn đồ án Tuần (6/4 – 12/4) GVHD tiến hành xét duyệt đề tài Tuần (13/4 – 19/4) Viết đề cương chi tiết lịch trình đồ án tốt nghiệp Tuần (20/4 – 26/4) Tìm hiểu đề tài lựa chọn thiết bị phù hợp Tuần (27/4 – 3/5) Thiết kế sơ đồ khối giải thích chức khối Tuần (4/5 – 10/5) Tính tốn thiết kế sơ đồ ngun lý cho hệ thống Tuần (11/5 – 17/5) Viết chương trình, kiểm tra hoạt động Arduino với module Lora SX1278, module ESP8266 NodeMCU, cảm biến Tuần (18/5 – 24/5) Thiết kế PCB thi công phần cứng Tuần (25/5 – 31/5) Hoàn thiện phần cứng Tuần 10 (1/6 – 7/6) Xác nhận GVHD Tìm hiểu cơng nghệ Lora, giao thức UART, Wifi Kiểm tra lắp ráp mơ hình ii Tuần 11 (8/6 – 14/6) Thiết kế lưu đồ giải thuật viết chương trình điều hiển hệ thống Tuần 12 (15/6 – 21/6) Thiết kế app Android, truyền nhận liệu Firebase với App Esp8266 Tuần 13 (22/6 – 28/6) Chạy thử nghiệm toàn hệ thống Kiểm tra sửa chữa lỗi Tuần 14 (29/6 – 5/7) Tuần 15 (6/7 – 12/7) Tuần 16 (13/7 – 19/7) Viết báo cáo, làm silde báo cáo Hoàn thiện in báo cáo Báo cáo với GVHD GV HƯỚNG DẪN (Ký ghi rõ họ tên) iii LỜI CAM ĐOAN Đề tài chúng em tự thực dựa vào số tài liệu trước khơng chép từ tài liệu hay cơng trình có trước Người thực đề tài Nguyễn Ngọc Nhiệm Trương Tuấn Anh iv LỜI CẢM ƠN Lời đầu tiên, chúng em xin phép chân thành cảm ơn thầy cô khoa Điện – Điện tử giảng dạy cho chúng em kiến thức bổ ích để hơm ứng dụng hoàn thiện đồ án tốt nghiệp Đặc biệt, chúng em xin gửi lời cảm ơn sâu sắc đến Thầy Võ Đức Dũng tận tình hướng dẫn, giúp đỡ nhóm thực đề tài Thầy ln tạo điều kiện, giải đáp thắc mắc, khó khăn để nhóm hồn thiện đề tài cách tốt Chúng em xin gửi lời đồng cảm ơn đến bạn lớp 16141DT chia trao đổi kiến thức kinh nghiệm quý báu thời gian thực đề tài Ngoài ra, chúng em xin gởi lời cảm ơn thật nhiều đến gia đình, người thân, người khích lệ, tạo động lực giúp nhóm hồn thành tốt đề tài Xin chân thành cảm ơn! Người thực đề tài Nguyễn Ngọc Nhiệm Trương Tuấn Anh v MỤC LỤC NHIỆM VỤ i LỊCH TRÌNH ii LỜI CAM ĐOAN iii LỜI CẢM ƠN .v MỤC LỤC vi LIỆT KÊ HÌNH VẼ ix LIỆT KÊ BẢNG xii TÓM TẮT xiii Chương TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU 1.3 NỘi DUNG NGHIÊN CỨU 1.4 GIỚI HẠN 1.5 BỐ CỤC .3 Chương CƠ SỞ LÝ THUYẾT .4 2.1 GIỚI THIỆU VỀ MẠNG LORA 2.2 GIỚI THIỆU PHẦN CỨNG .5 2.2.1 Module thu phát RF UART Lora SX1278 2.2.2 Vi điều khiển 2.2.3 Module Cảm Biến Nhiệt Độ - Độ Ẩm DHT11 11 2.2.4 Module cảm biến độ ẩm đất 12 2.2.5 Module thời gian thực RTC- DS1307 13 2.2.6 Màn hình hiển thị 13 2.2.7 Tiếp điểm Relay 5v 17 2.3 GIỚI THIỆU CÁC CHUẨN TRUYỀN THÔNG 18 vi 2.3.1 Chuẩn truyền thông UART 18 2.3.2 Chuẩn giao tiếp I2C 19 2.3.3 Chuẩn giao tiếp SPI 20 2.3.4 Truyền thông không dây wifi 21 Chương TÍNH TỐN VÀ THIẾT KẾ 23 3.1 GIỚI THIỆU 23 3.2 TÍNH TỐN VÀ THIẾT KẾ HỆ THỐNG 23 3.2.1 Thiết kế sơ đồ khối hệ thống 23 3.2.2 Tính toán thiết kế mạch điện 25 Chương THI CÔNG HỆ THỐNG .44 4.1 GIỚI THIỆU 44 4.2 THI CÔNG HỆ THỐNG 44 4.2.1 Thi công board mạch 44 4.2.2 Lắp ráp kiểm tra 52 4.3 ĐÓNG GÓI VÀ THI CƠNG MƠ HÌNH 56 4.3.1 Đóng gói điều khiển 56 4.3.2 Thi công mơ hình 58 4.4 LẬP TRÌNH HỆ THỐNG .61 4.4.1 Lưu đồ giải thuật 61 4.4.4 Giới thiệu tính Realtime Database Firebase 75 4.5 VIẾT TÀI LIỆU HƯỚNG DẪN .77 Chương KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 79 5.1 GIỚI THIỆU 79 5.2 KẾT QUẢ ĐẠT ĐƯỢC 79 5.3 KẾT QUẢ THỰC NGHIỆM 80 5.3.1 Bộ điều khiển trung tâm 80 5.3.2 Bộ điều khiển phụ 83 vii 5.3.3 Điều khiển giám sát thiết bị từ xa điện thoại 85 5.3.4 Điều khiển giám sát thiết bị trực tiếp điều khiển 91 5.3.5 Điều khiển thiết bị giám sát liệu khơng có internet 92 5.4 NHẬN XÉT VÀ ĐÁNH GIÁ 93 5.4.1 Nhận xét 93 5.4.2 Đánh giá 94 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 96 6.1 KẾT LUẬN 96 6.2 HƯỚNG PHÁT TRIỂN 96 TÀI LIỆU THAM KHẢO 98 PHỤ LỤC .100 viii LIỆT KÊ HÌNH VẼ Hình 2.1 Cấu tạo mạng Lora .4 Hình 2.2 Module E32-TTL-100 RF Hình 2.3 Ảnh minh họa arduino Uno Hình 2.4 Arduino Nano .8 Hình 2.5 Module wifi Esp32 WROOM 10 Hình 2.6 Module cảm biến nhiệt độ, độ ẩm DHT11 .11 Hình 2.7 Cảm biến đo độ ẩm đất .12 Hinh 2.8 Module thời gian thực RTC – DS1307 13 Hình 2.9 Màn hình LCD TFT 3.2inch ILI9341 .14 Hình 2.10 Ảnh minh họa LCD20x4 15 Hình 2.11 Ảnh minh họa LCD 16x2 .16 Hình 2.12 Module chuyển đổi I2C cho LCD 17 Hình 2.13 Kết nối I2C với LCD 17 Hình 2.14 Relay 5v 18 Hình 2.15 Kết nối UART hai thiết bị 19 Hình 2.16 Sơ đồ giao tiếp I2C thiết bị 20 Hình 2.17 Sơ đồ giao tiếp SPI thiết bị 21 Hình 2.18 Mạng wifi .22 Hình 3.1 Sơ đồ khối hệ thống 23 Hình 3.2 Mạch kích Relay .25 Hình 3.3 Khối ngõ cơng suất .27 Hình 3.4 Khối cảm biến 28 Hình 3.5 Khối điều khiển hiển thị 29 Hình 3.6 Mạch chuyển bus tín hiệu 29 Hình 3.7 Sơ đồ nguyên lý khối thu phát Lora 30 ix PHỤ LỤC createButtonCircle(Den_NC, ILI9341_GREEN); } else { createButtonCircle(Den_NC, ILI9341_RED); } if (quatNC) { createButtonCircle(Quat_NC, ILI9341_GREEN); } else { createButtonCircle(Quat_NC, ILI9341_RED); } break; "Bat", 2, ILI9341_WHITE, 280, 98, 35, 1, "Tat", 2, ILI9341_WHITE, 280, 98, 35, 1, "Bat", 2, ILI9341_WHITE, 280, 188, 35, 1, "Tat", 2, ILI9341_WHITE, 280, 188, 35, 1, case 2: if (denV) { createButtonCircle(Den_V, "Bat", 2, ILI9341_WHITE, 280, 98, 35, 1, ILI9341_GREEN); } else { createButtonCircle(Den_V, "Tat", 2, ILI9341_WHITE, 280, 98, 35, 1, ILI9341_RED); } if (bomV) { createButtonCircle(Bom_V, ILI9341_GREEN); } else { createButtonCircle(Bom_V, ILI9341_RED); } break; "Bat", 2, ILI9341_WHITE, 280, 188, 35, 1, "Tat", 2, ILI9341_WHITE, 280, 188, 35, 1, case 3: if (denK) { createButtonCircle(Den_K, "Bat", 2, ILI9341_WHITE, 280, 98, 35, 1, ILI9341_GREEN); } else { createButtonCircle(Den_K, "Tat", 2, ILI9341_WHITE, 280, 98, 35, 1, ILI9341_RED); } if (quatK) { createButtonCircle(Quat_K, ILI9341_GREEN); } else { createButtonCircle(Quat_K, "Bat", 2, ILI9341_WHITE, 280, 188, 35, 1, "Tat", 2, ILI9341_WHITE, 280, 188, 35, 1, BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 104 PHỤ LỤC ILI9341_RED); } break; } } void recvWithStartEndMarkers() { static boolean recvInProgress = false, recvInProgress1 = false; static byte ndx = 0, ndx1 = 0; char startMarker = ''; char startMarker1 = '('; char endMarker1 = ')'; char rc; while (Serial.available() > && newData == false) { rc = Serial.read(); if (recvInProgress == true) { if (rc != endMarker) { receivedChars[ndx] = rc; ndx++; if (ndx >= numChars) { ndx = numChars - 1; } } else { receivedChars[ndx] = '\0'; // terminate the string recvInProgress = false; newData = true; ndx = 0; } } else if (rc == startMarker) { recvInProgress = true; } if (recvInProgress1 == true) { if (rc != endMarker1) { receivedChars1[ndx1] = rc; ndx1++; if (ndx1 >= numChars) { ndx1 = numChars - 1; } } else { receivedChars1[ndx1] = '\0'; // terminate the string recvInProgress1 = false; ndx1 = 0; newData_cd = true; } } else if (rc == startMarker1) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 105 PHỤ LỤC recvInProgress1 = true; } } } void update_th() { if (idx >= 10) { idx = idx - 10; secon++; if (secon < 6) { h1 = dht.readHumidity(); t1 = dht.readTemperature(); h2 = h2 + h1; t2 = t2 + t1; } else { h = h2 / 5; t = t2 / 5; t2 = 0; h2 = 0; secon = 0; } } } ISR(TIMER1_OVF_vect) { TCNT1 = 40536; idx++; } CODE ESP32 #include #include //#include #include #include #include #include #include "html.h" #include FirebaseData firebaseData; FirebaseJson json; #define RXD2 16 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 106 PHỤ LỤC #define TXD2 17 #define LED1 22 #define LED2 23 #define LEDWF const char *ssid = "LORA SYSTEM"; const char *password = "11111111"; WebServer server(80); // khởi tạo sever port 80 //String lamp_garden = "0", lamp1 = "0", lamp_k = "0"; //String pump_garden = "0", fan1 = "0", pump_k = "0"; String lamp_garden, lamp1, lamp_k; String pump_garden, fan1, pump_k; String tren, duoi, mod; String strGateWay; String temp, tem_cd; boolean led1 = false, led2 = false, led3 = false, led4 = false, led5 = false, led6 = false, mod1; const byte numChars = 32; char receivedChars[numChars]; char receivedChars1[numChars]; char receivedChars2[numChars]; boolean newData = false; boolean newDataBtn = false; boolean newData_th = false; boolean newData_doam = false; boolean isHand = false; boolean wifi = false, temp_wf, wifi2 = true; // use i for recv nhietdo int i = 0; int t, h; void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(2, OUTPUT); pinMode(LEDWF, OUTPUT); Serial.begin(9600); Serial2.begin(9600); connectwf(); //connectWifi(); Firebase.begin("nhiem-5d2c9.firebaseio.com", "GYqZOvQQE8AasNWGNtLdcVp6LcxVQt09pXUSwJK2"); wifi = WiFi.isConnected(); translateStrBool(); //reset tat ca digitalWrite(LED1, led1); digitalWrite(LED2, led2); // digitalWrite(LEDWF, wifi); temp_wf = wifi; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 107 PHỤ LỤC temp = strToSend() + ">"; tem_cd = strToSend2(); recvWithStartEndMarkers(0); updateNewData(0); // recvWithStartEndMarkers(1); // updateNewData(1);; update_th(); digitalWrite(LEDWF, wifi); Serial2.print(strToSend()); Serial2.print(">"); Serial2.print("(00000)"); Serial.print("(00000)"); delay(9000); // recvWithStartEndMarkers(1); // updateNewData(1); Serial.print(strToSend()); Serial.print(wifi); Serial.print(">"); // getDataFireBase(); } void loop() { server.handleClient(); wifi = WiFi.isConnected(); if (temp_wf != wifi) { digitalWrite(LED1, led1); digitalWrite(LED2, led2); Serial.print(strToSend()); Serial.print(wifi); Serial.print(">"); temp_wf = wifi; } digitalWrite(LEDWF, wifi); if (!wifi && wifi2) { connectwf(); Serial2.print("(00000)"); Serial.print("(00000)"); wifi2 = false; } if (wifi) { wifi2 = true; } else { temp = String(strToSend() + ">"); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 108 PHỤ LỤC } translateStrBool(); recvWithStartEndMarkers(0); if (isHand) { temp = String(strToSend() + ">"); isHand = false; } recvWithStartEndMarkers(1); if (isHand) { temp = String(strToSend() + ">"); isHand = false; } // recvWithStartEndMarkers_th(); updateNewData(0); updateNewData(1); update_th(); update_doam(); getDataFireBase(); guidulieu_cd(); if ((temp != String(strToSend() + ">")) && !isHand && (wifi == true)) { Serial.println("\nĐang so sánh:"); digitalWrite(LED1, led1); digitalWrite(LED2, led2); Serial2.print(strToSend()); Serial2.print(">"); Serial.print(strToSend()); Serial.print(wifi); Serial.print(">"); temp = strToSend() + ">"; } } CODE ARUDINO NANO KHỐI ĐIỀU KHIỂN PHỤ #include #include #include #define TX_PIN #define RX_PIN 11 10 #define LED3 #define LED4 #define BTN1 #define BTN2 #define BTN3 #define BTN4 BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 109 PHỤ LỤC #define BTN5 #define BTN6 #define CMH 12 SoftwareSerial loraNode(RX_PIN, TX_PIN); LiquidCrystal_I2C lcd(0x3f, 20, 4); boolean led1 = false, led2 = false, led3 = false, led4 = false, led5 = false, led6 = false; String temp; const byte numChars = 32; char receivedChars[numChars]; boolean newData = false; int mod = 1; int value, percent; //doam volatile int idx = 0; int second = 0; void setup() { Serial.begin(9600); pinMode(BTN1, INPUT_PULLUP); pinMode(BTN2, INPUT_PULLUP); pinMode(BTN3, INPUT_PULLUP); pinMode(BTN4, INPUT_PULLUP); pinMode(BTN5, INPUT_PULLUP); pinMode(BTN6, INPUT_PULLUP); pinMode(CMH, INPUT_PULLUP); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(A0, INPUT); value = analogRead(A0); percent = map(value, 0, 1023, 0, 100); loraNode.begin(9600); temp = strToSend(); implementData(); // gửi cho node cập nhật trạng thái loraNode.print(temp); Serial.print(temp); lcd.init(); lcd.backlight(); cli(); TCCR1A = 0; TCCR1B = 0; TIMSK1 = 0; TCCR1B |= (1 && newData == false) { //while (Serial.available() > && newData == false) { rc = loraNode.read(); //rc = Serial.read(); if (recvInProgress == true) { if (rc != endMarker) { receivedChars[ndx] = rc; ndx++; if (ndx >= numChars) { ndx = numChars - 1; } } else { receivedChars[ndx] = '\0'; // terminate the string recvInProgress = false; ndx = 0; newData = true; } } else if (rc == startMarker) { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 112 PHỤ LỤC recvInProgress = true; } } } boolean inputcd(int chan) { if (digitalRead(chan) == 0) { delay(20); if (digitalRead(chan) == 0) { while (digitalRead(chan) == 0); return true; } } return false; } void doamdat() { if (idx >= 10) { idx = idx - 10; second++; if (second == 2) { second = 0; value = analogRead(A0); percent = map(value, 0, 1023, 0, 100); } } } void hienthi_lcd() { if ( mod == 0) { lcd.setCursor(8, 0); lcd.print("HOME"); lcd.setCursor(0, 1); lcd.print("DEN 1:"); if (led1 == 1) lcd.print(" BAT else lcd.print(" TAT "); lcd.setCursor(0, 2); lcd.print("DEN 2:"); if (led2 == 1) lcd.print(" BAT else lcd.print(" TAT "); lcd.setCursor(0, 3); lcd.print(" "); } else if (mod == 1) { lcd.setCursor(8, 0); "); "); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 113 PHỤ LỤC lcd.print("VUON"); lcd.setCursor(0, 1); lcd.print("DEN:"); if (led3 == 1) lcd.print(" BAT ") ; else lcd.print(" TAT "); lcd.setCursor(12, 1); lcd.print("BOM:"); if (led4 == 1) lcd.print(" BAT"); else lcd.print(" TAT"); lcd.setCursor(0, 2); lcd.print("CAI: "); lcd.setCursor(6, 2); lcd.print("50-70"); lcd.setCursor(13, 2); lcd.print("CD: "); lcd.print("TD"); // lcd.setCursor(0, 3); lcd.print("DO AM DAT: "); if (percent < 100) { lcd.print(percent); lcd.setCursor(13, 3); lcd.print(" %"); } else { lcd.print(percent); lcd.setCursor(14, 3); lcd.print(" %"); } } else if (mod == 2) { lcd.setCursor(8, 0); lcd.print("KHO "); lcd.setCursor(0, 1); lcd.print("DEN :"); if (led5 == 1) lcd.print(" BAT else lcd.print(" TAT "); lcd.setCursor(0, 2); lcd.print("QUAT:"); if (led6 == 1) lcd.print(" BAT else lcd.print(" TAT "); lcd.setCursor(0, 3); lcd.print(" "); } ") ; "); } ISR (TIMER1_OVF_vect) { TCNT1 = 40536; idx++; BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 114 PHỤ LỤC } CODE ARDUINO NANO KHỐI ĐIỀU KHIỂN PHỤ #include #include #include #define TX_PIN #define RX_PIN 11 10 #define LED5 #define LED6 #define BTN1 #define BTN2 #define BTN3 #define BTN4 #define BTN5 #define BTN6 #define CMH 12 SoftwareSerial loraNode(RX_PIN, TX_PIN); LiquidCrystal_I2C lcd(0x27, 16, 2); boolean led1 = false, led2 = false, led3 = false, led4 = false, led5 = false, led6 = false; String temp; int mod = 2; const byte numChars = 32; char receivedChars[numChars]; boolean newData = false; int h=100; void setup() { Serial.begin(9600); pinMode(BTN1, INPUT_PULLUP); pinMode(BTN2, INPUT_PULLUP); pinMode(BTN3, INPUT_PULLUP); pinMode(BTN4, INPUT_PULLUP); pinMode(BTN5, INPUT_PULLUP); pinMode(BTN6, INPUT_PULLUP); pinMode(CMH, INPUT_PULLUP); pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT); loraNode.begin(9600); temp = strToSend(); lcd.init(); lcd.backlight(); } void loop() { BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 115 PHỤ LỤC h=100; if (inputcd(BTN1)) { led1 = !led1; mod=0; } if (inputcd(BTN2)) { led2 = !led2; mod=0; } if (inputcd(BTN3)) { led3 = !led3; mod=1; } if (inputcd(BTN4)) { led4 = !led4; mod=1; } if (inputcd(BTN5)) { led5 = !led5; mod=2; } if (inputcd(BTN6)) { led6 = !led6; mod=2; } if (inputcd(CMH)) { mod++; if (mod > 2) mod = 0; Serial.println(mod); } if (temp != strToSend()) { temp = strToSend(); implementData(); // gửi cho node cập nhật trạng thái loraNode.print(temp); Serial.print(temp); } recvWithStartEndMarkers(); showData(); hienthi_lcd(); } String strToSend() { return ""; } void implementData() { digitalWrite(LED5, led5); digitalWrite(LED6, led6); BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 116 PHỤ LỤC } void showData() { if (newData == true) { // đọc liệu từ node gửi r cập nhật trạng thái led1 = ((String)receivedChars[0]).toInt(); led2 = ((String)receivedChars[1]).toInt(); led3 = ((String)receivedChars[2]).toInt(); led4 = ((String)receivedChars[3]).toInt(); led5 = ((String)receivedChars[4]).toInt(); led6 = ((String)receivedChars[5]).toInt(); temp = strToSend(); implementData(); newData = false; } } void recvWithStartEndMarkers() { static boolean recvInProgress = false; static byte ndx = 0; char startMarker = ''; char rc; while (loraNode.available() > && newData == false) { // while (Serial.available() > && newData == false) { rc = loraNode.read(); // rc = Serial.read(); //Serial.print(rc); if (recvInProgress == true) { if (rc != endMarker) { receivedChars[ndx] = rc; ndx++; if (ndx >= numChars) { ndx = numChars - 1; } } else { receivedChars[ndx] = '\0'; // terminate the string recvInProgress = false; ndx = 0; newData = true; } } else if (rc == startMarker) { recvInProgress = true; } } } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 117 PHỤ LỤC boolean inputcd(int chan) { if (digitalRead(chan) == 0) { delay(20); if (digitalRead(chan) == 0) { while (digitalRead(chan) == 0); return true; } } return false; } void hienthi_lcd() { if ( mod == 0) { lcd.setCursor(0, 0); lcd.print("DEN 1:"); if (led1 == 1) lcd.print(" ON ") ; else lcd.print(" OFF "); lcd.setCursor(0, 1); lcd.print("DEN 2:"); if (led2 == 1) lcd.print(" ON "); else lcd.print(" OFF "); } else if (mod == 1) { lcd.setCursor(0, 0); lcd.print("DEN VUON:"); if (led3 == 1) lcd.print(" ON ") ; else lcd.print(" OFF"); lcd.setCursor(0, 1); lcd.print("BOM VUON:"); if (led4 == 1) lcd.print(" ON "); else lcd.print(" OFF"); } else if (mod == 2) { lcd.setCursor(0, 0); lcd.print("DEN KHO :"); if (led5 == 1) lcd.print(" ON ") ; else lcd.print(" OFF"); lcd.setCursor(0, 1); lcd.print("QUAT KHO :"); if (led6 == 1) lcd.print(" ON "); else lcd.print(" OFF"); } } BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP- Y SINH 118

Ngày đăng: 07/06/2021, 08:36

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

Tài liệu liên quan