-
-
-
Tổng tiền thanh toán:
-
Đo nhiệt độ, độ ẩm (DHT11) bằng Arduino Uno và hiển thị lên Oled 0.96 Inch
06/08/2020 Đăng bởi: Hiệp
Linh Kiện Cần Cho Dự Án
Màn hình Oled 0.96 Inch Giao Tiếp I2C. >>>>>Xem sản phẩm tại đây
Module Cảm Biến Nhiệt Độ và Độ Ẩm DHT11. >>>>>>Xem sản phẩm tại đây.
Arduino UNO R3. >>>>>Xem sản phẩm tại đây.
Giới Thiệu Linh Kiện
Màn hình Oled 0.96 Inch Giao tiếp I2C
Đó là một màn hình rất nhỏ với 128 x 64 pixel OLED riêng lẻ và không cần đèn nền. Màn hình OLED là đơn sắc (màu trắng), nhưng có những mẫu khác với nhiều màu.
Kết nối chân Oled với Arduino Uno
Oled | Arduino Uno |
5V | 5V |
GND | GND |
SCL | A5 |
SDA | A4 |
Nếu board Arduino bạn đang sử dụng không phải là Arduino Uno thì chân SCL và SDA như sau:
- Nano: SDA (A4); SCL (A5);
- MEGA: SDA (20); SCL (21);
- Leonardo: SDA (20); SCL (21);
Sử dụng thư viên: Adafruit_SSD1306, Adafruit-GFX-Library
Các hàm dùng để tương tác với Oled
- clearDisplay () – tất cả các pixel đều tắt
- drawPixel (x, y, color) – vẽ một pixel theo tọa độ x, y
- setTextSize (n) – đặt kích thước phông chữ, hỗ trợ kích thước từ 1 đến 8
- setCoder (x, y) – đặt tọa độ để bắt đầu viết văn bản
- print (in trực tiếp) – in các ký tự ở vị trí x, y
Module Cảm Biến Nhiệt Độ Và Độ Ẩm DHT11
Module cảm biến nhiệt độ và độ ẩm DHT11 là cảm biến rất thông dụng hiện nay vì chi phí rẻ và rất dễ lấy dữ liệu thông qua chuẩn giao tiếp 1 wire.
Chuẩn giao tiếp 1 wire là dùng 1 chân Digital để truyền dữ liệu.
Bộ tiền xử lý tín hiệu được tích hợp trong cảm biến giúp bạn có thể đọc dữ liệu chính xác mà không phải qua bất kỳ tính toán nào.
Nhiệt độ và độ ẩm được tính toán như sau:
Dữ liệu truyền về của DHT11 gồm 40bit dữ liệu theo thứ tự: 8 bit biểu thị phần nguyên của độ ẩm + 8 bit biểu thị phần thập phân của độ ẩm + 8 bit biểu thị phần nguyên của nhiệt độ + 8 bit biểu thị phần thập phân của nhiệt độ + 8 bit check sum.
Ví dụ: ta nhận được 40 bit dữ liệu như sau:
0011 0101 0000 0000 0001 1000 0000 0000 0100 1101
Tính toán:
8 bit checksum: 0011 0101 + 0000 0000 + 0001 1000 + 0000 0000 = 0100 1101
Độ ẩm: 0011 0101 = 35H = 53% (ở đây do phần thập phân có giá trị 0000 0000, nên ta bỏ qua không tính phần thập phân)
Nhiệt độ: 0001 1000 = 18H = 24°C (ở đây do phần thập phân có giá trị 0000 0000, nên ta bỏ qua không tính phần thập phân)
Thông số kỹ thuật của cảm biến:
-
Điện áp hoạt động: 3V - 5V (DC)
-
Dãi độ ẩm hoạt động: 20% - 90% RH, sai số ±5%RH
-
Dãi nhiệt độ hoạt động: 0°C ~ 50°C, sai số ±2°C
-
Khoảng cách truyển tối đa: 20m
Các bạn download và cài đặt thư viện hỗ trợ sử dụng DHT11: Tại đây
Sơ Đồ Kết Nối
Arduino Uno | DHT11 | Oled 0.96 Inch |
5V | 5V | 5V |
GND | GND | GND |
2 | Sig | |
A4 | SCL | |
A5 | SDA |
Code Mẫu
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <DHT.h>
#define DHTPIN 2 // what pin we're connected to #define DHTTYPE DHT11 // DHT 11 #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET);
// Initialize DHT sensor for normal 16mhz Arduino DHT dht(DHTPIN, DHTTYPE);
void setup() { Wire.begin(); dht.begin(); // initialize dht display.begin(SSD1306_SWITCHCAPVCC, 0x3C);// initialize with the I2C addr 0x3C (for the 128x32)(initializing the display) Serial.begin(9600); } void displayTempHumid(){ delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius float t = dht.readTemperature(); // Read temperature as Fahrenheit float f = dht.readTemperature(true);
// Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { display.clearDisplay(); // clearing the display display.setTextColor(WHITE); //setting the color display.setTextSize(1); //set the font size display.setCursor(5,0); //set the cursor coordinates display.print("Failed to read from DHT sensor!"); return; } display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(1); display.setCursor(0,0); display.print("Humidity: "); display.print(h); display.print(" %\t"); display.setCursor(0,10); display.print("Temperature: "); display.print(t); display.print(" C"); display.setCursor(0,20); display.print("Temperature: "); display.print(f); display.print(" F"); } void loop() { displayTempHumid(); display.display(); } |
------------------------------------------------------Điện Tử HTE-HCM chúc các bạn thành công-------------------------------------------------------