В январе моя зимняя теплица осталась без глаз. Я купил два DHT11 — по сто рублей за штуку, поставил один на рассаду, второй на входе, и первое же утро с минусом за окном выдало в монитор порта ровные нули. Не ошибку, не nan — честные 0.0 °C и 27 % влажности, с той стороны, где датчик физически не видит. Сенсор честно сказал мне всё, что умеет: его диапазон начинается с нуля, а в теплице было минус три. Проект на две недели сел в лужу, а я пошёл перечитывать даташит вместо форума.
Эта ошибка стоила не денег — датчики дешёвые — а двух недель пропавших данных. С тех пор я начинаю выбор сенсора не с цены, а с диапазона и разрешения, и вам предлагаю пройтись по этому же маршруту. Ниже — разница между DHT11 и DHT22 по цифрам, рамка для решения под конкретную задачу и пара альтернатив, о которых стоит вспомнить до покупки, а не после.
Разница по цифрам: диапазон, точность, разрешение
Оба сенсора измеряют одно и то же — температуру и относительную влажность, — но на разных условиях. DHT11 живёт в диапазоне от 0 до 50 °C с заявленной точностью ±2 °C и влажностью 20–80 %; опрашивать его можно раз в секунду. DHT22 покрывает от −40 до +80 °C с точностью ±0,5 °C в плюсе и влажностью 0–100 %, но отвечать готов не чаще раза в две секунды. Питание у обоих одинаковое — 3,3–5,5 В, поэтому замена одного сенсора другим в готовой схеме безопасна: ни резистор, ни пин трогать не придётся.
Теперь деталь, которую проглатывают почти все сравнения: точность и разрешение — разные вещи. Точность ±2 °C означает, что настоящий градус может отличаться от показанного на два в любую сторону. А разрешение — это минимальный шаг, который сенсор вообще способен выдать. У DHT11 шаг равен одному градусу и одному проценту влажности: вы никогда не увидите 23,7 °C, только 23 или 24. У DHT22 шаг 0,1 — и это видно невооружённым глазом на графике: подключите датчик к Serial Plotter, и DHT22 нарисует плавную лесенку при сквозняке, а DHT11 — плоскую ступеньку, которая подпрыгивает на целый градус.
Отдельная штука — скорость обновления. DHT11 пересчитывает внутренние значения раз в секунду, DHT22 — раз в две, и это не лень производителя, а время на перезарядку ёмкостного элемента. Для комнаты неважно, а вот в системе с быстрым контуром — обдув при перегреве, отсечка нагревателя — лишняя секунда реакции уже проектируется в логику.
Пара оговорок практика. Точность ±0,5 °C у DHT22 — это про фирменный Aosong; клоны с маркетплейсов легко гуляют на градус-полтора, особенно по влажности у краёв диапазона. И ещё: в интернете гуляет цифра «DHT22 меряет до +125 °C» — она приползла из чужого даташита; по официальному листу Aosong верхняя граница ровно +80, и выше его испытаний не проводилось. Установка сенсора у печки на вере в +125 — способ получить корпус с оплывшей решёткой.
| Параметр | DHT11 | DHT22 (AM2302) |
|---|---|---|
| Температура | 0…50 °C | −40…+80 °C |
| Точность по температуре | ±2 °C | ±0,5 °C в плюсе |
| Шаг показаний | 1 °C / 1 % | 0,1 °C / 0,1 % |
| Влажность | 20–80 % | 0–100 %, ±2–5 % |
| Опрос не чаще | 1 Гц | 0,5 Гц (раз в 2 с) |
| Цена за штуку | ≈80–150 ₽ | ≈250–450 ₽ |
Рамка решения: где DHT11 не хуже, а где без вариантов
Моё правило, с границей применимости: если сенсор едет в отапливаемую комнату и его показания читает человек — берите DHT11 и не думайте. Кухня, класс, офис, коробка с реле, у которого греется катушка: ±2 °C здесь никого не колышет, зато цена и живучесть у DHT11 образцовые. Он переживает пыль, тыканье пальцами и переезды в ящике с макетками — я топил один экземпляр в пайке трижды, он работает до сих пор.
Как только датчик попадает туда, где минус, где нужна десятая доля градуса или где по его числам принимается решение автоматикой — приходит DHT22. Улица и неотапливаемая теплица: у DHT11 минус не существует в принципе. Инкубатор и ферментация: там важна каждая десятая. Термостат с порогом срабатывания в один градус: на DHT11 он будет дребезжать, потому что показания скачут ступеньками по целый градус. Мониторинг микроклимата в мастерской я веду DHT11 четвёртый год: в кладовке с банками краски он показывает 17–19 °C зимой, и мне этого хватает с запасом — я не выпариваю растворители с допуском в полградуса. Кстати, про дребезг порога и гистерезис мы отдельно собирали термостат в уроке про термореле — там эта разница видна в железе.
Серая зона — балкон, погреб, гараж без отопления. Формально DHT22 нужен по диапазону, но если зимой там всё равно минус, я бы сначала спросил себя, зачем вообще туда датчик на DHT-протоколе, и посмотрел в сторону альтернатив ниже.
Три альтернативы, о которых вспомните до заказа
DHT — не единственный зверь в вольере. Первый сосед — DS18B20: цифровой термистор на шине 1-Wire, точность ±0,5 °C, диапазон до +125 °C, есть герметичные исполнения на зонде — для котла, аквариума или улицы он часто честнее DHT22, но влажности не меряет вообще. Принцип чтения одного провода мы разбирали в уроке про термистор NTC — там же видно, чем цифровой сенсор удобнее аналогового с формулой Штайнхарта.
Второй — BME280: температура, влажность и давление сразу, точность по влажности заметно выше, он не плывёт после пары месяцев в сыром воздухе — но цена в четыре-пять раз выше DHT22, живёт он на шине I2C, а давления в моём списке задач пока не было ни разу. Третий — родной брат AM2320: тот же DHT22 внутри, но с I2C-интерфейсом, когда вы хотите повесить пять сенсоров на два провода и не разводить пять линий данных с пятью подтяжками.
Практический вывод: DHT остаётся лучшим вариантом по цене за готовую пару «температура плюс влажность» с одним проводом данных. Как только проект требует давления, шины с адресами или реально грязной среды — перебирайтесь на соседей. А если остаётесь — дальше по тексту вся разница сводится к одной строке кода, в чём вы сейчас убедитесь.
Код: один скетч на оба сенсора
Библиотека DHT прячет всю разницу моделей за одним аргументом конструктора. Ставится она через менеджер библиотек — как это делается шаг за шагом, показано в уроке про библиотеки в IDE, ищите «DHT sensor library» от Adafruit. Дальше сменить датчик — значит поменять одну константу, а не скетч:
Единственная ловушка при переходе на DHT22 — частота опроса. delay(1000), привычный по DHT11, для DHT22 уже слишком быстрый: он отвечает раз в две секунды, и при более частом опросе библиотека начнёт возвращать старые значения или nan. Если у вас в коде уже живёт delay(2000) — скетч готов к обоим сенсорам. Сами схемы подключения у братьев совпадают до винта: три провода и подтяжка описаны в уроке про подключение DHT11, а в следующем материале раздела мы выносим DHT22 на улицу и воюем с конденсатом и длинным кабелем.
#include <DHT.h> #define DHTPIN 2#define DHTTYPE DHT11 // DHT11 или DHT22 — других правок нет DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin(); Serial.println("Start");} void loop() { float t = dht.readTemperature(); float h = dht.readHumidity(); // у DHT11 шаг целый, у DHT22 будет десятая Serial.print("t="); Serial.print(t); Serial.print(" h="); Serial.println(h); // DHT11 - раз в секунду, DHT22 - раз в две delay(2000);}- 1. Проект — инкубатор, где нужно держать 37,5 °C с допуском в полградуса. Какой сенсор взять?
- 2. DHT11 в мониторе порта показывает 0.0 °C, а на улице мороз. Что происходит?
- 3. Какая частота опроса безопасна для DHT22?
- 4. Чем разрешение отличается от точности?
- 5. Нужен герметичный зонд в котёл с температурой до +95 °C и только температура. Что разумнее?
- DHT11: 0…50 °C, ±2 °C, шаг целый, влажность 20–80 %, опрос 1 Гц. DHT22: −40…+80 °C, ±0,5 °C, шаг 0,1, 0–100 %, опрос раз в 2 с.
- Точность и разрешение — разные вещи: DHT11 никогда не покажет 23,7 °C, между его шагами пусто.
- Комната и глаза человека — DHT11. Минус, десятые градуса, автоматика по порогу — DHT22.
- Цифра «до +125 °C» для DHT22 из чужих статей: официальный предел Aosong — +80 °C.
- Смена датчика в коде — одна константа DHTTYPE; при переходе на DHT22 проверьте delay не меньше 2000 мс.
Частые вопросы по теме урока
- Проект — инкубатор, где нужно держать 37,5 °C с допуском в полградуса. Какой сенсор взять?
- У DHT11 минимальный шаг — целый градус: показания 37 и 38, между ними пусто. Инкубатор на таком сенсоре вслепую. DHT22 с шагом 0,1 °C и точностью ±0,5 °C укладывается в допуск. DHT22 — у него шаг 0,1 °C и точность ±0,5 °C
- DHT11 в мониторе порта показывает 0.0 °C, а на улице мороз. Что происходит?
- Диапазон DHT11 начинается с нуля. Всё, что ниже, сенсор отрисовать не может — отсюда ровные нули в январе из истории в начале урока. Для минуса нужен DHT22. Показания ушли ниже диапазона: DHT11 меряет только от 0 °C
- Какая частота опроса безопасна для DHT22?
- DHT22 пересчитывает значения внутри корпуса раз в две секунды. Более частый опрос не ускоряет данные, а возвращает устаревшие значения или nan. Не чаще раза в две секунды
- Чем разрешение отличается от точности?
- Точность ±2 °C — насколько показанное может отличаться от настоящего. Разрешение 1 °C у DHT11 — что между 23 и 24 градусов не существует, шаг целый. У DHT22 шаг 0,1. Разрешение — минимальный шаг показаний, точность — возможное отклонение от реального значения
- Нужен герметичный зонд в котёл с температурой до +95 °C и только температура. Что разумнее?
- Цифра +125 °C для DHT22 — миф из чужого даташита, официальный предел +80. DS18B20 держит до +125 °C и есть в герметичных зондах, хоть и не меряет влажность. DS18B20 в герметичном исполнении