1.1Yêu cầu bài tập lớnTrong khuôn khổ bài tập lớn môn học Thiết kế hệ thống nhúng, nhóm chúng em quyết địnhchọn đề tài: “Hệ thống giám sát nhiệt độ và độ ẩm theo thời gian thực.” Đề tài
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘITRƯỜNG ĐIỆN – ĐIỆN TỬ
BÁO CÁO BÀI TẬP LỚN
Đề tài : Hệ thống đo nhiệt độ, độ ẩm và ánh sáng
Hà Nội, 02/2022
201918272019189120192127
Trang 2MC LC
CHƯƠNG 1 TỔNG QUAN ĐỀ TÀI 2
1.1 YÊUCẦUBÀITẬP LỚN 2
1.2 MỤCTIÊUTHIẾTKẾ 3
CHƯƠNG 2 GIỚI THIỆU PHẦN CỨNG 4
2.1 NGUYÊNLÝ CÁCMODULE PHẦNCỨNG 4
2.1.1 Kit ESP32 DOIT DEVKIT V1 4
2.1.2 Module cảm biến nhiệt độ, độ ẩm DHT11 5
2.1.3 Màn hình LCD 7
CHƯƠNG 3 SƠ ĐỒ KHỐI 7
3.1 SƠĐỒKHỐI, LƯU ĐỒTHUẬTTOÁN GIAO TIẾP GIỮA VI ĐIỀU KHIỂN ESP32 VÀ MODULEPHẦN CỨNG 8
3.2 LẬPTRÌNHSUPER LOOP CHẠY TỪNG TASK MỘT TỪ TRÊN XUỐNG DƯỚI 9
CHƯƠNG 4 SƠ ĐỒ NGUYÊN LÍ 9
4.1 CÁCNGOẠI ESP32 VICẦN SỬ DỤNG 9
4.2 SƠĐỒGHÉP NỐIVI ĐIỀU KHIỂN VÀMODULE PHẦNCỨNG 10
CHƯƠNG 5 MÔ PHỎNG VÀ CHẠY THỬ 12
5.1 MÔPHỎNG 12
5.2 KẾTQUẢ CHẠY THỬ TRÊN MÔ PHỎNG 12
CHƯƠNG 6 KẾT QUẢ VÀ ĐÁNH GIÁ 12
6.1 CÁCKẾTQUẢ ĐẠT ĐƯỢC 12
6.2 PHÂNTÍCH VÀĐÁNHGIÁ KẾTQUẢ 12
TÀI LIỆU THAM KHẢO 13
Trang 31.1Yêu cầu bài tập lớn
Trong khuôn khổ bài tập lớn môn học Thiết kế hệ thống nhúng, nhóm chúng em quyết địnhchọn đề tài: “Hệ thống giám sát nhiệt độ và độ ẩm theo thời gian thực.” Đề tài chúng em được trình bày gồm 5 chương:
Chương 1: Tổng quan đề tàiChương 2: Giới thiệu phần cứngChương 3: Sơ đồ khốiChương 4: Sơ đồ nguyên lí Chương 5: Mô phỏng và chạy thửChương 5: Kết quả và đánh giá
Chúng em xin cảm ơn thầy Nguyễn Cảnh Quang đã luôn tận tình hướng dẫn chúng em trong suốt quá trình học trên lớp và thực hiện đề tài, do kiến thức chúng em còn rất nhiều hạn chế nên đề tài còn rất nhiều sai sót, mong thầy góp ý và chỉnh sửa để chúng em tiến bộ hơn Em xin chân thành cảm ơn!
1.2Mục tiêu thiết kế
Triển khai ứng dụng thời gian thực trên vi điều khiển ESP32 với các yêu cầu:
Lập trình vi điều khiển ESP32 giao tiếp với cảm biến DHT11 và cảm biến quang cds hiểnthị thông số lên LCD, truyền thông số lên web server Cài đặt thời gian và thông số bộ lậplịch từ máy tính.
Gửi dữ liệu đo được lên web server
Trang 4CHƯƠNG 2.GIỚI THIỆU PHẦN CỨNG2.1.1Nguyên lý các module phần cứng
2.1.2Vi điều khiển STM32F103C8T6
STM32F103C8T6 là vi điều khiển 32bit, thuộc họ F1 của dòng chip STM32 hãng ST.- Lõi ARM COTEX M3.
- Tốc độ tối đa 72Mhz - Bộ nhớ :
64 kbytes bộ nhớ Flash20 kbytes SRAM - Clock, reset và quản lý nguồnĐiện áp hoạt động từ 2.0 → 3.6V.
Sử dụng thạch anh ngoài từ 4Mhz → 20Mhz
Thạch anh nội dùng dao động RC ở mode 8Mhz hoặc 40Khz
Trang 52.1.3Kit ESP32 DOIT DEVKIT V1
Hình 1 Kit ESP32 DOIT DEVKIT V11
ESP32 là một hệ thống vi điều khiển trên chip (SoC) giá rẻ của Espressif Systems, nhà phát triểncủa ESP8266 SoC Nó là sự kế thừa của SoC ESP8266 và có cả hai biến thể lõi đơn và lõi kép của bộ vi xử lý 32-bit Xtensa LX6 của Tensilica với Wi-Fi và Bluetooth tích hợp Dưới đây là một số thông số kỹ thuật của kit:
Trang 6Điện áp hoạt động: 2.2 V 3.6 V
Bộ vi xử lý LX6 32-bit lõi đơn hoặc lõi kép với xung nhịp lên đến 240 MHzTích hợp cổng USB để nạp Bootloader hoặc sử dụng ngoại vi USBHỗ trợ kết nối Wi-Fi 802.11 b / g / n với tốc độ lên đến 150 MbpsKết nối nối tiếp bao gồm 4 x SPI, 2 x I2C, 2 x I2S, 3 x UART
2.1.4Module cảm biến nhiệt độ, độ ẩm DHT11
Hình 2 Module DHT11 2
DHT11 là cảm biến nhiệt độ, độ ẩm rất thông dụng hiện nay vì chi phí giá rẻ và rất dễ lấy dữ liệu thông qua giao tiếp 1-wire Cảm biến được tích hợp bộ tiền xử lý tín hiệu giúp dữ liệu nhận về được chính xác mà không cần phải thông qua mạch xử lý tín hiệu nào Dưới đây là một số thông số kỹ thuật:
Điện áp hoạt động: 35 VDC.
Dải đo độ ẩm: 20%90% RH, sai số 5% RH.Dải đo nhiệt độ: 0 50 , sai số 2 ℃ ℃ ℃Tần số lấy mẫu tối đa: 1 Hz.Khoảng cách truyền tối đa: 20 m.
Sơ đồ chân module DHT11 gồm 2 chân cấp nguồn và 1 chân tín hiệu Hiện nay trên thị trường có hai loại thông dụng được đóng gói với 3 chân hoặc 4 chân
Nguyên lý hoạt động :
Trang 7Hình 3 Kết nối module DHT11 với vi điều khiển
Vi điều khiển giao tiếp với DHT11 theo chuẩn 1 wire với 2 bước:Gửi yêu cầu đo tới DHT11, sau đó đợi DHT11 phản hồi.
Khi DHT11 sẵn sàng giao tiếp, nó sẽ gửi lại 5 byte dữ liệu chứa giá trị nhiệt độ và độ ẩm do được.
Dưới đây là chi tiết các bước thực hiện:
e Byte 5: byte checksum (nếu byte 5 bằng tổng giá trị 4 byte trên thì dữ liệu thu được là chính xác).
2 Sau khi xác nhận thành công yêu cầu giao tiếp với DHT11, nó sẽ gửi liên tiếp 40 bit về viđiều khiển:
Với mỗi bit dữ liệu gửi về vi điều khiển, DHT11 sẽ kéo chân DATA xuống mức logic 0 trong 50 s, sau đó:
Nó sẽ kéo chân DATA lên mức logic 1 và giữ trong 2628 s nếu dữ liệu truyền về vi điều khiển là bit 0.
Trang 8Hình 4 Biểu diễn mức logic 0
Nó sẽ kéo chân DATA lên mức logic 1 và giữ trong 70 µs nếu dữ liệu truyền về vi điều khiển là bit 1.
Hình 5 Biểu diễn mức logic 1 5
2.1.5Cảm biến nhiệt độ LM35
Thông số kĩ thuật:
Điện áp hoạt động: 4-20 VDCDòng điện tiêu thụ: khoảng 60uAKhoảng đo: -55°C đến 150°C
Điện áp tuyến tính theo nhiệt độ: 10mV/°CSai số: 0.25°C
Trang 92.1.6Cảm biến nhiệt độ DS18B20
Thông số kĩ thuật:
Nguồn: 3 – 5.5V
Dải đo nhiệt độ: -55 đến 125 độ
Sai số: +- 0.5 độ C khi đo ở dải -10 – 85 độ C
2.1.7Màn hình LCD
Hình 6 Màn hình LCD 16026
Màn hình LCD 1602 (Liquid Crystal Display) được sử dụng trong rất nhiều ứng dụng của vi điều khiển LCD 1602 có rất nhiều ưu điểm so với các dạng hiển thị khác như: khả năng hiển thịký tự đa dạng (chữ, số, ký tự đồ họa); dễ dàng đưa vào mạch ứng dụng theo nhiều giao thức giaotiếp khác nhau Dưới đây là một số thông số kỹ thuật quan trọng:
Dải điện áp hoạt động: 2.75.5 VDC.Điện áp ra mức cao: > 2.4 VDC.
Trang 10Điện áp ra mức thấp: < 0.4 VDC.Dòng điện cấp nguồn: 350µA600µA.Nhiệt độ hoạt động: -3075 ℃
Tụ C và C có tác dụng lọc điện áp cấp cho tải tiêu thụ lấy từ đầu ra của IC LM1117, tụ 45
C4 giúp ổn định điện áp đầu ra cung cấp cho tải, tụ C có trở kháng lớn, có tác dụng lọc nhiễu 5
điện áp đầu ra (nhiễu là điện áp không mong muốn làm cho dạng điện áp ra hình răng cưa).
3.1Sơ đồ khối, Lưu đồ thuật toán giao tiếp giữa vi điều khiển ESP32 và module phần cứng
Hình 13 Sơ đồ khối hệ thống
Trang 11Hình 14 Lưu đồ thuật toán chương trình
Trang 12Hình 19 Kết quả mô phỏng
5.1Các kết quả đạt được
Trang 13Hình 20 Thử nghiệm mạch trên breadboard
Hình 21 Kết quả vi điều khiển gửi về web server
CODE:
Trang 14#include <DHT.h>
#include <LiquidCrystal_I2C.h>#include <PubSubClient.h>#include <WiFi.h>
const char* mqtt_server = "172.20.10.2";const char* mqtt_user = "haison-nguyenphuc";const char* mqtt_password = "soncua2001";uint16_t mqtt_port = 1883;
const char* mqtt_clientId = "ClientEsp32";#define SSID "Minh Huy"
#define PASSWORD "Minhhuy1010"
#define MSG_BUFFER_SIZE 50#define LED 2
WiFiClient wifiClient;PubSubClient client(wifiClient);
#define DHT_SENSOR_PIN 25 // ESP32 pin GIOP23 connected to DHT11 sensor#define DHT_SENSOR_TYPE DHT11
int cambien = 2; //Cảm biến nối chân số 5 Arduinoint giatri;
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x3F, 16 column and 2 rowsDHT dht_sensor(DHT_SENSOR_PIN, DHT_SENSOR_TYPE);
void setup() {
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, 16, 17); setupWiFi();
client.setServer(mqtt_server, 1883); client.setCallback(callback);
Trang 15pinMode(LED, OUTPUT);
dht_sensor.begin(); //Khởi động cảm biến pinMode(cambien, INPUT);
lcd.init(); //Khởi động LCD lcd.backlight(); //Mở đèn
lcd.setCursor(0,0); lcd.print("DO AM:"); lcd.setCursor(0,1); lcd.print("C|F:");
void loop() {
if (!client.connected()) { reconnect();
}
client.loop();
digitalWrite(LED, HIGH);
float doam = dht_sensor.readHumidity(); //Đọc độ ẩm
float doC = dht_sensor.readTemperature(); //Đọc nhiệt độ C
float doF = dht_sensor.readTemperature(true); //Đọc nhiệt độ F
// Kiểm tra cảm biến có hoạt động hay không if (isnan(doam) || isnan(doC) || isnan(doF)) {
Serial.println("Không có giá trị trả về từ cảm biến DHT"); return;
Trang 16}
Serial.print("humidity value: "); Serial.print(doam);
lcd.setCursor(7,0); //con trỏ vị trí số 7, hiện ô số 8 lcd.print(doam);
lcd.setCursor(12,0); //Con trở ở vị trí 12, hiện ô 13 lcd.print("%");
Serial.print("% Temperature value: "); Serial.print(doC);
Serial.print("°C | "); Serial.print(doF); Serial.println("°F");
giatri = analogRead(cambien); //Đọc giá trị cảm biến và gán vào biến giatri Serial.print("Cuong do anh sang: ");
Serial.println(giatri);
lcd.setCursor(5,1); lcd.print(doC); lcd.setCursor(10,1); lcd.print("|"); lcd.setCursor(11,1); lcd.print(doF);
client.publish("sensor1", String(doam).c_str()); client.publish("sensor2", String(doC).c_str()); client.publish("sensor3", String(doF).c_str()); delay(2000);
}
Trang 17//callback function is used to receive value from mqtt brokervoid callback(char* topic, byte* payload, unsigned int length) {}
void setupWiFi() {
WiFi.begin(SSID, PASSWORD); Serial.println("Waiting for WiFi");
while (WiFi.status() != WL_CONNECTED) { delay(500);
Serial.print("."); }
Serial.println("WiFi Connected."); Serial.print("IP Address: "); Serial.println(WiFi.localIP());}
client.subscribe("connected"); } else {
Serial.print("failed, rc="); Serial.print(client.state());
Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000);
}
Trang 18}
5.2Phân tích và đánh giá kết quả
Trong khuôn khổ bài tập lớn môn học Thiết kế hệ thống nhúng, nhóm em đã làm được các công việc:
Lập trình vi điểu khiển giao tiếp với cảm biến DHT11, cảm biến quang trở CDS, LCD và truyền nhận dữ liệu với máy tính.
Gửi dữ liệu lên web server và phân tích
Trang 19TÀI LIỆU THAM KHẢO
[1] https://www.sparkfun.com/datasheets/Components/DS1307.pdf
[2] https://lib.hpu.edu.vn/bitstream/handle/123456789/17890/7_NguyenNgocTrung_DCL301.pdf
[3] Version-1143054.pdf
https://www.mouser.com/datasheet/2/758/DHT11-Technical-Data-Sheet-Translated-[4] https://www.windriver.com/solutions/learning/rtos