Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 67 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
67
Dung lượng
2,12 MB
Nội dung
TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN CUỐI KÌ MƠN IOT CƠ BẢN Hệ Thống Kiểm Sốt Vườn Ươm Người hướng dẫn: ThS Trần Trung Tín Người thực hiện: NGUYỄN MINH NHỰT– 518H0545 LỤC ĐÌNH KHÁNH – 518H0678 Khố THÀNH PHỐ HỒ CHÍ MINH, NĂM 2021 : 22 TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN CUỐI KÌ MƠN IOT CƠ BẢN Hệ Thống Kiểm Sốt Vườn Ươm Người hướng dẫn: ThS Trần Trung Tín Người thực hiện: NGUYỄN MINH NHỰT– 518H0545 LỤC ĐÌNH KHÁNH – 518H0678 Khố THÀNH PHỐ HỒ CHÍ MINH, NĂM 2021 : 22 LỜI CẢM ƠN Lời đầu tiên, chúng em xin gửi lời cảm ơn chân thành đến với Khoa Công nghệ công tin, trường đại học Tôn Đức Thắng Chúng em xin chân thành cảm ơn Ths.Trần Trung Tín – thầy trực tiếp hướng dẫn bảo chúng chúng em hoàn thành báo cáo Chúng em xin chân thành cảm ơn người bạn học tập làm việc trường Đại học Tơn Đức Thắng gia đình đồng hành, động viên, tạo điều kiện giúp đỡ chúng em suốt trình Do lực thực tế chúng em non yếu nên chúng em đảm bảo cịn nhiều thiếu sót, mong q thầy/cơ bỏ qua Đồng thời chúng em mong nhận nhiều ý kiến đóng góp từ nhiều nguồn khác nữa, điều giúp chúng em tích lũy thêm kinh nghiệm để hồn thành báo cáo tốt nghiệp tới đạt kết tốt ĐỒ ÁN ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG Tơi xin cam đoan sản phẩm đồ án riêng hướng dẫn Ths Trần Trung Tín Các nội dung nghiên cứu, kết đề tài trung thực chưa công bố hình thức trước Những số liệu bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá tác giả thu thập từ nguồn khác có ghi rõ phần tài liệu tham khảo Ngồi ra, đồ án cịn sử dụng số nhận xét, đánh số liệu tác giả khác, quan tổ chức khác có trích dẫn thích nguồn gốc Các hình ảnh linh kiện phần lớn dược chép trực tiếp từ Cửa hàng điện tử Tuyết Nga, quận Gò Vấp – Nơi nhóm thực mua tồn linh kiện điện tử để thực đồ án Nếu phát có gian lận tơi xin hồn tồn chịu trách nhiệm nội dung đồ án Trường đại học Tơn Đức Thắng không liên quan đến vi phạm tác quyền, quyền tơi gây q trình thực (nếu có) Xin lưu ý: Những thơng tin có tính liên hệ khơng mang tính chất quảng bá Nếu có vi phạm quyền xin vui lịng liên hệ nhóm thực đồ án để giải Xin cảm ơn TP Hồ Chí Minh, ngày tháng năm Tác giả (ký tên ghi rõ họ tên) Nguyễn Minh Nhựt Lục Đình Khánh PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN Phần xác nhận GV hướng dẫn _ _ _ _ _ _ _ Tp Hồ Chí Minh, ngày tháng năm (kí ghi họ tên) Phần đánh giá GV chấm _ _ _ _ _ _ Tp Hồ Chí Minh, ngày tháng năm (kí ghi họ tên) TÓM TẮT Báo cáo soạn thảo nhóm sinh viên nhằm đạt yêu cầu môn tài liệu nghiên cứu khoa học sinh viên cấp trường Báo cáo bao trùm lên tiêu mục lớn cụ thể sau: Đặt vấn đề gồm có Mục tiêu chọn đề tài Lý chọn đề tài Lý thuyết Mơ tả hệ thống Thực tế hóa hệ thống Mục tiêu đồ án nghiên cứu triển khai ngun mơ hình vườn ươm thơng minh tự động hóa ứng dụng cơng nghệ IOT MỤC LỤC DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ 10 Chương – MỞ ĐẦU 11 1.1 Đặt vấn đề 11 1.2 Mục tiêu chọn đề tài 11 1.2 Lý chọn đề tài 12 Chương – LÝ THUYẾT CƠ BẢN 13 2.1 Vườn ươm gì? 13 2.1.1 Vườn ươm cố định 13 2.1.2 Vườn ươm tạm thời 13 2.2 Các điều kiện thỏa mãn chuẩn cho vườn ươm 14 Hình 2.3 Tiêu chuẩn điều kiện vườn ươm 16 2.3 IOT- Internet vạn vật gì? 17 2.4 Hệ thống kiểm sốt vườn ươm gì? 17 2.5 Kiến trúc vườn ươm thông minh? 17 2.5.1 Hệ thống tưới tiêu 17 2.5.2 Hệ thống đo độ ẩm đất 18 2.5.3 Hệ thống cảm biến nhiệt độ 18 Chương – MÔ TẢ HỆ THỐNG 19 3.1 Một số hệ thống vườn ươm có 19 - Ví dụ 1: Hệ thống tưới tiêu vườn tự động PlantLink 19 Hình 3.1 Hình ảnh cho Hệ thống tưới tiêu vườn tự động PlantLink (Nguồn) 19 Hình 3.2 Nhóm sinh viên thi RoboCon 2019 21 3.2 Flowchart hoạt động – sơ đồ khối 21 Hình 3.3 Flowchart bao qt cho hệ thống kiểm sốt vườn ươm nhóm 21 3.3 Lưu đồ giải thuật 22 3.4 Thực tế hóa mơ hình 23 3.5 Bảng tên thiết bị 24 3.6 User case Diagram cho User panel 25 3.7 Lựa chọn linh kiện phù hợp với mơ hình 26 3.7.1 Module Node MCU ESP8266 CP2102 – 80,000vnđ 26 Module Node MCU ESP8266 CP2102 26 Hình 3-6: Sơ đồ chân Node MCU ESP8266 28 3.7.2 Cảm biến nhiệt độ, độ ẩm: DHT11 – 35,000vnđ 28 Hình 3-7: Cảm biến DHT11 28 3.7.3 Cảm biến độ ẩm đất – 12,000vnđ 29 Cảm biến độ ẩm đất 30 3.7.4 Máy bơm nước chìm 5VDC – 20, 000 vnđ 31 Động bơm chìm 5VDC 31 Bảng thông số chi tiết Động bơm chìm 5VDC 32 3.7.5 Động DC 130 – 4,000vnđ 32 3.7.6 Module Relay kích mức cao thấp 5v – 18,000vnđ 33 Relay kích mức cao/thấp 5VDC 33 Sơ đồ chân nối relay kích mức cao/thấp 5VDC 34 3.7.7 Cảm Biến Ánh Sáng Quang Trở Chân – 9,000vnđ 34 Thông số kỹ thuật : 35 3.7.8 Mạch Nguồn AC-DC 5V 12V XH-M299 – 30,000vnđ 35 Mạch nguồn giảm áp AC-DC 5V, 12V M299 35 3.7.9 Breadboard MB-102 830 – 30,000vnđ 36 Breadboard MB-102 830 37 3.7.10 LCD 1602 Xanh – 39,000vnđ 37 Màn LCD 16x2 – 16 cột hàng 38 3.7.10 Module Giao Tiếp I2C Sang LCD – 15,000vnđ 38 Module I2C chuyển chân cắm cho LCD 38 Cấu tạo bên module 39 Mơ hình đấu nối chân sử dụng I2C cho LCD 39 Chương – THỰC NGHIỆM HỆ THỐNG 40 4.1 Mô Cisco: 40 4.1.1 Sơ đồ hệ thống: 40 Sơ đồ hệ thống từ packet tracer 40 4.1.2 Khung chương trình điều khiển 40 4.2 Mô Tinkercad 44 4.2.1 Sơ đồ hệ thống 44 4.2.2 Khung chương trình hệ thống 44 4.3 Mơ hình mạch mơ thực tế 48 4.3.1 Mô tả mạch khái quát 48 Mơ hình mạch thực tế khái quát 49 4.3.2 Chi tiết đấu nối 49 Mơ hình mạch mơ thực tế 50 Nguồn cung từ mạch XH-M299 50 Bảng tra cứu chân cắm linh kiện cho hệ thống 53 4.3.3 Lập trình ứng dụng cho mơ hình 53 4.3.4 Lập trình vi điều khiển ESP8266 53 Cấu trúc code ESP 54 4.3.4 Lập trình WebServer 60 Cấu trúc Webserver Nodejs 61 UI cho chế đệ theo dõi, tự động (Auto) 62 Chương 5: TỔNG KẾT ĐỀ TÀI 65 5.1 Tự đánh giá nội thực 65 5.2 Tự đánh giá mơ hình thực 65 5.3 Hướng phát triển mơ hình 65 TÀI LIỆU THAM KHẢO 66 PHỤ LỤC 67 DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ Tiêu chuẩn điều kiện vườn ươm 16 Hình ảnh cho Hệ thống tưới tiêu vườn tự động PlantLink (Nguồn) 19 Nhóm sinh viên thi RoboCon 2019 21 Flowchart bao quát cho hệ thống kiểm soát vườn ươm nhóm 21 Module Node MCU ESP8266 CP2102 26 Sơ đồ chân Node MCU ESP8266 28 Cảm biến DHT11 28 Cảm biến độ ẩm đất 30 Động bơm chìm 5VDC 31 Bảng thông số chi tiết Động bơm chìm 5VDC 32 Relay kích mức cao/thấp 5VDC 33 Sơ đồ chân nối relay kích mức cao/thấp 5VDC 34 Mạch nguồn giảm áp AC-DC 5V, 12V M299 35 Breadboard MB-102 830 37 Màn LCD 16x2 – 16 cột hàng 38 Module I2C chuyển chân cắm cho LCD 38 Cấu tạo bên module 39 Mơ hình đấu nối chân sử dụng I2C cho LCD 39 Sơ đồ hệ thống từ packet tracer 40 Mơ hình mạch thực tế khái quát 49 Mơ hình mạch mơ thực tế 50 Nguồn cung từ mạch XH-M299 50 Bảng tra cứu chân cắm linh kiện cho hệ thống 53 Cấu trúc code ESP 54 Cấu trúc Webserver Nodejs 61 UI cho chế đệ theo dõi, tự động (Auto) 62 Cảm biến độ ẩm đất Cảm biến ánh sáng Input relay quạt gió Input relay máy bơm nước Led báo quạt Led báo máy bơm Led chiếu sáng vườn ươm A0 D6 D8 D7 D8 D7 D4 Bảng tra cứu chân cắm linh kiện cho hệ thống 4.3.3 Lập trình ứng dụng cho mơ hình Như đề cập sơ đồ khối mơ hình chung, nhóm thực chia khối phần mềm thành phần: - Khối 1: Khối phần mềm cho vi điều khiển dashboard dùng để điều khiển, hiển thông tin tiếp nhận từ database – client Khối 2: Khối phần mềm cho phía server – server Như vậy, phải thực phần lập trình nhúng cho khối vi điều khiển C sử dụng Andruino IDE quen thuộc để soạn thảo, gỡ lỗi nạp mạch cho ESP8266 Về phía Web server phát triển dựa framework ExpressJs (Nodejs) Về phía dashboard, UI tảng web phát triển để tương thích hiệu thiết bị di động (responsive) Với mơ hình multiple page app NodeJS tích hợp socket server Vì vừa xử lí request từ web client (các browser) để hiển thị (render) UI, vừa nơi tiếp nhận socket message từ client (phía UI (users) phía IoT device (NodeMCU)) 4.3.4 Lập trình vi điều khiển ESP8266 Đối phần code cho vi điều khiển, nhóm thực phân folder sau: Cấu trúc code ESP Việc phân folder giúp developer khác tiện dùng mơ hình nhóm thực có khác nhiều chi tiết components nên việc kiểm thử tính hoạt động hoàn toàn hợp lý - Esp_main: nơi chứa mã nguồn cho esp Test_lcd_scroll: mã nguồn kiểm thử kết nối LCD Test_light: mã nguồn kiểm thử hoạt động cảm biến ánh sáng Test_soil_led: mã nguồn test thử cảm biến độ ẩm sau nháy led với threshold định trước Test_soil_moisture: mã nguồn test thử cảm biến độ ẩm đất Test_temperature: mã nguồn test thử cảm biến DHT11 Sau source code cho mạch: // check board #if !defined(ESP8266) #error This code is intended to run only on the ESP8266 boards ! Please check your Tools->Board setting #endif // LIBS INCLUDE #include #include #include #include #include #include #include #include #include #define _WEBSOCKETS_LOGLEVEL_ // PIN DEFINITIONS // #define SCL_LCD D1 // #define SDA_LCD D2 #define DHTPIN D3 #define MOISTUREPIN A0 #define LIGHTPIN D6 #define FANPIN D8 #define WATERPUMP D7 #define LEDFAN D8 // red led #define LEDWATER D7 // yellow led #define GARDENLED D4 // green led // OTHER DEFINITIONS #define DHTTYPE DHT11 // VARIABLES DECLARATION DHT dht(DHTPIN, DHTTYPE); LiquidCrystal_I2C lcd(0x27, 16, 2); ESP8266WiFiMulti WiFiMulti; SocketIOclient socketIO; const const const const char *ssid = "Cormac"; char *password = "+Ah(nstP7.U7+qz"; char *host = "192.168.100.17"; int httpPort = 3000; // soil moisture value define int moisture_value = 0, moisture_state = 0xFF; // function to connect Wifi void wifiConnect() { Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(200); Serial.print("."); } if (WiFi.status() == WL_CONNECTED) { Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } else { Serial.println("\r\nWiFi not disconnected"); } } // read temperature data from DHT11 sensor // this will return the value in degree Celcius float getTemp() { float temp = dht.readTemperature(); if (isnan(temp)) { return -1; } return temp; } // get soil moisture value from sensor // this will return the value in percentage float getSoil() { moisture_value = analogRead(MOISTUREPIN); // convert analog value to percentage moisture_value = map(moisture_value, 550, 0, 0, 100); if (isnan(moisture_value)) { return -1; } return moisture_value; } // get light value from light sensor int getLight() { int light_value = analogRead(LIGHTPIN); // convert analog value to percentage light_value = map(light_value, 550, 10, 0, 100); if (isnan(light_value)) { return -1; } return light_value; } // client communication function void clientComm(float temperature, float soil_moisture, int light) { // Initialize WiFiClient class to create TCP connections WiFiClient client; if (!client.connect(host, httpPort)) { Serial.println("Connection failed"); return; } // We now create a URI for the request String url = "/"; Serial.print("Requesting URL: "); Serial.println(url); // 1st param is temp, 2nd is moisture String temp_data = "temperature=" + String(temperature) + "&" + "soil=" + String(soil_moisture) + "&" + "light=" + String(light); Serial.print("Requesting POST: "); // Send request to the server: client.println("POST / HTTP/1.1"); client.println("Host: server_name"); client.println("Accept: */*"); client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.println((temp_data).length()); client.println(); client.println(temp_data); // This will send the request to the server /*this is a get method working*/ // this GET req is for printing on dashboard // client.print(String("GET ") + url + " HTTP/1.1\r\n" + temp_data + // "Connection: close\r\n\r\n"); unsigned long timeout = millis(); while (client.available() == 0) { if (millis() - timeout > 5000) { Serial.println(">>> Client Timeout !"); client.stop(); return; } } // Read all the lines of the reply from server and print them to Serial while (client.available()) { String line = client.readStringUntil('\r'); Serial.print(line); } Serial.println(); Serial.println("closing connection"); } void printLCD(float temperature, float soil_moisture, int light) { lcd.setCursor(0, 0); lcd.print("Temp: "); lcd.print(temperature); lcd.print("C"); lcd.setCursor(0, 1); lcd.print("Soil: "); lcd.print(soil_moisture); lcd.print("%"); lcd.setCursor(0, 2); lcd.print("Light: "); lcd.print(light); lcd.print("%"); } // function to set pinMode to all components void setPin() { // configure input pin for sensors pinMode(DHTPIN, INPUT); pinMode(MOISTUREPIN, INPUT); pinMode(LIGHTPIN, INPUT); // configure output pin for actuators pinMode(FANPIN, OUTPUT); pinMode(WATERPUMP, OUTPUT); pinMode(LEDFAN, OUTPUT); pinMode(LEDWATER, OUTPUT); pinMode(GARDENLED, OUTPUT); } void setup() { Serial.begin(9600); // set pin mode setPin(); // setup for LCD lcd.init(); // initialize the lcd lcd.backlight(); // Turn on backlight // connect to wifi wifiConnect(); } void loop() { delay(2000); // read temperature data from DHT11 sensor float temperature = getTemp(); // read soil moisture data from sensor float soil_moisture = getSoil(); // read light data from sensor int light_value = getLight(); // display on LCD // clear LCD when update lcd.clear(); printLCD(temperature, soil_moisture, light_value); // check if there is any error while reading data from DHT11 or not // if there is any error, then print error message if (temperature == -1 || soil_moisture == -1 || light_value == -1) { Serial.println("Failed to read from DHT sensor or soil moisture sensor or there is a broken light sensor!"); return; } // else then serialize the temperature and moisture then activate actuators else { Serial.printf("Nhiệt độ là: %f \n", temperature); Serial.printf("Độ ẩm đất : %f \n", soil_moisture); Serial.printf("Độ sáng vườn ươm là: %d \n", light_value); // if current temperature is higher or euqal to 27 degree then turn on fan if (temperature >= 28) { digitalWrite(FANPIN, HIGH); // turn on led to indicate fan is on digitalWrite(LEDFAN, HIGH); } else { digitalWrite(FANPIN, LOW); // turn off led to indicate fan is off digitalWrite(LEDFAN, LOW); } // if current soil moisture is less or equal to 30% then turn on water pump if (soil_moisture