Đ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

MÀN HÌNH OLED 0.96INCH GIAO TIẾP I2C | www.vietnic.vn

Đó 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-------------------------------------------------------

Viết bình luận của bạn: