У этого урока было два автора: я и моя привычка паять в спешке. Первый DHT11 я подключил за пять минут, гордо открыл монитор порта — и два часа искал ошибку в коде, которого не было. Датчик просто стоял на макетке зеркально: я смотрел на него со стороны решётки, а ножки считал со стороны выводов, и VCC оказался на земле. С тех пор я считаю ножки одним и тем же способом и вкладываю в сенсор десять секунд внимания до подачи питания — дешевле, чем два часа отладки вслепую.
Схема у DHT11 примитивная: три рабочих провода и один резистор. Но именно на этом примитиве ловятся все — от перепутанных шин макетки до непропаянной подтяжки на модуле. Пройдём монтаж от корпуса до скетча и соберём чек-лист ошибок, каждая из которых выглядит как загадочный nan в мониторе порта.
Распиновка: четыре ножки, три контакта, один зеркальный подвох
Голый сенсор в синем корпусе имеет четыре ножки. Если держать его решёткой к себе и выводами вниз, счёт идёт слева направо: первая — VCC (питание 3,3–5,5 В), вторая — DATA (линия обмена), третья — NC, она никуда не подключается, четвёртая — GND. NC здесь — не заводской брак, а просто незадействованный вывод, и гнаться им в землю не нужно. Модуль на платке проще: три контакта с подписями VCC, DATA (иногда OUT или SDA — не пугайтесь, это не I2C, подпись вводит в заблуждение) и GND, потому что подтяжка уже распаяна.
Зеркальный подвох из истории выше лечится правилом: считать ножки, глядя на решётку, — тогда VCC слева. Со стороны выводов порядок перевернётся, и в спешке легко посадить питание на землю. Ножки у голого сенсора короткие и пружинят: я всегда вставляю его в макетку до упора, ровно, без перекоса — полувыжатая ножка даёт контакт через раз, и вы будете ловить nan, которого нет в коде. Базовая схема с первыми данными, если вы ещё не проходили её, разобрана в уроке про подключение и первые данные. Ток сенсор ест копеечный — единицы миллиампер, поэтому питать можно прямо от шины 5 В Arduino без всяких буферов. А вот от 3,3 В я бы воздержался: формально диапазон питания это разрешает, но дешёвые клоны при просевшем питании начинают срываться через раз, и вы получите nan не по вине схемы.
Подтяжка 10 кОм: зачем она и когда уже стоит на плате
Линия DATA между сеансами обмена висит в воздухе: сенсор молчит, Arduino молчит, а на неподключённом проводе уровень плавает от наводок — рукой провели, рядом лампа зажглась. Протокол DHT требует, чтобы в покое линия была прижата к питанию. Для этого между VCC и DATA ставится резистор 10 кОм — та самая подтяжка. Без неё фронты сигнала размазываются, из 40 бит обмена половина читается неверно, и контрольная сумма отбраковывает ответ: у вас в мониторе появляется nan.
Откуда цифра 10 кОм: типичный рабочий диапазон 4,7–10 кОм. Слабее (меньше килоом) — линия прижата жёстче, но сенсору труднее её опускать; сильнее (20 кОм и выше) — подтяжка почти не работает при любом шуме. Для метра провода на макетке золотая середина — 10 кОм; как читать цветовой код резисторов, чтобы найти нужный в пакете, мы разбирали в уроке про резисторы — ищите коричневый, чёрный, оранжевый. Если вы уже поджимали кнопку через INPUT_PULLUP в уроке про digitalRead, вы пользовались тем же приёмом, только встроенным в порт: там подтяжка к питанию спрятана внутри микроконтроллера. С DHT встроенной подтяжки недостаточно для длинных проводов, потому она выносится наружу, а её номинал подбирается по длине линии.
Если у вас модуль на платке — резистор уже стоит, и искать его надо глазами: маленький чип с маркировкой 103, это 10 × 10³ Ом. Здесь живёт коварный случай из моей практики: модуль выглядит рабочим, а место под резистор на плате пустое — заводская экономика, пустая позиция в пайке. Такой модуль на макетке молчит или сыплет nan через раз, пока вы не припаяете резистор сами. Второй нюанс модулей — некоторые из них выносят DATA на контакт с подписью SDA: к шине I2C это отношения не имеет, схема подключения та же, что у голого сенсора. Третий — платки без маркировки вовсе: если чип не опознан, прозвоните мультиметром в режиме омметра между шиной питания и линией данных — при отключённом от Arduino проводе вы должны увидеть порядка десяти килоом, а не бесконечность.
Чек-лист монтажа в порядке проверки
Когда схема не оживает, я проверяю не по наитию, а по списку — от действий за пять секунд к действиям за пять минут. Порядок неслучаен: он отсортирован по частоте причин, с которыми я сталкивался сам и на форумах. Девяносто процентов случаев закрывается первыми тремя пунктами, до четвёртого дело доходит в день, когда вы принесли новый модуль с рынка.
- Питание на шине 5 В, а не 3,3 В — и не на соседней дорожке макетки. Проверка мультиметром между VCC и GND сенсора: должно быть близко к 5,0 В; просадка ниже 4,6 В под нагрузкой уже подозрительна.
- Ориентация корпуса: решётка к вам, выводы вниз, VCC слева. NC никуда не идёт. На модуле сверяйте подписи, а не положение платки.
- DATA в цифровом пине, который указан в скетче. В наших примерах — пин 2. Ошибка на один пин вправо даёт ровно тот же nan, а пин 13 с его светодиодом создаст иллюзию, что всё работает.
- Подтяжка: на голом сенсоре резистор 10 кОм между VCC и DATA; на модуле — маркировка 103 на плате. Пустое место под резистором = датчик без подтяжки.
- Контакты макетки: ножки сенсора сидят в своих рядах, шины питания по краям не разорваны посередине. Как устроены рельсы макетки, показано в уроке про макетку.
- delay в скетче не короче 1000 мс для DHT11: более частый опрос даёт nan даже при идеальном монтаже. И помните: каждое чтение блокирует скетч на 4–5 миллисекунд — в проекты с сервами опрос уезжает на millis.
Скетч с проверкой: ловим nan до того, как он поймает вас
Скетч ниже — мой шаблон для нового сенсора на столе. Он печатает пары t= и h= и зажигает светодиод на пине 13, если чтение прошло проверку диапазона. Светодиод здесь — не украшение: когда вы шевелите провода, индикатор показывает, что связь живая, не заглядывая в монитор порта. Проверка построена на границах диапазона, а не на isnan: в симуляторе этого урока и в наших материалах вообще функция isnan не объявлена, а проверка границ работает без включений и с тем же успехом отделяет сорванное чтение от честного.
Порядок поиска она не меняет: сначала питание и ориентация, потом подтяжка, потом пины, и только в последнюю очередь — код. Если все пункты чек-листа зелёные, а nan живёт, виноват экземпляр сенсора: клоны бракуются на удивление часто, и замена на второй стоит копейки. Дальше по разделу — выбор между DHT11 и DHT22, если вы ещё на этапе покупки, и термостат с гистерезисом как первое серьёзное применение данных. Для выносного сенсора на улице с длинным кабелем и конденсатом есть отдельный материал про установку DHT22 и AM2302.
#include <DHT.h> DHT dht(2, DHT11); void setup() { pinMode(13, OUTPUT); Serial.begin(9600); dht.begin();} void loop() { float t = dht.readTemperature(); float h = dht.readHumidity(); // у DHT11 показаний выше 50 или ниже 0 не бывает: // выход за диапазон значит, что чтение сорвалось if (t > 50.0 || t < 0.0 || h < 0.0 || h > 90.0) { digitalWrite(13, LOW); Serial.println("fail: net otveta"); } else { digitalWrite(13, HIGH); Serial.print("t="); Serial.print(t); Serial.print(" h="); Serial.println(h); } delay(1000);}- 1. Где у голого DHT11 ножка DATA, если держать сенсор решёткой к себе выводами вниз?
- 2. Зачем резистор 10 кОм между VCC и DATA?
- 3. На плате модуля DHT11 стоит чип с маркировкой 103. Что это?
- 4. Монтаж по чек-листу проверен, но в мониторе появляется nan раз в несколько чтений. Что проверить в первую очередь?
- 5. Можно ли питать DHT11 от шины 3,3 В?
- Порядок ножек при виде на решётку: VCC, DATA, NC, GND. NC не подключается никуда.
- Голый сенсор — резистор 10 кОм между VCC и DATA; модуль — ищите чип 103, и проверьте, что он реально распаян.
- Питание 5 В со шины Arduino; 3,3 В формально допустимо, но клоны при нём срываются.
- Рабочий диапазон подтяжки 4,7–10 кОм; 10 кОм — золотая середина для метра провода на макетке.
- Скетч-шаблон с проверкой диапазона и светодиодом на пине 13 отделяет сорванное чтение от честного без isnan.
Частые вопросы по теме урока
- Где у голого DHT11 ножка DATA, если держать сенсор решёткой к себе выводами вниз?
- Порядок слева направо: VCC, DATA, NC, GND. DATA — вторая. Третья ножка NC никуда не подключается, это не брак. Вторая слева
- Зачем резистор 10 кОм между VCC и DATA?
- Линия DATA в покое висит в воздухе, и наводки ломают фронты сигнала. Подтяжка держит её прижатой к 5 В, чтобы все 40 бит обмена доходили честно. Он прижимает линию данных к питанию в паузах между обменом
- На плате модуля DHT11 стоит чип с маркировкой 103. Что это?
- 103 расшифровывается как 10 × 10³ Ом = 10 кОм. Значит подтяжка уже на борту и внешний резистор не нужен. Резистор 10 кОм — штатная подтяжка
- Монтаж по чек-листу проверен, но в мониторе появляется nan раз в несколько чтений. Что проверить в первую очередь?
- Порядок из урока: питание, ориентация и контакты, подтяжка, пин данных, delay не короче 1000 мс. Код и IDE — в самом конце списка. Питание сенсора и контакты макетки, затем частоту опроса
- Можно ли питать DHT11 от шины 3,3 В?
- Диапазон питания 3,3–5,5 В, но практика с дешёвыми экземплярами упрямее даташита: при 3,3 В они срываются через раз. Мой выбор — 5 В. Формально можно, но клоны при просевшем питании срываются — надёжнее 5 В