BỘ GIÁO DỤC VÀ ĐÀO TẠO KHOA CÔNG NGHỆ ĐO LƯỜNG VÀ ĐIỀU KHIỂN BẰNG MÁY TÍNH Báo cáo đồ án Sinh viên thực hiện Giáo viên hướng dẫn MÔ HÌNH HỆ THỐNG GIÁM SÁT NHIỆT ĐỘ LÒ QUA INTERNET Đề tài Lời cảm ơn Em.
BỘ GIÁO DỤC VÀ ĐÀO TẠO KHOA CÔNG NGHỆ Báo cáo đồ án ĐO LƯỜNG VÀ ĐIỀU KHIỂN BẰNG MÁY TÍNH Đề tài MƠ HÌNH HỆ THỐNG GIÁM SÁT NHIỆT ĐỘ LÒ QUA INTERNET Giáo viên hướng dẫn: Sinh viên thực hiện: Lời cảm ơn Em xin trân thành cảm ơn thầy tận tình hướng dẫn, góp ý kiến cho làm em thời gian giảng dạy Tuy có cố gắng nhiều trình thực đồ án chắn khơng tránh khỏi sai sót hạn chế kiến thức, kinh nghiệm thời gian có hạn Rất mong thầy thơng cảm đóng góp ý kiến để nhóm chúng em có tập hồn chỉnh Sau em xin kính chúc thầy gia đình ln dồi sức khỏe lời chúc tốt đẹp Em xin chân thành cảm ơn! Sinh viên thực Mục lục I Tổng quan mơ hình………………………………………… 1 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………………………………………1 II Các vấn đề cần tìm hiểu ………………………………… 1 Sơ lược giao thức MQTT truyền thông qua mạng internet Sơ lược Node-Red…………………………………………4 Các linh kiện sử dụng………………………………………….5 a ESP8266 NodeMCU…………………………………………5 b Cảm biến nhiệt độ……………………………………………7 c Bộ Phận Làm Nóng PTC…………………………………… d Module điều khiển động L298N………………………… e Relay kênh 5V………………………….………………….10 f LCD 16x2 I2C.……………………………………… 11 g Quạt tản nhiệt……………………………………………… 11 III Thực hiện…………………………………………………… 12 Mơ hình hệ thống…………………………………………… 12 a Mơ tả sơ lược hệ thống………………………………… 12 b Mơ hình hệ thống dạng khối……………………………… 12 Thiết kế phần cứng mạch điện……………………………… 13 a Mô tả sơ lược hoạt động mạch điện…………………….13 b Vẽ sơ đồ khối phần cứng mạch điện……………………… 13 c Thiết kế chi tiết…………………………………………… 13 d Sơ đồ nguyên lý tổng hợp toàn mạch………………… 16 Thiết kế phần mềm điều khiển board nhúng…………….16 a Mô tả chức phần mềm……………………… 16 b Vẽ lưu đồ chương trình chính……………………………….17 c Vẽ lưu đồ chương trình yếu………………………17 d Đoạn code chương trình…………………………………… 18 Thiết kế phần mềm điều khiển máy tính……………… 22 a Mơ tả chức chính………………………………………22 b Giao diện chương trình………………………………………23 c Đoạn code chức chính…………………………… 24 IV Kết thực hiện…………………………………………… 28 Mơ hình thực tế phần cứng mạch điện ………………… 28 Trình bày kết thực tính đặt hệ thống Nhận xét chung ưu nhược điểm hệ thống……………29 Nêu hướng phát triển……………………………………29 V Tài liệu tham khảo…………………………………………… 29 VI Phụ lục: ………………………………………………………29 Quá trình thực đề tài………………………………… 29 Kế hoạch thời gian………………………………………… 30 Những thuận lợi khó khăn q trình thực kiến nghị………………………………………………………….30 Danh sách thành viên bảng phân chia công việc ……30 Trả lời câu hỏi……………………………………………….31 I Tổng quan mơ hình Giới thiệu đề tài a Tên mục tiêu đề tài Trong nhiều lĩnh vực xung quanh chăn nuôi, chế biến…Vấn đề đo khống chế nhiệt độ đặc biệt trọng đến yếu tố định đến chất lượng sản phẩm Nắm tầm quan trọng vấn đề nhóm chọn đề tài: “ Mơ hình hệ thống giám sát nhiệt độ lò qua internet “ Mục tiêu đề tài thiết kế ứng dụng giám sát điều khiển nhiệt độ từ xa thông qua giao thức MQTT truyền thông qua mạng internet b Các tính Tạo hệ thống tự động giám sát nhiệt độ lị theo thời gian thực tế internet thông qua giao thức MQTT, cài đặt khoảng nhiệt độ mong muốn để từ điều khiển thiết bị gia nhiệt tản nhiệt c Phương pháp thực - Sử dụng ESP8266 đọc nhiệt độ từ cảm biến nhiệt độ sử dụng lò - So sánh nhiệt độ cài đặt lặp trình sẵn để điều khiển gia nhiệt quạt tản nhiệt - Sử dụng MQTT broker “shiftr.io” để truyền thông để giám sát nhiệt độ điều khiển thiết bị theo nhiệt độ tương thích thơng qua Node red II Các vấn đề cần tìm hiểu Sơ lược giao thức MQTT truyền thông qua mạng internet MQTT (Message Queuing Telemetry Transport) giao thức truyền thông điệp (message) theo mơ hình publish/subscribe (cung cấp / th bao), sử dụng cho thiết bị IoT với băng thông thấp, độ tin cậy cao khả sử dụng mạng lưới khơng ổn định Nó dựa Broker (tạm dịch “Máy chủ môi giới”) “nhẹ” (khá xử lý) thiết kế có tính mở (tức không đặc trưng cho ứng dụng cụ thể nào), đơn giản dễ cài đặt MQTT lựa chọn lý tưởng môi trường như: nơi mà giá mạng viễn thông đắt đỏ băng thông thấp hay thiếu tin cậy, chạy thiết bị nhúng bị giới hạn tài nguyên tốc độ nhớ Bởi giao thức sử dụng băng thơng thấp mơi trường có độ trễ cao nên giao thức lý tưởng cho ứng dụng M2M (Machine to Machine) Một số ưu điểm bật MQTT như: băng thông thấp, độ tin cậy cao sử dụng hệ thống mạng khơng ổn định, tốn byte cho việc kết nối với server connection giữ trạng thái open xuyên suốt, kết nối nhiều thiết bị (MQTT client) thông qua MQTT server (broker) Bởi giao thức sử dụng băng thơng thấp mơi trường có độ trễ cao nên giao thức lý tưởng cho ứng dụng IoT Mơ hình Pub/Sub gồm Client (Publisher/Subscriber) Broker Trong Broker coi trung tâm, điểm giao tất kết nối đến từ Client (Publisher/Subscriber) Nhiệm vụ Broker nhận thơng điệp (message) từ Publisher, xếp vào hàng đợi chuyển đến địa điểm cụ thể Nhiệm vụ phụ Broker đảm nhận thêm vài tính liên quan tới q trình truyền thơng như: bảo mật message, lưu trữ message, logs, Client chia thành hai nhóm Publisher Subscriber Client làm việc publish thông điệp (message) lên một/nhiều topic cụ thể subscribe một/nhiều topic để nhận message từ topic MQTT Clients tương thích với hầu hết tảng hệ điều hành có: MAC OS, Windows, Linux, Android, iOS, Cơ chế hoạt động MQTT theo mơ hình Pub/Sub: - Tính chất: Space decoupling (Khơng gian tách biệt) Time decoupling (Thời gian tách biệt) Synchronization decoupling (Sự đồng riêng rẽ) - Đặc điểm riêng: MQTT sử dụng chế lọc thông điệp dựa vào tiêu đề (subject-based) MQTT có tầng gọi chất lượng dịch vụ (Quality of Services – QoS) Nó giúp cho dễ dàng nhận biết message có truyền thành cơng hay khơng - Cơ chế tổng quan: MQTT hoạt động theo chế client/server, nơi mà cảm biến khách hàng (client) kết nối đến máy chủ, hiểu Máy chủ môi giới (broker), thông qua giao thức TCP (Transmission Control Protocol) Broker chịu trách nhiệm điều phối tất thơng điệp phía gửi đến phía nhận MQTT giao thức định hướng tin Mỗi tin đoạn rời rạc tín hiệu broker khơng thể nhìn thấy Mỗi tin publish địa chỉ, hiểu kênh (Topic) Client đăng kí vào vài kênh để nhận/gửi liệu, gọi subscribe Client subscribe vào nhiều kênh Mỗi client nhận liệu trạm khác gửi liệu vào kênh đăng ký Khi client gửi tin đến kênh gọi publish - Kiến trúc thành phần: Thành phần MQTT Client (Publisher/Subscriber), Server (Broker), Sessions (tạm dịch Phiên làm việc), Subscriptions Topics MQTT Client (Publisher/Subscriber): Clients subscribe nhiều topics để gửi nhận thông điệp từ topic tương ứng MQTT Server (Broker): Broker nhận thông tin subscribe (Subscriptions) từ client, nhận thông điệp, chuyển thông điệp đến Subscriber tương ứng dựa Subscriptions từ client Topic: Có thể coi Topic hàng đợi thơng điệp, có sẵn khn mẫu dành cho Subscriber Publisher Một cách logic topic cho phép Client trao đổi thông tin với ngữ nghĩa định nghĩa sẵn Ví dụ: Dữ liệu cảm biến nhiệt độ tòa nhà Session: Một session định nghĩa kết nối từ client đến server Tất giao tiếp client server phần session Subscription: Không giống session, subscription mặt logic kết nối từ client đến topic Khi subscribe topic, Client nhận/gửi thơng điệp (message) với topic Sơ lược Node-Red Node RED công cụ lập trình dùng để kết nối thiết bị phần cứng, API dịch vụ trực tuyến với Về bản, công cụ trực quan thiết kế cho IoT (Internet of Things), sử dụng cho ứng dụng khác nhằm liên kết nhanh luồng (flow) dịch vụ khác Node-RED mã nguồn mở phát triển Emerging Technology Services IBM tích hợp gói ứng dụng khởi động IoT Bluemix IBM (Platform-as-a-Service PaaS) Node-RED triển khai riêng ứng dụng Node.js Hiện tại, Node-RED dự án JS Foundation Node-RED cho phép người dùng kết hợp dịch vụ Web phần cứng cách thay tác vụ mã hóa cấp thấp phổ biến (như dịch vụ đơn giản giao tiếp với cổng nối tiếp) điều thực với giao diện kéo thả trực quan Các thành phần khác Node-RED kết nối với để tạo luồng (flow) Hầu hết mã lệnh (code) cần thiết tạo tự động Các linh kiện sử dụng a ESP8266 NodeMCU Module thu phát Wifi ESP8266 NodeMCU Lua kit phát triển dựa chip Wifi SoC ESP8266 với thiết kế dễ sử dụng đặc biệt sử dụng trực tiếp trình biên dịch Arduino để lập trình nạp code, điều khiến việc sử dụng lập trình ứng dụng ESP8266 trở nên đơn giản Module thu phát Wifi ESP8266 NodeMCU Lua dùng cho ứng dụng cần kết nối, thu thập liệu điều khiển qua sóng Wifi, đặc biệt ứng dụng liên quan đến IoT Kit RF thu phát Wifi ESP8266 NodeMCU Lua sử dụng chip nạp giao tiếp UART ổn định CP2102 có khả tự nhận Driver tất hệ điều hành Window Linux, phiên nâng cấp từ phiên sử dụng IC nạp giá rẻ CH340 Hình Sơ đồ chân Module thu phát Wifi ESP8266 NodeMCU Lua CP2102 Đặc tính bật Module thu phát Wifi ESP8266 o o o o Tích hợp nút nhấn Tích hợp chip chuyển usb – uart CH340 Full IO : 10 GPIO, Analog, 1SPI , UART, I2C/I2S, PWM,v.v… Được hỗ trợ cộng đồng lớn mạnh Nodemcu THÔNG SỐ KỸ THUẬT Tương thích chuẩn wifi : 802.11 b/g/n Hỗ trợ: Wi-Fi Direct (P2P), soft-AP Tích hợp TCP/IP protocol stack Tích hợp TR switch, balun, LNA, power amplifier and matching network Tích hợp nhân tần số, ổn áp, DCXO and power management units +25.dBm output power in 802.11b mode Power down leakage current of 5000) //nếu 500 mili giây trôi qua { lastMeasure = now; Serial.print("Publish message: "); static char nhietdo_lo[7]; //hàm chuyển chuỗi dtostrf(nhiet_do, 6, 2, nhietdo_lo); static char Nhietdo_max[7]; //hàm chuyển chuỗi dtostrf(nhietdo_max, 6, 2, Nhietdo_max); static char Nhietdo_min[7]; dtostrf(nhietdo_min, 6, 2, Nhietdo_min); //hàm chuyển chuỗi int Test =15; static char test[7]; dtostrf(Test, 6, 2, test); //hàm chuyển chuỗi client.publish("DKDL_pb/nhietmax", Nhietdo_max); client.publish("DKDL_pb/nhietmin", Nhietdo_min); client.publish("DKDL_pb/nhietdo", nhietdo_lo); client.publish("DKDL_pb/test", test); Serial.print("Nhiệt độ lò: "); Serial.print(nhiet_do); Serial.print(" *C "); Serial.print(" %\t Nhiệt độ lớn nhất: "); Serial.print(nhietdo_max); Serial.print(" *C "); Serial.print(" \t Nhiệt độ nhỏ nhất: "); Serial.print(nhietdo_min); Serial.println(" *C "); client.subscribe("DKDL_sb/nhiet_max"); //đăng kí nhận liệu từ topic client.subscribe("DKDL_sb/nhiet_min"); } 27 IV Kết thực Mơ hình thực tế phần cứng mạch điện Hình 19 Mơ hình thực tế phần cứng mạch điện Trình bày kết thực tính đặt hệ thống Hình 20 Tính cài đặt nhiệt độ kết 28 Nhận xét chung ưu nhược điểm hệ thống Ưu điểm: - Có thể giao tiếp qua máy tính - Có thể thực giám sát điều khiển mơ hình lị nhiệt qua internet - Có thể cài đặt khoảng nhiệt độ mong muốn -Chi phí thấp Nhược điểm: - Đây mơ hình nên mắc nhiều lỗi độ trễ, sản phẩm chưa bắt mắt - Có thể xảy tình trạng kết nối lại cài đặt nhiệt độ cách nút nhấn - Chưa thể ứng dụng công nghiệp Nêu hướng phát triển - Thiết kế mơ hình hồn thiện, quy mơ bắt mắt - Tìm hiểu, thiết kế đo độ ẩm điều chỉnh độ ẩm để áp dụng vào hệ thống ấp trứng V Tài liệu tham khảo [1] https://arduino.esp8266.vn/ [2] https://arduino.esp8266.vn/network/mqtt.html [3] https://nodered.org/docs/ VI Phụ lục: Quá trình thực đề tài - Tìm hiểu đề tài suy nghĩ đề tài - Tìm hiểu ESP8266 - Tìm hiểu giao thức MQTT Node-red - Viết code - Mua linh kiện -Thực mơ hình thực tế -Viết báo cáo 29 Kế hoạch thời gian Thời gian 18/3 - 20/3 21/3- 22/3 23/3- 26/3 27/3- 5/4 5/5- 12/5 13/5 – 20/4 21/4 – 25/4 Cơng việc thực Tìm hiểu đề tài suy nghĩ đề tài Tìm hiểu ESP8266 Tìm hiểu giao thức MQTT Node-red Viết code Mua linh kiện Thực mơ hình thực tế Viết báo cáo Những thuận lợi khó khăn trình thực kiến nghị Thuận lợi: Được giảng viên giảng dạy hỗ trợ nhiều tài liệu suốt thời gian thực đề tài Khó khăn: - Do gần cuối kì có nhiều đồ án lẫn tập môn khác nên việc thực đề tài gặp nhiều khó khăn mặt thời gian - Có số linh kiện phải đặt mua online nên thời gian giao lâu Danh sách thành viên bảng phân chia cơng việc Tên Cơng việc Tìm hiểu chuẩn MQTT truyền thơng qua internet Tìm hiểu esp8266 Tìm hiểu cảm biến nhiệt độ, module L298 Tìm hiểu gia nhiệt tcp, quạt tản nhiệt Việc chung Thực tìm hiểu thiết kế hệ thống giám sát nhiệt độ lò 30 Trả lời câu hỏi Cho biết giao tiếp cảm biến nhiệt độ với ESP8266 liệt kê đoạn code đọc liệu cách nhiệt độ ? Giao tiếp cảm biến nhiệt độ với ESP8266: Sử dụng cảm biến nhiệt độ LM35 để thực đo nhiệt độ lò Nhiệt độ đo gửi đến ESP8266 xử lí để thực gia nhiệt giảm nhiệt cho lị Cơng thức để chuyển đổi điện áp sang nhiệt độ C cho LM35: Nhiệt độ độ C = Điện áp đọc ADC/ 10mV ( Hệ số thang tuyến tính cho LM35 10mV) Code đọc liệu #include #include #include LiquidCrystal_I2C lcd(0x27,16,2); float gt_adc, dien_ap, nhiet_do; void setup() { Serial.begin(115200); Wire.begin(2,0); //LCD 16x2 chân (D4,D3) lcd.init(); lcd.backlight(); } void loop() { lcd.setCursor(0,0); lcd.print("NHIET DO:"); gt_adc=analogRead(A0); dien_ap=gt_adc*(3300/1023); nhiet_do=dien_ap/10; 31 lcd.setCursor(9,0); lcd.print(nhiet_do); lcd.setCursor(14,0); lcd.print("*C"); } Cho biết phương pháp điều khiển gia nhiệt chức phím điều khiển Phương pháp điều khiển gia nhiệt: Sử dụng esp8266 xuất xung PWM điều khiển module L298N, từ điều chỉnh điện áp đầu để thực điều khiển gia nhiệt cho nhiệt độ đo nằm khoảng nhiệt độ cài đặt Các chức phím điều khiển: Phím 1: nút nhấn bắt đầu cài đặt nhiệt độ Phím 2: nút nhấn cài đặt số (từ đến 9) hàng chục Phím 3: nút nhấn cài đặt số (từ đến 9) hàng đơn vị Phím 4: nút nhấn kết thúc cài đặt nhiệt độ lớn để bắt đầu cài đặt nhiệt độ nhỏ nút nhấn kết thúc cài đặt nhiệt độ Cho biết kết nối ESP8266 với phần mềm thông qua giao tiếp, cách thiết lập thông số ESP8266 với Cloud ESP8266 kết nối với phần mềm thông qua Cloud tên shiftr.io với chuẩn truyền thông MQTT 32 Cách thiết lập thông số: // Các thông số Cloud //Server: do-an-dkdl.cloud.shiftr.io //Port: 1883 //Users: do-an-dkdl //Password: XvQAXgY8yfjmpTim #include #include ///////Thông tin wifi #define ssid "Mobile_hotspot" #define password "12345678" #define mqtt_server "do-an-dkdl.cloud.shiftr.io" #define mqtt_user "do-an-dkdl" #define mqtt_pwd "XvQAXgY8yfjmpTim" const uint16_t mqtt_port = 1883; WiFiClient espClient; PubSubClient client(espClient); void setup() { Serial.begin(115200); setup_wifi(); client.setServer(mqtt_server, mqtt_port); client.setCallback(callback); } Cho biết biến truyền thơng ESP8266 với Cloud ví dụ biến điều khiển relay, biến điều khiển gia nhiệt nhiệt độ đoạn code // Hàm call back để nhận liệu void callback(String topic, byte* message, unsigned int length) { Serial.print("Message arrived on topic: "); Serial.print(topic); Serial.print(" Message: "); String messageTemp; 33 String Str; for (int i = 0; i < length; i++) { Serial.print((char)message[i]); messageTemp += (char)message[i]; } Serial.println(); if(topic=="DKDL_sb/quat"){ Serial.print("Changing fan to "); if(messageTemp == "off") { digitalWrite(in1_quatduong, LOW); Serial.print("Off"); } if(messageTemp == "on") { digitalWrite(in1_quatduong, HIGH); Serial.print("on"); lcd.setCursor(0,0); lcd.print("KICH HOAT CHE DO"); lcd.setCursor(1,1); lcd.print("DUNG KHAN CAP!"); delay(500); lcd.clear(); delay(500); } } if(topic=="DKDL_sb/nhiet_min") 34 { Str = messageTemp.substring(0,2); nhietdo_min = Str.toInt(); Serial.print(nhietdo_min); } if(topic=="DKDL_sb/nhiet_max") { Str = messageTemp.substring(0,2); nhietdo_max = Str.toInt(); Serial.print(nhietdo_max); } Serial.println(); } // Hàm reconnect thực kết nối lại kết nối với MQTT Broker void reconnect() { while (!client.connected()) // Chờ tới kết nối { Serial.print("Attempting MQTT connection "); String clinetId = "ESP8266Client-" ; clinetId += String(random(0xffff), HEX); // Thực kết nối với mqtt user pass if (client.connect(clinetId.c_str(), mqtt_user, mqtt_pwd)) //kết nối vào broker { Serial.println("Đã kết nối:"); client.subscribe("DKDL_sb/quat"); client.subscribe("DKDL_sb/nhiet_min"); 35 client.subscribe("DKDL_sb/nhiet_max"); } else { Serial.print("Lỗi:, rc="); Serial.print(client.state()); Serial.println(" try again in seconds"); delay(5000); } } } void loop() { if (!client.connected())// Kiểm tra kết nối { reconnect(); } client.loop(); long now = millis(); if (now - lastMeasure > 5000) //nếu 500 mili giây trôi qua { lastMeasure = now; Serial.print("Publish message: "); static char nhietdo_lo[7]; //hàm chuyển chuỗi dtostrf(nhiet_do, 6, 2, nhietdo_lo); static char Nhietdo_max[7]; 36 //hàm chuyển chuỗi dtostrf(nhietdo_max, 6, 2, Nhietdo_max); static char Nhietdo_min[7]; //hàm chuyển chuỗi dtostrf(nhietdo_min, 6, 2, Nhietdo_min); client.publish("DKDL_pb/nhietmax", Nhietdo_max); client.publish("DKDL_pb/nhietmin", Nhietdo_min); client.publish("DKDL_pb/nhietdo", nhietdo_lo); Serial.print("Nhiệt độ lò: "); Serial.print(nhiet_do); Serial.print(" *C "); Serial.print(" %\t Nhiệt độ lớn nhất: "); Serial.print(nhietdo_max); Serial.print(" *C "); Serial.print(" \t Nhiệt độ nhỏ nhất: "); Serial.print(nhietdo_min); Serial.println(" *C "); client.subscribe("DKDL_sb/nhiet_max"); //đăng kí nhận liệu từ topic client.subscribe("DKDL_sb/nhiet_min"); } if(nhiet_do=nhietdo_max) { digitalWrite(in1_quatduong, HIGH); } else if(nhiet_do