DHT11 (AM2302) цифровий датчик температури та вологості. Вимірювання температури відбувається за допомогою терморезистора з негативним температурним коефіцієнтом (NTC). Відносна вологість вимірюється ємнісним сенсором. Дитчики калібруются виробником, тому забеспечують високу стабільність та лінійність показників температури і вологості.
- Живлення VCC 3.3 – 5V
- Діапазон вимірювання температури від 0 °С до 50 °С
- Діапазон вимірювання вологості від 20 % до 90 %
- Чутливість вимірювання температури ±1 °С
- Точність вимірювання температури ±2 °С
- Чутливість вимірювання вологості ±4 % RH
- Точність вимірювання вологості 5 % RH
- Частота дискретизації 2 секунди
- Струм споживання при вимірюванні 3.3V – 0.5mA, 5V – 1.5mA
- Струм споживання в режимі очікування 3.3V – 100uA, 5V – 150uA
DHT22 (AM2302) цифровий датчик температури та вологості підвищеної точності. Також DHT22 збільшені діапазони вимірювання.
- Живлення VCC 3.3 – 6V
- Діапазон вимірювання температури від -40 °С до 80 °С
- Діапазон вимірювання вологості від 0 % до 100 %
- Чутливість вимірювання температури ±0.1 °С
- Точність вимірювання температури ±0.5 °С
- Чутливість вимірювання вологості ±0.1 % RH
- Точність вимірювання вологості 2 % RH
- Частота дискретизації 2 секунди
- Середній струм споживання при вимірюванні 3.3V – 1mA, 6V – 1.5mA
- Струм споживання в режимі очікування 3.3V – 40uA, 6V – 50uA
Виводи:
1. VCC живлення
2. Data Out – вивід даних
3. NC – не використовується
4. GND загальний
Схема підключення
1 вивід підключаємо 5V від Arduino.
2 вивід підключаємо до 2 піну Arduino, та через резистор на 10kOm до живлення.
3 вивід не використовується.
4 вивід підключаєм до GND.
Програмний код для Arduino Uno
У PlatformIO створюєм новий проект, обираєм мікроконтролер Arduino Uno, та копіюєм наступний код у файл main.cpp в папці src.
Розкоментуйте в коді свій датчик.
#include <Arduino.h>
#include "DHT.h"
#include <Adafruit_Sensor.h>
#define DHTPIN 2 // Пін даних датчика
// Розкоментуйте свій датчик
//#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22
//#define DHTTYPE DHT21 // DHT 21
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600);
dht.begin();
}
void loop()
{
float humidity = dht.readHumidity(); // Зчитуєм значення вологості
float temperature = dht.readTemperature(); // Зчитуєм значення температури
// Перевірка чи дісні дані від датчика, якщо вони NaN (не число), значить щось пішло не так.
if (isnan(humidity) || isnan(temperature))
{
Serial.println("Failed to read from DHT");
}
else
{
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
}
delay(2000);
}
Для підключення бібліотеки DHT додайте наступний рядок у файл platformio.ini.
lib_deps = adafruit/DHT sensor library@^1.4.3
Компілюємо та завантажуєм на плату. Даний приклад раз у дві секунди буде зчитувати дані з DHT11 та виводити у монітор серійного порта.
Вивід температури та вологості на LCD 1602
Додаємо диплей підключення LCD1602 дисплея по I2C.
Додаємо в код вивід даних на дисплей.
#include <Arduino.h>
#include "DHT.h"
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2 // Пін даних датчика
// Розкоментуйте свій датчик
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22
//#define DHTTYPE DHT21 // DHT 21
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte degree[8] = // символ градуса
{
B00111,
B00101,
B00111,
B00000,
B00000,
B00000,
B00000,
};
void setup()
{
dht.begin();
lcd.init();
lcd.backlight();
lcd.createChar(1, degree); // Створюєм символ під номером 1
}
void loop()
{
float humidity = dht.readHumidity(); // Зчитуєм значення вологості
float temperature = dht.readTemperature(); // Зчитуєм значення температури
// Перевірка чи дісні дані від датчика, якщо вони NaN (не число), значить щось пішло не так
if (isnan(humidity) || isnan(temperature))
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Failed read DHT");
}
else
{
lcd.setCursor(0, 0);
lcd.print("Hum: %");
lcd.setCursor(9, 0);
lcd.print(humidity, 1);
lcd.setCursor(0, 1);
lcd.print("Temp ""\1C"); // '\1'platformio.ini виводимо створений символ
lcd.setCursor(9, 1);
lcd.print(temperature, 1);
}
delay(2000);
}
У файл platformio.ini потрібно додати бібліотеку LiquidCrystal_I2C.
lib_deps =
adafruit/DHT sensor library @ ^1.4.3
marcoschwartz/LiquidCrystal_I2C@^1.1.4
Компілюємо та завантажуєм на плату. Даний приклад один раз у дві секунди буде зчитувати дані з датчика (DHT11, DHT21, DHT22) та виводити на дисплей. Період зчитування можна встановити свій, але не менше 2 секунд.