Симулятор датчика температуры: проверьте DHT11, DHT22 и DS18B20 без платы
Датчик температуры — покупка, которая едет с рынка дольше всего остального набора, и первый кандидат на проверку «а вдруг брак». Хорошая новость: половину проверки можно сделать до вскрытия пакета. В уроке про подключение DHT11 и DHT22 разобраны распиновка, подтяжка и первая строка в мониторе — а здесь методика проверки самого датчика и вашего кода в браузере: ползунки вместо воздуха, монитор порта вместо мультиметра.
Стенд открывается без установки и регистрации: симулятор исполняет ваш скетч прямо в браузере, датчик на стенде крутится ползунками, и реакция кода видна мгновенно. Ниже — пять проверок за пять минут, скетч-проба чтения и честная таблица, где кончается экран и начинается железо.
Что проверяется в браузере за пять минут
Стенд собирается сам: датчик DHT встаёт на свою шину, в мониторе порта печатаются показания, а главное — у датчика есть ползунки температуры и влажности. Крутите ползунок — скетч реагирует, как будто к корпусу поднесли тёплую ладонь. Вся логика чтения и порогов проверяется до того, как датчик приедет с рынка: это и есть работа симулятора, а не замена макетки.
- Пошевелите ползунок температуры: в мониторе t= меняется вслед, скетч печатает строку за строкой — связь «датчик — код» жива.
- Выставьте температуру выше порога из скетча (в пробе ниже — 27): ветка термостата переключится и напечатает своё состояние.
- Верните ползунок ниже: состояние вернулось назад — флаги и гистерезис работают в обе стороны.
- Сократите интервал опроса до 100 мс и перечитайте код: модель ответит молча, а плата отзовётся nan — место для фильтра видно заранее.
- Сравните DHT22 и DHT11 на одном пине: десятые доли против целых значений — разница паспортов видна прямо в мониторе.
Скетч-проба: чтение датчика
#include <DHT.h> DHT dht(2, DHT22); // DHT11 — замените тип здесь unsigned long lastRead = 0;const unsigned long INTERVAL = 2000; // DHT11 хватает 1000 void setup() { Serial.begin(9600); dht.begin();} void loop() { if (millis() - lastRead < INTERVAL) return; lastRead = millis(); float t = dht.readTemperature(); float h = dht.readHumidity(); if (isnan(t) || isnan(h)) { // срыв чтения — молчим, логику не ломаем Serial.println("nan"); return; } Serial.print("t="); Serial.print(t); Serial.print(" h="); Serial.println(h); if (t >= 27.0) { Serial.println("vent: ON"); // порог — пример термостата } else if (t <= 26.0) { Serial.println("vent: OFF"); }}Монитор печает пары t=… h=… каждые две секунды, а при пересечении порога добавляет vent: ON/OFF. Двигайте ползунок по экрану — цифра поедет вслед: это и есть живая связь. Пороги 27 и 26 взяты для примера, свои подставьте сразу; механику зазора между ними разбирает урок про термостат с гистерезисом. В движке readTemperature() отдаёт ровно значение ползунка с мелким шумом — цифры в мониторе дрожат, как у живого датчика.
Ползунок вместо датчика
Ползунок — главный инструмент страницы. Диапазон модели: от -40 до +80 °C с шагом в полградуса, влажность от 0 до 100 %. Это паспорт DHT22; у DHT11 скромнее — от 0 до +50 °C и влажность 20-90 %, так что нижние градусы проверяйте с оглядкой на свой экземпляр. Поднимайте температуру ступенями по пять градусов и заметьте, на какой ступени скетч переключился: рабочий порог найден до сборки.
Разрядность, опорное напряжение и шаг измерения — откуда берётся 1023.
Подгружаем интерактив…
Цифровые DHT и DS18B20 отдают готовые градусы через библиотеку; аналоговые — термисторы и LM35 — идут через analogRead, и там на входе число 0-1023, которое код переводит в градусы сам. Лаборатория выше именно про эту механику: ползунок — вход, число — решение. Принцип «двигай вход, смотри на реакцию» у обеих веток общий, поэтому навык переносится без переучивания.
Что видит симулятор, а что остаётся железу
| Проверка | Симулятор | Только железо |
|---|---|---|
| Чтение, интервалы, пороги, флаги | целиком, один в один | то же |
| Реакция на смену температуры | мгновенно, ползунком | DHT отвечает до 2 секунд |
| Точность и разброс | нет: модель показывает ровные цифры | ±2 °C у DHT11, ±0,5 °C у DHT22 |
| Нагрев от руки, дыхания, корпуса | нет | да — классическая ловушка |
| Паразитный режим DS18B20 | не отличить от нормального питания | да, со строгими окнами конверсии |
| Подтяжка DATA 4,7-10 кОм | не нужна: стенд рисует связь | да, без неё — nan |
Граница простая: всё, что живёт в коде, проверяется в браузере целиком; всё, что живёт в электричестве и пластике, — только на сборке. Отсюда и порядок: сначала логика на экране, потом подтяжка, конденсат и нагрев — на макетке.
Грабли, которые не всплывают на экране
- Опрос чаще интервала: DHT11 держит 1 Гц, DHT22 — раз в 2 секунды. Модель отвечает мгновенно и маскирует спешку, плата отзовётся nan — фильтр из пробы обязателен.
- Паразитный режим DS18B20: питание через сигнальную линию со строгими окнами замера. В модели он не отличим от нормального — на железе без сильной подтяжки на время конверсии термометр молчит.
- Нагрев от корпуса: датчик, приклеенный к горячей плате, покажет на 3-5 °C выше комнаты. Модель чиста — ловушка всплывает только в сборе.
- Разброс экземпляров: ±2 °C у DHT11 и ±0,5 °C у DHT22 — паспортные, а не гарантированные цифры. Сверьте с эталонным термометром, прежде чем калибровать пороги.
- Длина и качество линии: разболтанный контакт DATA рвёт показания в nan без вины кода. Провод до метра — спокойный диапазон.
Когда переходить на макетку
Когда пять проверок зелёные и пороги найдены — переносите скетч на плату без правок: подтяжка DATA 4,7-10 кОм, тот же интервал, тот же фильтр nan. Дальше железо добавит то, чего на экране нет, и это нормально: экран отвечает за голову, макетка — за руки. Уличную сборку с выносным датчиком ведёт лендинг про DHT22 на улице, а полный маршрут по датчикам лежит в разделе dht самоучителя.