Термостат для рассады я собирал по собственным урокам: DHT22, реле, гистерезис — всё как надо. Прибор честно держал 25 °C, так было написано в мониторе. Рассада при этом тянулась, как будто ей холодно, а спиртовой термометр, который я ткнул прямо в ящик, показывал 22. Два с половиной градуса разницы я неделю искал в коде: переписывал пороги, добавлял усреднение, перезаливал скетч — пока не положил рядом с датчиком второй термометр и не признал очевидное: врать может не программа, а сам сенсор.
Калибровка — это не про «сделать точно». Это про «знать, насколько врёт именно мой экземпляр», и жить с этим знанием. В этом уроке разберём, чем систематическое смещение отличается от случайного разброса, как за пятнадцать минут серии чтений вычислить поправку, чем сверять, чтобы не сверять врущее с врущим, и как вписать поправку в скетч одной строкой. Симулятор сделаем калькулятором смещения: эталонный термометр на потенциометре, испытуемый датчик на своём пине — крутите и смотрите, как поправка съезжает.
Смещение и разброс: что именно мы правим
У любого датчика две отдельные беды. Смещение — постоянная ошибка: показания сдвинуты на одну и ту же величину в одну и ту же сторону, скажем минус полтора градуса всегда. Разброс — дрожание от чтения к чтению на десятые доли. Смещение правится поправкой в коде, разброс — усреднением, и перепутать их дорого: усреднять смещение бесполезно, среднее двадцати чтений с ошибкой минус полтора градуса будет с ошибкой минус полтора градуса, просто красивее напечатанным.
Мой рабочий метод такой. Датчик и эталон лежат рядом в одном месте, без сквозняка, и 20–30 минут просто живут — DHT пересчитывает показания внутри корпуса медленно, свежевключенный прибор в серию не годится. Дальше снимаю 10–15 чтений с шагом 2 секунды с обоих приборов, считаю среднее датчика, среднее эталона и вычитаю одно из другого. Разница — персональная поправка этого экземпляра; у соседнего из той же партии она будет другой, проверено на паре из трёх DHT22: минус 0,6, плюс 0,3 и те самые минус 2,5 из рассады.
Прежде чем править код, сверяемся с паспортом. У DHT22 паспортная точность ±0,5 °C, у DHT11 — ±2 °C, и если смещение легло внутрь этих цифр, прибор исправен: поправка желательна, но не обязательна. Я вписываю её, когда смещение влияет на решение прибора — для термостата с порогом 25 °C даже градус сдвигает момент щелчка реле не туда. Откуда берутся паспортные числа и чем модели отличаются, мы раскладывали в уроке про выбор DHT11 против DHT22.
| Этап | Что делаю | Сколько ждать | Что записываю |
|---|---|---|---|
| Стабилизация | датчик и эталон рядом, без сквозняка и солнца | 20–30 минут | ничего — просто жду |
| Серия | 10–15 чтений с шагом 2 с с обоих приборов | около минуты | показания в столбик |
| Средние | складываю, делю на число чтений | пара минут | среднее датчика и среднее эталона |
| Решение | смещение = среднее датчика − среднее эталона | — | сравниваю с паспортной точностью |
| Поправка | константа в шапке скетча | пять минут | дату и значение — на корпус прибора |
Чем сверять: эталон из другого класса
Главная грабля — сверять DHT со вторым DHT. Одинаковая конструкция, одинаковый самонагрев, часто одинаковая систематика: два сенсора врут в одну сторону, разница выходит красивые нули, и я однажды неделю был уверен, что оба точны. Эталон обязан быть из другого класса. Медицинский термометр даёт ±0,1 °C — правда, только в узком диапазоне 35–42 °C. Спиртовой школьный — плюс-минус градус на всей шкале, зато стоит копейки и не боится балкона. Лабораторный цифровой — ±0,1–0,2 °C, но по цене трёх DHT22. Мой компромисс: спиртовой для комнатных задач, медицинский — когда нужна доля градуса.
Для влажности эталон продаётся в продуктовом магазине: поваренная соль. Насыщенный раствор в герметичном боксе — стакан с крышкой, датчик рядом, не касаясь раствора, — держит 75,3 % влажности при 25 °C. Через 8–24 часа сравниваю чтение датчика с этой константой: мои DHT22 расходились с солью на минус четыре и плюс шесть процентов, обе поправки потом жили в коде годами. Нужна обычная каменная соль без антислёживающих добавок; морская и «экстра» дают другой отклик.
Третий путь — собрать эталон самому: NTC-термистор с уравнением Стейнхарта-Харта после индивидуальной подгонки даёт сотые доли градуса, мы считали его в уроке про термистор и формулу Стейнхарта. Честно: для комнатных задач это перебор, я собирал такой термометр ради процесса. А привычка «сначала доверие к измерителю, потом измерения» приезжает из урока про мультиметр — там она экономит предохранители, здесь — урожай.
Поправка в скетче: одна константа вместо переписывания
#include "DHT.h" #define DHTPIN 2#define DHTTYPE DHT22 // поправки этого экземпляра, получены сверкой с эталоном 12.03#define T_OFFSET -1.4#define H_OFFSET +3.0 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); dht.begin();} void loop() { float t = dht.readTemperature() + T_OFFSET; float h = dht.readHumidity() + H_OFFSET; Serial.print("t="); Serial.print(t); Serial.print(" h="); Serial.println(h); delay(2000);}Поправка живёт константой в шапке скетча — не размазанной по порогам. Если вписать смещение в каждый if отдельно, при смене датчика придётся перепахивать всю логику; с константой переезд на новый экземпляр — правка двух строк. На корпусе прибора у меня бумажка: «DHT22, t −1.4, h +3, 12.03». Дата обязательна: сенсоры плывут с годами, и через пару лет серию сверок не грех повторить с того же этапа стабилизации.
С влажностью правило с условием. Аддитивная поправка работает в середине диапазона, примерно 30–70 %, где кривая сенсора близка к прямой. У краёв, ближе к 10 % и к 90 %, нелинейность растёт, и одна константа начинает врать в разные стороны — там честнее заменить сенсор, чем полиномить в коде. Температурная поправка проще: у DHT22 она обычно стабильна по всему рабочему диапазону, я не видел ухода больше 0,2 °C между плюсом двадцать и плюсом сорок на одном экземпляре.
И важное различие: смещение от самонагрева правится не кодом, а монтажом. Если датчик сидит в двух сантиметрах от стабилизатора или блока реле, он греется от платы, и поправка будет плавать вместе с током нагрузки. Вынос сенсора шлейфом на 10–15 см лечит причину, а не симптом — так мы и монтировали в уроке про установку DHT22/AM2302. После поправки пересматривайте пороги: термостат настраивался под врущие градусы, и возвращаться придётся к уроку про гистерезис — реле теперь щёлкает по-другому.
Калькулятор смещения в симуляторе
В симуляторе эталоном служит потенциометр: ползунок превращается в показания образцового термометра от 0 до 50 °C, механику analogRead мы разбирали в уроке про потенциометр. Испытуемый DHT22 — на пине 2. Скетч каждую пару секунд печатает оба значения, текущее смещение и среднее по пяти чтениям: среднее нужно, чтобы дрожание не путалось с систематикой. Задайте ползунками расхождение, подождите пять чтений — в мониторе напечатается готовая строка T_OFFSET, которую можно переписать в скетч выше.
- 1. Чем смещение отличается от разброса?
- 2. Какой метод калибровки я называю рабочим?
- 3. Насыщенный раствор поваренной соли в герметичном боксе даёт:
- 4. Аддитивная поправка влажности хорошо работает:
- 5. Датчик завышает температуру, потому что греется от платы рядом. Что правлю?
- Смещение правит константа, разброс — усреднение; сначала определите, что именно у вас.
- Серия 10–15 чтений с шагом 2 с на устоявшемся датчике; среднее против среднего эталона, потом сверка с паспортной точностью.
- Эталон — из другого класса: спиртовой, медицинский, солевой раствор 75,3 %. Второй DHT — не эталон.
- Поправка влажности аддитивна в середине 30–70 %; у краёв честнее сменить сенсор.
- Самонагрев лечится монтажом — выносом шлейфа, а не T_OFFSET. Поправку и дату — на корпус прибора.
Частые вопросы по теме урока
- Чем смещение отличается от разброса?
- Смещение — систематическая сдвижка, её правит константа в скетче. Разброс — случайное дрожание, его глушит усреднение. Перепутать — потратить вечер на бесполезное среднее. Смещение — постоянная ошибка в одну сторону, разброс — дрожание между чтениями
- Какой метод калибровки я называю рабочим?
- Датчик должен устояться рядом с эталоном, серия — короткая и с паузами: DHT пересчитывает показания внутри корпуса медленно, опрос чаще 2 с ничего не добавляет. Серия 10–15 чтений с шагом 2 с на датчике, который 20–30 минут побыл рядом с эталоном
- Насыщенный раствор поваренной соли в герметичном боксе даёт:
- 75,3 % — классическая реперная точка для насыщенного NaCl при 25 °C. Точка 32,8 % тоже существует — это хлорид магния, второй репер для сверки в сухой стороне шкалы. 75,3 % влажности через 8–24 часа
- Аддитивная поправка влажности хорошо работает:
- В середине шкалы кривая сенсора близка к прямой, константа честна. У краёв растёт нелинейность — там правит только замена сенсора. в середине диапазона, примерно 30–70 %
- Датчик завышает температуру, потому что греется от платы рядом. Что правлю?
- Самонагрев плавает вместе с током нагрузки, константа за ним не угонится. Лечение — вынос шлейфом на 10–15 см, поправка берётся уже после. Монтаж: выношу сенсор шлейфом от источников тепла, поправка после этого