BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHĨA LUẬN TỐT NGHIỆP NGÀNH CNKT ĐIỆN TỬ - VIỄN THÔNG THIẾT KẾ, THI CÔNG HỆ THỐNG GIÁM SÁT, CẢNH BÁO VÀ ĐIỀU KHIỂN NHIỆT ĐỘ TỰ ĐỘNG CHO TRẠM THU PHÁT SÓNG DI DỘNG (BTS) GVHD: TH.S GVC TRƯƠNG NGỌC ANH SVTH: PHẠM LÊ HOÀNG MINH NGUYỄN MINH NGỌC SKL010825 Tp Hồ Chí Minh, tháng 7/2023 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO - ĐỒ ÁN TỐT NGHIỆP ĐỀ TÀI: THIẾT KẾ, THI CÔNG HỆ THỐNG GIÁM SÁT, CẢNH BÁO VÀ ĐIỀU KHIỂN NHIỆT ĐỘ TỰ ĐỘNG CHO TRẠM THU PHÁT SÓNG DI DỘNG (BTS) SVTH: MSSV: SVTH: MSSV: Phạm Lê Hoàng Minh 18161109 Nguyễn Minh Ngọc 19161142 Ngành: Công nghệ Kỹ Thuật Điện Tử - Viễn Thông GVHD: ThS GVC Trương Ngọc Anh Tp Hồ Chí Minh, tháng năm 2023 CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc *** -TP Hồ Chí Minh, ngày 22 tháng năm 2023 NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP Họ tên sinh viên: Phạm Lê Hoàng Minh MSSV: 18161109 Nguyễn Minh Ngọc MSSV: 19161142 Ngành: Công nghệ kỹ thuật Điện tử - Viễn Thông Giảng viên hướng dẫn: ThS GVC Trương Ngọc Anh Ngày nhận đề tài: 12/9/2022 Ngày nộp đề tài: 24/12/2022 Tên đề tài: Thiết kế, thi công hệ thống giám sát, cảnh báo điều khiển nhiệt độ tự động cho trạm thu phát sóng di dộng (BTS) Các số liệu, tài liệu ban đầu: Tài liệu chuẩn giao tiếp truyền thông RS485, cách sử dụng ESP32, lập trình Arduino Nội dung thực đề tài: Thiết kế xây dựng hệ giám sát nhiệt độ, độ ẩm để liên tục cập nhật giá trị nhiệt độ, độ ẩm trạm, giám sát cảnh báo cho trạm BTS nhiệt độ vượt ngưỡng thông qua tin nhắn SMS, đồng thời gửi liệu lên ứng dụng điện thoại di động mạng internet, để theo dõi tình trạng hoạt động trạm, điều khiển thiết bị máy lạnh, quạt chng cảnh báo Ngồi ra, máy lạnh hoạt động chế độ tự động luân phiên để đảm bảo nhiệt độ trạm ln mức ổn định Sản phẩm: Mơ hình hệ thống giám sát, điều khiển nhiệt độ trạm BTS gồm khối, khối điều khiển trung tâm, khối đóng ngắt thiết bị điện trạm, khối SIM gửi tin nhắn SMS, khối đo công suất và điện áp thiết bị điện TRƯỞNG NGÀNH GIẢNG VIÊN HƯỚNG DẪN i CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh phúc TP Hồ Chí Minh, ngày 22 tháng năm 2023 LỊCH TRÌNH THỰC HIỆN Họ tên sinh viên 1: Phạm Lê Hoàng Minh MSSV: 18161109 Lớp: 1816CLDT2B Họ tên sinh viên 2: Nguyễn Minh Ngọc MSSV: 19161142 Lớp: 1916CLDT2A Tuần/ngày Nội dung Tuần 1,2 (30/01 – 12/02) Gặp GVHD để nghe phổ biến yêu cầu thực đồ án, tiến hành chọn đề tài, GVHD tiến hành xét duyệt, lựa chọn đề tài Tuần (13/02 – 26/02) Thống tên đề tài, đăng kí và tìm hiểu linh kiện phù hợp Tuần (27/02 – 12/03) Lựa chọn linh kiện kiểm tra module Tuần 5,6(13/03 - 26/03) Tìm hiểu thực truyền liệu chuẩn truyền thơng RS485, tìm hiểu ứng dụng Blynk để đưa liệu lên app Tuần 7, (27/03 – 09/04) Hoàn thành việc truyền liệu module RS485 đưa liệu lên Blynk viết chương 1,2 báo cáo Tuần 9,10 (10/04 – Thiết kế giao diện hiển thị web Blynk app Blynk 23/04) Tuần 11, 12 (24/04- Tiến hành vẽ thi công mạch in ii 07/05) Tuần 13,14 (08/05 – Kiểm tra chỉnh sửa toàn mạch 21/05) Viết báo cáo chương lại Tuần 15 (22/05 – 04/06) Chỉnh sửa hoàn thành toàn báo cáo GIẢNG VIÊN HƯỚNG DẪN iii BẢN NHẬN XÉT KHÓA LUẬN TỐT NGHIỆP (Dành cho giảng viên hướng dẫn) Đề tài: Thiết kế, thi công hệ thống giám sát, cảnh báo và điều khiển nhiệt độ tự động cho trạm thu phát sóng di dộng (BTS) Sinh viên: Phạm Lê Hoàng Minh MSSV: 18161109 Nguyễn Minh Ngọc MSSV: 19161142 Giảng viên hướng dẫn: ThS GVC Trương Ngọc Anh _ Nhận xét bao gồm nội dung sau đây: Tính hợp lý cách đặt vấn đề giải vấn đề; ý nghĩa khoa học thực tiễn: Đặt vấn đề rõ ràng, mục tiêu cụ thể; đề tài có tính mới, cấp thiết; đề tài có khả ứng dụng, tính sáng tạo Phương pháp thực hiện/ phân tích/ thiết kế: Phương pháp hợp lý tin cậy dựa sở lý thuyết; có phân tích đánh giá phù hợp; có tính tính sáng tạo Kết thực hiện/ phân tích và đánh giá kết quả/ kiểm định thiết kế: Phù hợp với mục tiêu đề tài; phân tích đánh giá / kiểm thử thiết kế hợp lý; có tính sáng tạo/ kiểm định chặt chẽ đảm bảo độ tin cậy Kết luận và đề xuất: Kết luận phù hợp với cách đặt vấn đề, đề xuất mang tính cải tiến thực tiễn; kết luận có đóng góp mẻ, đề xuất sáng tạo thuyết phục iv Hình thức trình bày bố cục báo cáo: Văn phong quán, bố cục hợp lý, cấu trúc rõ ràng, định dạng mẫu; có tính hấp dẫn, thể lực tốt, văn trau chuốt Kỹ chuyên nghiệp tính sáng tạo: Thể kỹ giao tiếp, kỹ làm việc nhóm, kỹ chuyên nghiệp khác việc thực đề tài Tài liệu trích dẫn Tính trung thực việc trích dẫn tài liệu tham khảo; tính phù hợp tài liệu trích dẫn; trích dẫn theo dẫn APA Đánh giá sự trùng lặp đề tài Cần khẳng định đề tài có trùng lặp hay khơng? Nếu có, đề nghị ghi rõ mức độ, tên đề tài, nơi công bố, năm công bố đề tài công bố Những nhược điểm thiếu sót, điểm cần bổ sung chỉnh sửa* 10 Nhận xét tinh thần, thái độ học tập, nghiên cứu sinh viên v Đề nghị giảng viên hướng dẫn Ghi rõ: “Báo cáo đạt/ không đạt yêu cầu khóa luận tốt nghiệp kỹ sư, phép/ khơng phép bảo vệ khóa luận tốt nghiệp” Tp HCM, ngày 23 tháng 6, năm 2023 Người nhận xét (Ký ghi rõ họ tên) vi LỜI CAM ĐOAN Sinh viên cam đoan đề tài sinh viên tự thực dựa vào kiến thức tổng quát chun ngành Bên cạnh đó, sinh viên tìm hiểu từ nhiều nguồn tài liệu để hoàn thành đề tài Các kết nghiên cứu kết luận báo cáo trung thực, có chép từ nguồn sinh viên thực đề tài xin hồn tồn chịu trách nhiệm Tp Hồ Chí Minh, ngày tháng năm 2023 Sinh viên thực đề tài (ký tên) Phạm Lê Hoàng Minh Nguyễn Minh Ngọc vii LỜI CẢM ƠN Nhóm chúng em xin gửi lời cảm ơn chân thành và sâu sắc đến Khoa Đào tạo Chất lượng cao, trường Đại học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh với tất lịng biết ơn chúng em sự hỗ trợ và đóng góp thầy trình thực đồ án tốt nghiệp chúng em Đối với thầy Trương Ngọc Anh, chúng em muốn bày tỏ lòng biết ơn chân thành sự tận tâm và kiến thức sâu rộng mà thầy chia sẻ với chúng em Nhờ vào sự dẫn và hướng dẫn từ thầy , chúng em có hội phát triển kỹ nghiên cứu và hiểu biết Những họp và lời khuyên chân thành thầy giúp chúng em hiểu rõ đồ án và hoàn thiện cách tốt Chúng em cảm kích sự kiên nhẫn thầy nghe và giải đáp câu hỏi, đồng thời cung cấp phản hồi và hướng dẫn để chúng em nắm bắt và phát triển ý tưởng Chúng em muốn bày tỏ lòng biết ơn đặc biệt đến sự kiên nhẫn và sự chỉnh sửa giúp chúng em tránh việc đạo văn Chúng em hiểu đồ án tốt nghiệp là cơng trình nghiên cứu chung chúng em, và sự truyền cảm hứng và dẫn thầy giúp chúng em tự tin việc diễn đạt ý tưởng và khám phá cách xác và sáng tạo Cuối cùng, chúng em muốn bày tỏ lòng biết ơn sâu sắc với thầy sự đánh giá cao và hỗ trợ mà thầy dành cho chúng em Chúng em hiểu tất chúng em đạt thiếu sự đồng hành và giúp đỡ thầy Chúng em mãi ghi nhớ và trân trọng kiến thức và kinh nghiệm mà thầy chia sẻ với chúng em, và chúng em hy vọng có hội hợp tác và học hỏi thêm từ thầy tương lai Nhóm em xin chân thành cảm ơn! Sinh viên thực đề tài (ký tên) Phạm Lê Hoàng Minh Nguyễn Minh Ngọc viii Phụ Lục { Serial.print("Temperature: "); Serial.print(temperature); Serial.print("\t"); Serial.print("Humidity: "); Serial.println(humidity); } unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { previousMillis = currentMillis; Serial.print("Current Mode: "); Serial.println(currentMode); currentMode++; if (currentMode > totalModes) { currentMode = 1; Serial.print("Current Mode: "); Serial.println(currentMode); } lcdNeedsUpdate = true; } if (lcdNeedsUpdate) { updateLCD(); lcdNeedsUpdate = false; } if (autorelay) { if (temperature > 40) { Serial.print("Nhiệt độ cao : "); Serial.println(temperature); automatic[5] = 0x0F; automatic[6] = 0x15; automatic[7] = 0xCF; Serial.println("Relay 0,1,2,3 bật"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else { Serial.print("Nhiệt độ ổn định : "); Serial.println(temperature); automatic[5] = 0x0D; automatic[6] = 0X94; automatic[7] = 0x0E; Serial.println("Relay 0,2,3 bật"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); Khoa ĐT CLC – ĐH SPKT TP.HCM 77 Phụ Lục delay(delayTime); Serial.print("Nhiệt độ ổn định : "); Serial.println(temperature); automatic[5] = 0x0E; automatic[6] = 0XD4; automatic[7] = 0x0F; Serial.println("Relay 1,2,3 bật"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); delay(delayTime); } } uint8_t result1; result1 = node1.readInputRegisters(0x0000, 9); if (result1 == node1.ku8MBSuccess) { uint32_t tempdouble = 0x00000000; PZEMVoltage = node1.getResponseBuffer(0x0000) / 10.0; tempdouble = (node1.getResponseBuffer(0x0002) tm_year + 1900); lcd.setCursor(0, 3); lcd.print("Time: "); lcd.print(ptm->tm_hour); lcd.print(':'); if (ptm->tm_min < 10) { lcd.print('0'); } lcd.print(ptm->tm_min); lcd.print(':'); if (ptm->tm_sec < 10) { lcd.print('0'); } lcd.print(ptm->tm_sec); } void showMode2() { lcd.clear(); // Xóa hình Khoa ĐT CLC – ĐH SPKT TP.HCM 79 Phụ Lục uint8_t result = node.readInputRegisters(0x0001, 2); float temperature = float(node.getResponseBuffer(0) / 10.00F); float humidity = float(node.getResponseBuffer(1) / 10.00F); // Hiển thị thông tin chế độ lcd.setCursor(0, 0); lcd.print("Temperature: "); lcd.print(temperature); lcd.write(0xDF); lcd.print("C"); lcd.setCursor(0, 1); lcd.print("Humidity: "); lcd.print(humidity); lcd.print("%"); lcd.setCursor(0, 2); lcd.print("Gas Value:"); lcd.print(gasValue); lcd.print("ppm"); } void showMode3() { lcd.clear(); // Xóa hình // Hiển thị thơng tin chế độ lcd.clear(); lcd.setCursor(0, 0); lcd.print("Ths:Truong Ngoc Anh"); lcd.setCursor(0, 1); lcd.print("Nguyen Minh Ngoc"); lcd.setCursor(0, 2); lcd.print("Pham Le Hoang Minh"); lcd.setCursor(0, 3); lcd.print("Do An Tot Nghiep"); } ❖ Sử dụng thư viện Blynk để thiết lập chương trình với lệnh BLYNK_WRITE giao tiếp với Blynk với mục đích gửi liệu từ ESP32 lên web server để điều khiển công tắc nút nhấn Blynk BLYNK_WRITE(V3) // Executes when the value of virtual pin changes { maylanh1 = param.asInt(); if ((maylanh1 == 1) && (manualmode == 1)) { Blynk.virtualWrite(V2, 1); manual[3] = 0x00; manual[4] = 0xFF; manual[5] = 0x00; manual[6] = 0X8C; manual[7] = 0x3A; Serial.println("Relay đơn bật"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } Khoa ĐT CLC – ĐH SPKT TP.HCM 80 Phụ Lục } else if ((maylanh1 == 1) && (manualmode == 0)) { Blynk.virtualWrite(V2, 0); manual[3] = 0x00; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0XCD; manual[7] = 0xCA; Serial.println("Relay đơn tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((maylanh1 == 0) && (manualmode == 1)) { manual[3] = 0x00; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0XCD; manual[7] = 0xCA; Serial.println("Relay đơn tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } Blynk.virtualWrite(V2, 0); } else if ((maylanh1 == 0) && (manualmode == 0)) { manual[3] = 0x00; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0XCD; manual[7] = 0xCA; Serial.println("Relay đơn tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } Blynk.virtualWrite(V2, 0); } else if ((automode == 1) && (maylanh1 == 1)) { Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } else if ((automode == 1) && (maylanh1 == 0)) { Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } } BLYNK_WRITE(V5) { maylanh2 = param.asInt(); if ((maylanh2 == 1) && (manualmode == 1)) { Blynk.virtualWrite(V6, 1); Khoa ĐT CLC – ĐH SPKT TP.HCM 81 Phụ Lục manual[3] = 0x01; manual[4] = 0xFF; manual[5] = 0x00; manual[6] = 0XDD; manual[7] = 0xFA; Serial.println("Relay đơn bật"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((maylanh2 == 0) && (manualmode == 1)) { Blynk.virtualWrite(V6, 0); manual[3] = 0x01; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0X9C; manual[7] = 0x0A; Serial.println("Relay tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((maylanh2 == 1) && (manualmode == 0)) { Blynk.virtualWrite(V6, 0); manual[3] = 0x01; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0X9C; manual[7] = 0x0A; Serial.println("Relay đơn tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((maylanh2 == 0) && (manualmode == 0)) { Blynk.virtualWrite(V6, 0); manual[3] = 0x01; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0X9C; manual[7] = 0x0A; Serial.println("Relay đơn tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((automode == 1) && (maylanh2 == 1)) { Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } else if ((automode == 1) && (maylanh2 == 0)) { Blynk.virtualWrite(V2, 0); Khoa ĐT CLC – ĐH SPKT TP.HCM 82 Phụ Lục Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } } BLYNK_WRITE(V10) // Executes when the value of virtual pin changes { // Nhận giá trị từ widget number input manualmode = param.asInt(); if ((manualmode == 1) && (automode == 0)) { Blynk.virtualWrite(V11, 1); Blynk.virtualWrite(V8, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((manualmode == 1) && (automode == 1)) { Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 0); Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Blynk.virtualWrite(V15, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((manualmode == 0) && (automode == 0)) { autorelay = false; Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 0); Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Blynk.virtualWrite(V15, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); Khoa ĐT CLC – ĐH SPKT TP.HCM 83 Phụ Lục RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((manualmode == 0) && (automode == 1)) { autorelay = true; Blynk.virtualWrite(V8, 1); Blynk.virtualWrite(V11, 0); } else if ((manualmode == 1) && (automode == 1) && (maylanh1 == 1)) { autorelay = false; Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 0); Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Blynk.virtualWrite(V15, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((manualmode == 1) && (automode == 1) autorelay = false; Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 0); Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Blynk.virtualWrite(V15, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } && (maylanh2 == 1)) { else if ((automode == 1) && (manualmode == 1) && (quat1 == 0)) { autorelay = false; Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 0); Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Khoa ĐT CLC – ĐH SPKT TP.HCM 84 Phụ Lục Blynk.virtualWrite(V15, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((automode == 1) && (manualmode == 1) && autorelay = false; Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 0); Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Blynk.virtualWrite(V15, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } (quat2 == 0)) { } BLYNK_WRITE(V7) // Executes when the value of virtual pin changes { automode = param.asInt(); if ((automode == 1)) { autorelay = true; Blynk.virtualWrite(V8, 1); //isDelayDisabled = true; } else if ((automode == 0)) { //isDelayDisabled = false; autorelay = false; delayTime = 0; Blynk.virtualWrite(V8, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((automode == 1) && (manualmode == 0)) { Khoa ĐT CLC – ĐH SPKT TP.HCM 85 Phụ Lục autorelay = true; Blynk.virtualWrite(V8, 1); Blynk.virtualWrite(V11, 0); } else if ((manualmode == 0) && (automode == 0)) { autorelay = false; Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((automode == 0) && (manualmode == 0)) { Blynk.virtualWrite(V8, 0); Blynk.virtualWrite(V11, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((automode == 1) && (manualmode == 1)) { Blynk.virtualWrite(V8, 0); Blynk.virtualWrite(V11, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((automode == 0) && (manualmode == 1)) { Blynk.virtualWrite(V8, 0); Blynk.virtualWrite(V11, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Khoa ĐT CLC – ĐH SPKT TP.HCM 86 Phụ Lục Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((manualmode == 0) && (maylanh1 == 0) && (maylanh2 == 0) && (automode == 0)) { Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V8, 0); automatic[5] = 0x00; automatic[6] = 0X55; automatic[7] = 0xCB; Serial.println("Relay 0,1,2,3 tắt"); for (k = 0; k < 8; k++) { Serial.print(automatic[k], HEX); Serial.print(" "); RS485Serial_RELAY.write(automatic[k]); } Serial.println(""); } else if ((automode == 1) && (maylanh1 == 1) && Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } else if ((automode == 1) && (maylanh1 == 0) && Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V8, 1); // Turn the widget autorelay = true; } else if ((automode == 1) && (maylanh1 == 1) && Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } (maylanh2 == 1)) { (maylanh2 == 1)) { attached to V2 Off (maylanh2 == 0)) { } BLYNK_WRITE(V12) { quat1 = param.asInt(); if ((quat1 == 1) && (manualmode == 1)) { Blynk.virtualWrite(V14, 1); manual[3] = 0x02; manual[4] = 0xFF; manual[5] = 0x00; manual[6] = 0X2D; manual[7] = 0xFA; Serial.println("Relay đơn bật"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); Khoa ĐT CLC – ĐH SPKT TP.HCM 87 Phụ Lục } } else if ((quat1 == 0) && (manualmode == 1)) { Blynk.virtualWrite(V14, 0); manual[3] = 0x02; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0X6C; manual[7] = 0x0A; Serial.println("Relay tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((quat1 == 1) && (manualmode == 0)) { Blynk.virtualWrite(V14, 0); manual[3] = 0x02; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0X6C; manual[7] = 0x0A; Serial.println("Relay đơn tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((quat1 == 0) && (manualmode == 0)) { Blynk.virtualWrite(V14, 0); manual[3] = 0x02; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0X6C; manual[7] = 0x0A; Serial.println("Relay đơn tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((automode == 1) && (quat1 == 1)) { Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Blynk.virtualWrite(V15, 0); Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } else if ((automode == 1) && (quat1 == 0)) { Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Blynk.virtualWrite(V15, 0); Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } Khoa ĐT CLC – ĐH SPKT TP.HCM 88 Phụ Lục } BLYNK_WRITE(V13) { quat2 = param.asInt(); if ((quat2 == 1) && (manualmode == 1)) { Blynk.virtualWrite(V15, 1); manual[3] = 0x03; manual[4] = 0xFF; manual[5] = 0x00; manual[6] = 0X7C; manual[7] = 0x3A; Serial.println("Relay đơn bật"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((quat2 == 0) && (manualmode == 1)) { Blynk.virtualWrite(V15, 0); manual[3] = 0x03; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0X3D; manual[7] = 0xCA; Serial.println("Relay tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((quat2 == 1) && (manualmode == 0)) { Blynk.virtualWrite(V15, 0); manual[3] = 0x03; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0X3D; manual[7] = 0xCA; Serial.println("Relay đơn tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((quat2 == 0) && (manualmode == 0)) { Blynk.virtualWrite(V15, 0); manual[3] = 0x03; manual[4] = 0x00; manual[5] = 0x00; manual[6] = 0X3D; manual[7] = 0xCA; Serial.println("Relay đơn tắt"); for (j = 0; j < 8; j++) { Serial.print(manual[j], HEX); Serial.print(" "); RS485Serial_RELAY.write(manual[j]); } } else if ((automode == 1) && (quat2 == 1)) { Blynk.virtualWrite(V2, 0); Khoa ĐT CLC – ĐH SPKT TP.HCM 89 Phụ Lục Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Blynk.virtualWrite(V15, 0); Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } else if ((automode == 1) && (quat2 == 0)) { Blynk.virtualWrite(V2, 0); Blynk.virtualWrite(V6, 0); Blynk.virtualWrite(V14, 0); Blynk.virtualWrite(V15, 0); Blynk.virtualWrite(V11, 0); Blynk.virtualWrite(V8, 1); autorelay = true; } } Khoa ĐT CLC – ĐH SPKT TP.HCM 90 S K L 0