P2 – Nhiệt độ & độ ẩm với DHT11

Cảm biến DHT11 cho phép đọc cả nhiệt độ và độ ẩm. Với giá thành rẻ, đây là một lựa chọn phù hợp cho những dự án nhỏ không cần độ chính xác cao. Phiên bản DHT22 có độ chính xác cao hơn nhưng đắt tiền hơn.

Điện áp nguồn nuôi  3V –> 5V. Chân dữ liệu sử dụng tối đa 2.5mA.

Độ chính xác:

  •  20-80% độ ẩm với sai số 5%
  •  0-50°C nhiệt độ với sai số ±2°C

Tuy nhiên, tốc độ đọc từ cảm biến chỉ đạt  1 Hz (mỗi giây đọc 1 lần).

Khi kết nối với vi xử lý cần treo trở cao lên chân Data.

Chú ý chân 3 bỏ trống

Đối với cảm biến có gắn sẵn bo hỗ trợ thì không cần treo thêm trở:

Sơ đồ kết nối:

Chương trình có sử dụng thư viện ngoài:

Tải thư viện:

1/ DHT

2/ AdafruitSensor

/*************************************************************/
// Thư viện
#include <DHT.h>
#include <LiquidCrystal.h>
/**************************************************************/
#define DHTPIN 10 // Chân 10 trên bo Uno
#define DHTTYPE DHT11

DHT dht11(DHTPIN, DHTTYPE);
/**************************************************************/
// LCD display
const int rs = 12, en = 11, d4 = 2, d5 = 3, d6 = 4, d7 = 5;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//
unsigned long CurrentTime = 0;
unsigned long LastRead = 0;
unsigned long ReadInterval = 2100;
//
int h = 0;
int t = 0;
//
void setup(void)
{
 //
 Serial.begin(9600);
 Serial.println("Checking DHT11");
 //
 // LCD 16x2
 lcd.begin(16, 2);
 lcd.setCursor(0, 0);
 lcd.print("Nhiet do: ");
 lcd.setCursor(0, 1);
 lcd.print("Do am: ");
 //
 // Khởi động cảm biến
 dht11.begin();
}
void loop(void)
{
 CurrentTime = millis();
 //
 //Cách khoảng thời gian để đọc
 if (CurrentTime - LastRead > ReadInterval)
 {
 /**********************************************************/
 h = dht11.readHumidity(); // Độ ẩm
 t = dht11.readTemperature(); // Nhiệt độ
 /**************************************************************/
 Serial.print("Temperature: ");
 Serial.println(t);
 //
 Serial.print("Humidity: ");
 Serial.println(h);
 //
 lcd.setCursor(11, 0);
 lcd.print(t);
 lcd.print("C");
 //
 lcd.setCursor(11, 1);
 lcd.print(h);
 lcd.print("%");
 //
 LastRead = millis();
 }
}

Leave a Reply

Your email address will not be published. Required fields are marked *