На моём столе эти два сенсора лежат рядом уже четвёртый год: синий DHT11 за сто с небольшим рублей и белый DHT22, купленный втрое дороже для теплицы. Первый вопрос, который мне задают на каждом мастер-классе про климат, звучит одинаково: а разницу вообще видно глазом? Свой первый ответ на собственный же вопрос я дал неверный — думал, дело в «качестве», как у мультиметров за тысячу и за десять тысяч. Разница не в качестве, а в конкретных цифрах, и каждая цифра из этой разницы ловится в мониторе порта за десять минут, без осциллографа и без второго комплекта рук.
Разбор «какой датчик выбрать под задачу» у нас уже был: урок про выбор между DHT11 и DHT22 сравнивает цену и критерии. Здесь я иду слоем ниже — что именно значат цифры ±2 и ±0,5, чем отличается замена в железе, где у двух сенсоров спрятана разница в байтах и почему один из них молча теряет минус. Схему подключать не будем: у обоих она совпадает до миллиметра, и в этом половина приятных новостей.
Точность и шаг: два разных паспорта
Откройте оба даташита и прочитайте подряд. DHT11 меряет температуру от 0 до +50 °C с паспортной погрешностью ±2 °C и влажность 20–80 % с погрешностью ±5 %. DHT22 живёт от −40 до +80 °C, обещает ±0,5 °C в плюсе и влажность 0–100 % с погрешностью около ±2 %. Но это ещё не самая заметная часть разницы. Самая заметная — шаг: DHT11 в состоянии выдать 23 градуса или 24, но никогда 23,7; один процент влажности, но не 44,8. DHT22 отдаёт десятые доли и по температуре, и по влажности.
Погрешность и шаг — независимые вещи, и путать их дорого. Погрешность ±2 °C — это разброс между показанным и настоящим; шаг в один градус — цена деления, мельче которой сенсор просто не видит. У DHT11 эти две величины одного порядка, и для любой автоматики с узким порогом это дурная весть: датчик может ровно держать «24.0», пока настоящий воздух уполз на 22,5. У DHT22 шаг в десять раз мельче погрешности — показания дышат, и по дыханию видно, что воздух живой, а не застыл в момент измерения.
Осталась скорость. DHT11 готов отвечать раз в секунду, DHT22 — раз в две. Для термостата и логгера обе цифры избыточны: воздух в комнате меняется на порядок медленнее. Разница становится заметной только на живом графике, где DHT22 рисует линию темпом в два раза медленнее, зато без плоских террас в целый градус.
Пара слов о влажности, потому что её обычно скидывают со счетов. Пять процентов допуска у DHT11 означают, что честные сорок пять процентов могут печататься как 40, как 45 и как 50 — и все три показания будут паспортно правильными. Для задачи «сухо или сыро» это терпимо. Но как только вы строите управление по порогу конденсата или по спреду точек росы, допуск ±5 % превращается в развилку решений шириной в десять процентов, и DHT22 с его ±2 % перестаёт быть роскошью — он становится способом перестать гадать, куда делись капли на внутренней стороне стекла.
Замена в железе и разница в байтах
Физическая замена — скучная, и это хорошо: три контакта, питание 3,3–5,5 В, сигнальная линия с подтяжкой 10 кОм. Распиновку и первый запуск мы разбирали в уроке про подключение DHT11, тонкости монтажа и длины линии — в уроке про подтяжку и монтаж. Вытаскиваете синий корпус из колодки, вставляете белый — схема не меняется, резистор не перепаивается. Единственная строка скетча, которая обязана измениться, — тип в конструкторе: DHT dht(2, DHT22) вместо DHT11.
Дальше начинается то, о чём туториалы молчат: посылка у сенсоров устроена по-разному. DHT11 передаёт по одному байту на величину — целые градусы и целые проценты, дробной части в посылке нет физически. DHT22 пакует значения в 16-битные слова с точностью до 0,1, а старший бит температурного слова играет роль знака: воздух минус восемь — датчик выставит этот бит, и библиотека выдаст −8,0. Поэтому DHT22 видит улицу зимой, а DHT11 минус показать не может ни при каком желании: знакового разряда в его посылке не существует. Хуже того, у нижней границы диапазона DHT11 не переходит в nan — он присылает правдоподобные нули, самый коварный режим отказа из всех возможных.
Под именем AM2302 продаётся тот же DHT22: отдельный урок про AM2302 раскладывает, что написано на корпусе и чем отличаются исполнения. Про цену скажу одной строкой: DHT22 стоит в 2–3 раза дороже, и это единственная графа сравнения, где DHT11 выигрывает всегда.
Есть у пары и расходная сторона, о которой вспоминают, когда проект уезжает с розетки на повербанк. По даташитам DHT22 в простое берёт 40–50 мкА, при опросе — 1–1,5 мА; DHT11 в простое тянет 100–150 мкА, при опросе до 2,5 мА. Для сетевой метеостанции разница незаметна, для кроны за зимний месяц — часы автономности: будите плату только на опрос и усыпляйте между чтениями, и белый сенсор вернёт вам заметную часть ночи.
#include <DHT.h> DHT dht(2, DHT22); // подставьте DHT11 — и смотрите на дельту const unsigned long PERIOD = 2000; // для DHT11 хватит 1000unsigned long lastPoll = 0;float prevT = -100.0; void setup() { Serial.begin(9600); dht.begin();} void loop() { if (millis() - lastPoll < PERIOD) return; lastPoll = millis(); float t = dht.readTemperature(); float h = dht.readHumidity(); if (isnan(t) || isnan(h)) { Serial.println("chtenie sorvalos, propuskayu"); return; } Serial.print(t, 1); Serial.print(" C "); Serial.print(h, 1); Serial.print(" %"); if (prevT > -90.0) { Serial.print(" delta "); Serial.print(t - prevT, 1); } Serial.println(); prevT = t;}В этом скетче мне важна не температура, а последняя колонка — дельта с предыдущим чтением. У живого DHT22 она гуляет на две-четыре десятых: воздух дышит, сенсор это видит. У DHT11 дельта либо стоит нулём, либо прыгает на целый градус — вы буквально смотрите на разницу разрешения двумя числами. Прогоните тот же скетч в Serial Plotter: DHT22 нарисует дрожащую линию, DHT11 — плоскую террасу с редкими ступенями по целый градус.
Константу PERIOD я вынес наверх не для красоты: при подмене датчика она меняется вместе с конструктором. Оставите старую секунду под DHT22 — половина чтений сорвётся в пустые строки; почему так и как это чинится, ниже по тексту.
И одна привычка на самый первый запуск: после подачи питания дайте сенсору выйти на режим. DHT22 готов отвечать примерно через две секунды после включения, DHT11 — через секунду; запрос раньше вежливо вернёт nan, и вы будете искать обрыв в линии, которой нет. Первый read в setup() — как раз тот случай: вынесите его в loop и дайте таймеру периода сделать первый тик, как того требует интервал опроса.
| Свойство | DHT11 | DHT22 | Что значит на практике |
|---|---|---|---|
| Температура | 0…+50 °C, ±2 °C, шаг 1 °C | −40…+80 °C, ±0,5 °C, шаг 0,1 °C | Минус и десятые доли существуют только у DHT22 |
| Влажность | 20–80 %, ±5 %, шаг 1 % | 0–100 %, около ±2 %, шаг 0,1 % | Пересушенный и насыщенный воздух DHT11 не видит |
| Темп опроса | раз в секунду | раз в две секунды | Оба с запасом для климата; DHT22 неторопливее |
| Замена и цена | — | та же колодка и тот же резистор | В коде меняется одна строка; цена выше в 2–3 раза |
Когда хватает DHT11: мой чек-лист
Мой чек-лист короткий и проверенный. Первый пункт — нет минуса: если самое холодное место, где живёт датчик, это +12 на подоконнике в феврале, DHT11 годится. Второй — автоматике нужен ответ «тепло или холодно», а не десятая доля: окно в два-три градуса спокойно шире, чем прыжки целыми градусами. Третий — влажность важна как факт, а не как цифра: для вытяжки в ванной разницы между 60 % и 63 % нет. Четвёртый — экземпляры считаются десятками: учебный класс, десять макеток, и разница цены выливается в ужин для всей группы.
Как только в задаче возникает любая из противоположностей — минус, узкое окно автоматики, десятые доли, доверие к каждой строке лога, — переплата за DHT22 окупается первой же ночью. Проверку «а не врёт ли конкретный экземпляр» оба сенсора проходят одинаково: сверкой с эталонным термометром, методика калибровки у нас разобрана отдельно. Десятые доли DHT22 ближе всего к работе в сырых помещениях — контроль сырости подвала как раз тот случай, где шаг в 0,1 % влажности решает, включить осушитель или подождать.
И последнее, что стоит сказать про пару. Сторонники DHT22 иногда обещают, что точный сенсор «сам исправит» плохую установку: датчик в сквозняке у двери, провод, приклеенный к трубе отопления, корпус в конденсате — ни один сенсор этого не переживает. Десятые доли DHT22 полезны ровно настолько, насколько честно собрана линия: подтяжка на месте, провод короче пары метров, питание не проседает. У DHT11 запас вразумительности, как ни странно, выше — его целые градусы сложно прочитать как высокую точность, и в этом есть своя честность перед самим собой.
- 1. Что означает шаг показаний сенсора?
- 2. Во сколько раз паспортная погрешность по температуре у DHT22 меньше, чем у DHT11?
- 3. Что пришлёт DHT11, если за окном минус три?
- 4. Что нужно поменять в скетче при замене DHT11 на DHT22?
- 5. Почему DHT11 никогда не показывает минус?
- ±2 и ±0,5 — паспортные погрешности; шаг 1 °C против 0,1 °C виден глазом в Serial за десять минут.
- Подключение у пары совпадает: замена — вытянуть корпус из колодки и поменять тип в конструкторе.
- Минус живёт в старшем бите температурного слова DHT22; у DHT11 знакового разряда нет, ниже нуля он молча шлёт нули.
- DHT22 отвечает раз в две секунды — при апгрейде поднимите период опроса, иначе половина чтений сорвётся.
- Чек-лист DHT11: нет минуса, окно автоматики шире двух градусов, влажность как факт, экземпляров много.
Частые вопросы по теме урока
- Что означает шаг показаний сенсора?
- Шаг — это цена деления самого сенсора: у DHT11 это целый градус и целый процент, дробную часть он не выдаёт никогда, независимо от библиотеки. Минимальную цену деления, мельче которой сенсор не видит
- Во сколько раз паспортная погрешность по температуре у DHT22 меньше, чем у DHT11?
- Даташиты обещают ±2 °C у DHT11 и ±0,5 °C у DHT22 в плюсе — разница вчетверо. А шаг показаний различается уже в десять раз: 1 °C против 0,1 °C. В четыре раза: ±0,5 против ±2
- Что пришлёт DHT11, если за окном минус три?
- Ниже нуля DHT11 не предупреждает: он шлёт правдоподобные нули, и график выглядит живым. Это самый коварный режим отказа — график зимней теплицы рисует штиль. 0.0 °C с обычной влажностью — правдоподобные нули
- Что нужно поменять в скетче при замене DHT11 на DHT22?
- Схема совпадает до миллиметра: меняется тип в строке DHT dht(…) и период — с одной секунды на две, иначе половина чтений сорвётся. Тип в конструкторе и период опроса
- Почему DHT11 никогда не показывает минус?
- DHT11 передаёт целые байты без знака. У DHT22 старший бит температурного слова — знак минуса, поэтому −8,0 приходит честно. В его посылке нет знакового разряда