DHT11 и Arduino: схема подключения, библиотека DHT, скетч и чем отличается от DHT22
DHT11 — голубой кубик с решёткой, самый дешёвый датчик температуры и влажности. Меряет с точностью в два градуса и пять процентов влажности, отвечает раз в секунду и подключается одним сигнальным проводом. Для комнатной метеостанции хватает; для чего-то точнее берут DHT22 в белом корпусе.
Датчик бывает голым, на четыре ножки, и на плате-модуле с тремя. У модуля подтягивающий резистор уже стоит; у голого его надо добавить — 10 кОм между DATA и питанием.
Схема подключения
Распиновка
| Провод | Куда и зачем |
|---|---|
| VCC | 3,3–5,5 В. |
| DATA | Сигнал на любой цифровой вывод. Подтяжка 10 кОм к VCC. |
| NC | Не подключается. У модулей на три вывода этой ножки нет. |
| GND | Земля. |
Характеристики
- Температура
- 0…+50 °C, ±2 °C
- Влажность
- 20–90 %, ±5 %
- Частота опроса
- не чаще раза в секунду
- Питание
- 3–5,5 В
- Ток
- до 2,5 мА при замере
- Интерфейс
- однопроводный, свой протокол
DHT11 или DHT22
Корпус и подключение у них одинаковые, библиотека одна, различается одна строка в коде. DHT22 меряет от −40 до +80 с точностью в полградуса и влажность 0–100 % с точностью 2 %, отвечает раз в две секунды. Стоит вдвое-втрое дороже.
Для комнатного термометра и «включить вентилятор при 28 градусах» DHT11 достаточно. Для теплицы, инкубатора, улицы зимой — только DHT22.
Библиотека
DHT sensor library (Adafruit)— Тянет Adafruit Unified Sensor. В строке DHT dht(PIN, DHT11) тип меняется на DHT22 при замене датчика.
Готовый скетч
#include <DHT.h>
const int DHT_PIN = 2;
DHT dht(DHT_PIN, DHT11); // для DHT22 — просто DHT22
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
delay(2000); // DHT11 не любит частых опросов
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Ошибка чтения — проверьте провод и подтяжку");
return;
}
Serial.print("Температура: ");
Serial.print(t, 0);
Serial.print(" °C Влажность: ");
Serial.print(h, 0);
Serial.println(" %");
}Скетч собирается arduino-cli под Arduino UNO
Проверка isnan обязательна: датчик изредка не отвечает, и без неё в лог полетят nan.
Частые ошибки
Читается nan
Нет подтягивающего резистора на голом датчике или перепутаны ножки. Нумерация слева направо при решётке к себе: VCC, DATA, NC, GND.
Показания не меняются
Опрос чаще раза в секунду — датчик отдаёт прошлое значение. delay между чтениями не меньше 1000, а лучше 2000.
Температура на два градуса выше комнатной
Это его точность, плюс нагрев от платы рядом. Отнесите датчик на проводах от Arduino.
Влажность 95 % в сухой комнате
Датчик отсырел при хранении. Сутки на батарее приводят его в чувство; если нет — брак, они бывают.
Не работает на длинном проводе
Однопроводный протокол чувствителен к длине. До пяти метров — уменьшите подтяжку до 4,7 кОм; дальше — датчик с I2C, например AHT20.
Что понадобится
- Датчик DHT11 (модуль на три вывода или голый)
- Резистор 10 кОм для голого датчика
- Arduino UNO
- Провода «папа-мама»