File báo cáo đồ án thiết kế hệ thống kiểm soát mực nước sử dụng vi điều khiển esp32 và node-red để lập trình giao diện người dùng .Nguồn : Sinh viên KCN trường ĐH Cần Thơ . Hi vọng sẽ có ích cho các bạn sinh viên cần tham khảo
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC CẦN THƠ KHOA CƠNG NGHỆ BỘ MƠN TỰ ĐỘNG HĨA BÁO CÁO CUỐI KỲ ĐO LƯỜNG VÀ ĐIỀU KHIỂN BẰNG MÁY TÍNH (CT397) Đề tài: TÌM HIỂU CẢM BIẾN SIÊU ÂM VÀ THIẾT KẾ HỆ THỐNG KIỂM SOÁT MỰC NƯỚC Tháng 12/2021 Báo cáo học phần CT397 LỜI CẢM ƠN Trong suốt trình học tập, rèn luyện chúng em nhận quan tâm, hướng dẫn giúp đỡ tận tình thầy, cô giáo Khoa Công nghệ với giúp đỡ từ bạn bè Lời chúng em xin bày tỏ lòng biết ơn sâu sắc đến với Ban giám hiệu Trường Đại học Cần Thơ, Ban chủ nhiệm Khoa Cơng nghệ tận tình giúp đỡ chúng em suốt thời gian học tập trường Và hết, chúng em xin gửi lời cảm ơn đến thầy Nguyễn Khắc Nguyên Mặc dù tình hình dịch bệnh Covid-19 gây nhiều khó khăn trở ngại, thầy tận tâm, tận tình giảng dạy, hướng dẫn chúng em cách tìm tài liệu tham khảo để chúng em hồn thành báo cáo cách tốt Một lần nữa, chúng em xin gửi lời cảm ơn sâu sắc đến thầy Do lượng kiến thức cịn hạn chế nên báo cáo khơng tránh khỏi sai sót, kính mong thầy góp ý, nhận xét để báo cáo hồn thiện SVTH: Nhóm 18 Báo cáo học phần CT397 TĨM TẮT Báo cáo “Đo lường điều khiển máy tính” tìm hiểu, khảo sát cảm biến siêu để từ ứng dụng cảm biến để thiết kế hệ thống đo kiểm soát mực nước SVTH: Nhóm 18 Báo cáo học phần CT397 MỤC LỤC LỜI CẢM ƠN - TÓM TẮT - MỤC LỤC - Danh mục hình: - Danh mục bảng: - Giới thiệu đề tài: .- a Tên mục tiêu đề tài: .- b Các tính bản: - c Phương pháp thực hiện: - - Thực hiện: - a Mơ hình hệ thống: - i Mô tả sơ lược hệ thống: - - ii Sơ đồ tổng quan hệ thống: .- - b Thiết kế phần cứng mạch điện: .- i Mô tả sơ lược hoạt động mạch điện: - - ii Vẽ sơ đồ khối phần cứng mạch điện: - 10 - iii Thiết kế chi tiết: - 10 - iv Sơ đồ nguyên lý tổng hợp toàn mạch: - 12 - c Thiết kế phần mềm điều khiển board nhúng: - 12 i Mô tả chức phần mềm: - 13 - ii Vẽ lưu đồ chương trình chính: .- 13 - iii Giải thích chương trình yếu: - 13 - iv Đoạn code chương trình ( có thích đoạn lệnh, dịng lệnh): - 14 - d Thiết kế phần mềm điều khiển máy tính: .- 21 i Mơ tả chức chính: - 21 - ii Giao diện chương trình: .- 22 - iii Đoạn code chức chính: - 22 - Kết thực hiện: - 23 a Mơ hình thực tế, phần cứng mạch điện (hình ảnh có thích, nhận xét): - 23 b Trình bày kết thực tính đặt hệ thống: - 24 SVTH: Nhóm 18 Báo cáo học phần CT397 i Tính điều khiển trường - 24 - ii Tính điều khiển qua máy tính - 24 - c Nhận xét chung ưu nhược điểm hệ thống: - 24 - d Nêu hướng phát triển: - 25 Tài liệu tham khảo: - 25 Phụ lục: - 25 a Quá trình thực đề tài: - 25 i Kế hoạch thời gian: .- 25 - ii Những thuận lợi khó khăn trình thực kiến nghị: .- 26 - b Danh sách thành viên bảng phân chia công việc: .- 26 c Trả lời câu hỏi:(Phần bổ sung sau báo cáo): .- 26 i Thành viên 1: - 26 - ii Thành viên 2: - 26 - SVTH: Nhóm 18 Báo cáo học phần CT397 Danh mục hình: Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình 1: Sơ đồ khối phần cứng mạch điện - 2: Sơ đồ nguyên lý kết nối module cảm biến .- 3: Sơ đồ nguyên lý kết nối vi điều khiển - 10 4: Sơ đồ nguyên lý kết nối module relay - 10 5: Lưu đồ chương trình - 11 6: Code chương trình tính khoảng cách từ giá trị cảm biến .- 12 7: Giao diện điều khiển node-red - 20 8: Code node-red - 20 9: Giao diện điều khiển adafruit - 21 10: Mơ hình thực tế - 22 - SVTH: Nhóm 18 Báo cáo học phần CT397 Danh mục bảng: Bảng 1: Kế hoạch thời gian thực - 24 Bảng 2: Phân chia công việc thành viên .- 25 - SVTH: Nhóm 18 Báo cáo học phần CT397 Giới thiệu đề tài: a Tên mục tiêu đề tài: ‒ Tên đề tài: Tìm hiểu cảm biến siêu âm thiết kế hệ thống kiểm soát mực nước ‒ Mục tiêu: Ç Tìm hiểu cảm biến siêu âm Ç Thiết kế hệ thống kiểm soát mực nước cảm biến siêu âm Ç Kết nối & điều khiển hệ thống thơng qua máy tính b Các tính bản: ‒ ‒ ‒ ‒ Đo mực nước có bình chứa Tự động bơm nước bình cạn nước Cho phép quan sát mực nước thơng qua máy tính Cho phép bơm nước thơng qua máy tính c Phương pháp thực hiện: ‒ Sử dụng phần mềm lập trình Arduino IDE để lập trình cho phép người dùng thao tác trực tiếp hệ thống Sử dụng phần mềm Node-red để lập trình nhằm cho phép người dùng thao tác thơng qua máy tính Thực hiện: a Mơ hình hệ thống: i Mơ tả sơ lược hệ thống: ‒ Mô tả sơ lược: Sử dụng cảm biến HY-SRF05 để đo hiển thị mực nước thùng chứa, cho người dùng cài đặt mực nước mong muốn thơng qua nút ấn, hình LCD node-red ‒ Chức năng: Ç Tạo hệ thống bơm nước linh hoạt giúp người dùng thể kiểm sốt mức nước thùng chứa Ç Hiển thị mực nước thông qua node-red bật tắt bơm SVTH: Nhóm 18 Báo cáo học phần CT397 ii Sơ đồ tổng quan hệ thống: Hình 1: Sơ đồ tổng quan hệ thống b Thiết kế phần cứng mạch điện: i Mô tả sơ lược hoạt động mạch điện: ‒ Phần mạch điện hệ thống chia làm chức chuyển đổi cơng tắc gạt: Ç Chức (giám sát điều khiển trường): vị trí điều khiển bồn chứa cần giám sát mực chất lỏng, có hình LCD để người giám sát quan sát % chất lỏng có bồn Người giám sát chọn mức % chất lỏng mong muốn Nếu % chất lỏng bồn nhỏ % chất lỏng mong muốn, hệ thống tự động bật bơm Khi chất lỏng bơm vào bồn, % chất lỏng lớn chất lỏng mong muốn, hệ thống tự động tắt bơm Hệ thống có cơng tắc gạt để người giám sát linh hoạt bật bơm lúc Ç Chức (giám sát điều khiển máy tính): chức có tính điều khiển tương tự chức 1, người dùng giam sát điều khiển hệ thống từ xa máy tính thơng qua giao diện dashboard Node-red SVTH: Nhóm 18 10 Báo cáo học phần CT397 #include #include LiquidCrystal_I2C lcd(0x3F,16,2); //Khai báo chân cảm biến siêu âm, đặt thời gian Time_Out 5s #define TRIG_PIN 13 #define ECHO_PIN 14 #define TIME_OUT 5000 #define WLAN_SSID #define WLAN_PASS "Thu HA" "00001111" /************************* Adafruit.io Setup *********************************/ #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 // use 8883 for SSL #define AIO_USERNAME "hoanglmhg" #define AIO_KEY "aio_ZoxU57JgyLYMfxtMg3IkAojLaytR" //Khai báo chương trình void lcddis(); void lcddis1(); void MQTT_connect(); int GetDistance(); //Khai báo biến chương trình int Mode; int pumpsw1; int pump = 32; int level; int leveln; int levelpot=39; int but1=25; int but2=26; int but3=33; int pumpst1; uint16_t levelsub1; /************ Global State (you don't need to change this!) ******************/ SVTH: Nhóm 18 16 Báo cáo học phần CT397 // Create an ESP8266 WiFiClient class to connect to the MQTT server WiFiClient client; // Setup the MQTT client class by passing in the WiFi client and MQTT server and login details Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); /****************************** Feeds ***************************************/ // Setup a feed called 'photocell' for publishing // Notice MQTT paths for AIO follow the form: /feeds/ Adafruit_MQTT_Publish levelpub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/levelsystem.distance"); Adafruit_MQTT_Publish pumpst = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/levelsystem.realpumpstate"); Adafruit_MQTT_Subscribe pumpsw = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/levelsystem.pumpswitch"); Adafruit_MQTT_Subscribe levelsub = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/levelsystem.valueneed"); void setup() { lcd.init(); lcd.backlight(); Serial.begin(115200); delay(10); Serial.println(F("Adafruit MQTT demo")); // Connect to WiFi access point Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); SVTH: Nhóm 18 17 Báo cáo học phần CT397 } Serial.println(); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); // Setup MQTT subscription mqtt.subscribe(&pumpsw); mqtt.subscribe(&levelsub); // Cài đặt trạng thái hoạt động chân pinMode(pump,OUTPUT); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); pinMode(but1, INPUT_PULLUP); pinMode(but2, INPUT_PULLUP); pinMode(but3, INPUT_PULLUP); } uint32_t x=0; void loop() { MQTT_connect(); Adafruit_MQTT_Subscribe *subscription; Mode=digitalRead(but1); pumpsw1=digitalRead(but2); pumpst1=digitalRead(but3); leveln=analogRead(levelpot); Serial.println(leveln); //Calib lại giá trị biến trở từ giá trị analog sang % leveln = map(leveln,0,4095,0,99); level = GetDistance(); //Calib lại giá trị cảm biến từ giá trị cm sang % level = map(level,2,18,94,1); int i=0; switch(Mode){ //Chế độ điều khiển trường case 0:{ lcddis(); if (pumpsw1==0){ //Nếu công tắc bơm bật digitalWrite(pump,HIGH); if (level>=100) digitalWrite(pump,LOW); } SVTH: Nhóm 18 18 Báo cáo học phần CT397 else { if (level=leveln) digitalWrite(pump,LOW); } else digitalWrite(pump,LOW); } break; } //Chế độ điều khiển máy tính case 1:{ //Đọc giá trị từ server while ((subscription = mqtt.readSubscription(500))) { if (subscription == &pumpsw) { Serial.print(F("pumpstate: ")); Serial.println((char *)pumpsw.lastread); } if (subscription == &levelsub) { Serial.print(F("Levelsub: ")); Serial.println((char *)levelsub.lastread); levelsub1 = atoi((char *)levelsub.lastread); //lcd.setCursor(14,1); //lcd.print(levelsub1); } } lcddis1(); //Nếu công tắc bơm tên dashboard bật if (strcmp((char *)pumpsw.lastread, "true") == 0){ digitalWrite(pump,HIGH); // lcddis1(); If (level>=100) digitalWrite(pump,LOW); } else { if (level=100) if (level>=levelsub1) digitalWrite(pump,LOW); } SVTH: Nhóm 18 19 Báo cáo học phần CT397 else digitalWrite(pump,LOW); } // Publish liệu lên server để quan sát qua dashboard levelpub.publish(level); delay(1500); pumpst.publish(pumpst1); delay(1500); break; } } delay(1200); //Delay(500,pumpcon); } void lcddis(){ lcd.setCursor(4,0); lcd.print("MODE:"); lcd.print("MAN"); lcd.setCursor(0,1); lcd.print("LEV:"); lcd.print(level); lcd.print(" LEVN:"); lcd.print(leveln); } void lcddis1(){ lcd.setCursor(4,0); lcd.print("MODE:"); lcd.print("COM"); lcd.setCursor(0,1); lcd.print("LEV:"); lcd.print(level); lcd.print("% "); lcd.print("LEVN:"); lcd.print(levelsub1); lcd.print("% "); } void MQTT_connect() { int8_t ret; SVTH: Nhóm 18 20 Báo cáo học phần CT397 // Stop if already connected if (mqtt.connected()) { return; } Serial.print("Connecting to MQTT "); uint8_t retries = 3; while ((ret = mqtt.connect()) != 0) { // connect will return for connected Serial.println(mqtt.connectErrorString(ret)); Serial.println("Retrying MQTT connection in seconds "); mqtt.disconnect(); delay(5000); // wait seconds retries ; if (retries == 0) { // basically die and wait for WDT to reset me while (1); } } Serial.println("MQTT Connected!"); } int GetDistance() { int duration, distanceCm; digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH, TIME_OUT); // convert to distance distanceCm = duration / 29.1 / 2; return distanceCm; } d Thiết kế phần mềm điều khiển máy tính: SVTH: Nhóm 18 21 Báo cáo học phần CT397 i Mơ tả chức chính: ‒ Truyền liệu từ xa lên server thông qua wifi ‒ Quan sát mức chất lỏng điều khiển hệ thống thông qua giao diện dashboard công cụ Node-red ‒ Quan sát trạng thái bật – tắt bơm ii Giao diện chương trình: Hình 9: Giao diện dashboard điều khiển Node-red iii Đoạn code chức chính: ‒ Code chương trình Node-red: SVTH: Nhóm 18 22 Báo cáo học phần CT397 Hình 10: Code Node-red Hình 11: Giao diện điều khiển adafruit ‒ Giải thích code chương trình Node-red: Ç SVTH: Nhóm 18 Subscribe liệu trạng thái bơm từ server, sử dụng node change đổi liệu từ kiểu number -> boolean để hiển thị trạng thái node led 23 Báo cáo học phần CT397 Ç Publish liệu từ slider lên server, esp32 Subscribe topic để lấy giá trị % Level need người dùng nhập máy tính, hiển thị LCD điều khiển máy bơm Đồng thời, subscribe lại topic để tương tác qua lại dashboard server dashboard Node-red Ç Publish trạng thái cơng tắc bơm Ç Subscribe giá trị đọc cảm biến siêu âm hiển thị lên gauge line graph Kết thực hiện: a Mơ hình thực tế, phần cứng mạch điện (hình ảnh có thích, nhận xét): SVTH: Nhóm 18 24 Báo cáo học phần CT397 Cảm biến siêu âm LCD quan sát trường Công tắc gạt chuyển chế độ công tắc bật bơm Relay bật – tắt bơm Biến trở điều chỉnh mực chất lỏng mong muốn Hình 12: Mơ hình thực tế b Trình bày kết thực tính đặt hệ thống: i Tính điều khiển trường Ở tính này, hệ thống hoạt động ổn định, đáp ứng hệ thống nhanh, người giám sát dễ dàng thao tác điều khiển hệ thống ii Tính điều khiển qua máy tính Ở tính này, hệ thống hoạt động ổn định Tuy nhiên, đáp ứng hệ thống chưa nhanh tác vụ máy tính phải delay khoảng thời gian sau người dùng thao tác giới hạn tốc độ publish subscribe liệu từ server c Nhận xét chung ưu nhược điểm hệ thống: ‒ Ưu điểm: Ç Hệ thống linh hoạt giám sát, điều khiểu trường điều khiển máy tính SVTH: Nhóm 18 25 Báo cáo học phần CT397 Hệ thống có kết nối tương đối đơn giản tải liệu từ xa lên server thông qua wifi Ç Giao diện giám sát trực quan, người dùng dễ dàng vận hành hệ thống ‒ Nhược điểm: Ç Hệ thống dừng lại mức demo dạng mô hình, chưa kết nối với động bơm AC thực tế Ç Do giới hạn server, tốc độ publish, subcribe liệu từ server bị delay so với thực tế Ç d Nêu hướng phát triển: ‒ Sử dụng module relay chịu dòng lớn để điều khiển máy bơm cơng suất lớn (0.5 – 1hp) ‒ Sử dụng server có đáp ứng truyền tải liệu tốt để tối ưu hệ thống giám sát điều khiển máy tính ‒ Phát triển thêm việc giám sát điều khiển thông qua ứng dụng Blynk smartphone Tài liệu tham khảo: https://arduinokit.vn/do-khoang-cach-bang-cam-bien-sieu-am-hc-srf04/ https://ohtech.vn/all-courses/lap-trinh-esp32-voi-arduino-ide/lessons/cai-datarduino-ide-va-upload-code-cho-esp32/ https://linhkien888.vn/huong-dan-lap-trinh-esp32-voi-arduino-ide https://nshopvn.com/product/kit-rf-thu-phat-wifi-bluetooth-esp32/ Phụ lục: a Quá trình thực đề tài: i Kế hoạch thời gian: Bảng 1: Kế hoạch thời gian thực ii Những thuận lợi khó khăn q trình thực kiến nghị: ‒ Thuận lợi: Ç Được nhiều hướng dẫn, giúp đỡ thầy bạn SVTH: Nhóm 18 26 Báo cáo học phần CT397 Ç Dễ tìm tài liệu để thực hồn thành đồ án ‒ Khó khăn: Ç Dịch covid làm cho thành viên không tương tác trực tiếp với để làm đồ án Ç Các thiết bị phục vụ học tập tìm hiểu đơi gặp vấn cố Ç Việc mua thiết bị làm đồ án gặp nhiều khó khăn b Danh sách thành viên bảng phân chia công việc: Bảng 2: Phân chia công việc thành viên c Trả lời câu hỏi:(Phần bổ sung sau báo cáo): i Võ Nhựt Hoàng: ‒ Câu hỏi: Việc kết nối cảm biến siêu âm với esp32 kết nối đoạn chương trình đọc đo khoảng cách phần mềm lập trình arduino ide ‒ Trả lời: Ç Ç Kết nối cảm biến siêu âm kit esp32: chân TRIG ECHO kết nối với chân GPIO kit esp32 Chân TRIG kết nối cấu đầu (Output) để phát xung Chân ECHO kết nối cấu đầu vào để nhận xung Đoạn chương trình đọc đo khoảng cách phần mềm arduino ide: int GetDistance() { int duration, distanceCm; digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); SVTH: Nhóm 18 27 Báo cáo học phần CT397 digitalWrite(TRIG_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH, TIME_OUT); // convert to distance distanceCm = duration / 29.1 / 2; return distanceCm; } ii Trần Hiếu Huy: ‒ Câu hỏi: Tách Node-red hệ thống có hoạt động khơng? Tại sao? ‒ Trả lời: Ç Ở chế độ man: Hệ thống hoạt động bình thường Node-red khơng có ảnh hưởng đến chế độ Ç Ở chế độ Com: Nếu tách Node-red ta điều khiển xem trạng thái hệ thống thơng qua dashboard sever adafruit, adafruit vừa đóng vai trị broker vừa client Vì vậy, hệ thống hoạt động bình thường iii Phạm Văn Lộc - - Câu hỏi: Cho biết thơng tin cấu hình kết nối Esp32 lên Adafruit + node-red nào? Chỉ đoạn code Chỉ biến biến Subscribe, biến biến Publish đoạn code Trả lời: Thơng tin cấu hình Esp32 lên Adafruit (đoạn code): /************************* Adafruit.io Setup ***************************/ #define AIO_SERVER "io.adafruit.com" #define AIO_SERVERPORT 1883 #define AIO_USERNAME #define AIO_KEY SVTH: Nhóm 18 // use 8883 for SSL "hoanglmhg" "aio_ZoxU57JgyLYMfxtMg3IkAojLaytR" 28 Báo cáo học phần CT397 Thơng tin cấu hình Esp32 lên Node-red (đoạn code): /****************************** Feeds ********************************/ // Setup a feed called 'photocell' for publishing // Notice MQTT paths for AIO follow the form: /feeds/ Adafruit_MQTT_Publish levelpub = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/levelsystem.distance"); //Gui len node-red thong qua sever khoang cach Adafruit_MQTT_Publish pumpst = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/levelsystem.realpumpstate"); //Gui len node-red thong qua sever trang thai bom Adafruit_MQTT_Subscribe pumpsw = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/levelsystem.pumpswitch"); //Lay tin hieu xuong tu nodered thong qua sever de dieu khien bom Adafruit_MQTT_Subscribe levelsub = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/levelsystem.valueneed"); //Lay tin hieu xuong tu node-red thong qua sever nhap gia tri muc nuoc Biến subscribe: Adafruit_MQTT_Subscribe Adafruit_MQTT_Subscribe Biến publish: Adafruit_MQTT_Publish Adafruit_MQTT_Publish SVTH: Nhóm 18 29 Báo cáo học phần CT397 iv Nguyễn Quốc Long ‒ Câu hỏi : Khi điều khiển bơm mà gặp cố khơng có tín hiêụ feedback xử lí ? ‒ Trả lời : Tín hiệu feedback vi điều khiển đọc từ chân tín hiệu relay để xác định trạng thái bơm nên ta kiểm tra thiết bị trường tiếp điểm xem có bị hở khơng , relay có hoạt động bình thường khơng ,kiểm tra bơm có hoạt động bình thường khơng SVTH: Nhóm 18 30 ... biến siêu âm thiết kế hệ thống kiểm soát mực nước ‒ Mục tiêu: Ç Tìm hiểu cảm biến siêu âm Ç Thiết kế hệ thống kiểm sốt mực nước cảm biến siêu âm Ç Kết nối & điều khiển hệ thống thơng qua máy tính... trực tiếp hệ thống Sử dụng phần mềm Node-red để lập trình nhằm cho phép người dùng thao tác thơng qua máy tính Thực hiện: a Mơ hình hệ thống: i Mơ tả sơ lược hệ thống: ‒ Mô tả sơ lược: Sử dụng cảm... hiển thị mực nước thùng chứa, cho người dùng cài đặt mực nước mong muốn thơng qua nút ấn, hình LCD node-red ‒ Chức năng: Ç Tạo hệ thống bơm nước linh hoạt giúp người dùng thể kiểm soát mức nước thùng