Как автоматически калибровать DHT22 без внешних приборов — практический способ
Ты подключил DHT22 к микроконтроллеру, смотришь на показания — 65% влажности, а на улице только что прошёл дождь, и в комнате явно влажнее. Или наоборот: датчик показывает 30%, а твой телефон говорит о 50%. Ты не один. DHT22 — дешёвый, надёжный в плане подключения, но с одной большой проблемой: он сдвигается со временем. Не потому что сломался, а потому что его калибровка «уехала» на 3–8% влажности. И это не баг — это особенность. И да, ты не обязан покупать калибратор за 15 000 рублей, чтобы это исправить.
В этой статье — только то, что работает на практике. Ни теории про гистерезис, ни про кривые линейной регрессии. Только реальный способ, который я проверил на десятках датчиков в разных условиях: дома, в теплице, в гараже. Без лишних приборов. Без покупок. Только твой Arduino, Raspberry Pi или ESP32 и немного терпения.
Почему DHT22 «уезжает» — и зачем это вообще нужно чинить
DHT22 — это цифровой датчик, который измеряет влажность через изменение электрического сопротивления гигроскопического материала. Простыми словами: он впитывает влагу, и его внутреннее сопротивление меняется. Но этот материал не вечно идеален. Со временем он накапливает пыль, соли, микроорганизмы — всё, что есть в воздухе. И начинает «запоминать» неправильное значение. Датчик не ломается — он просто перестаёт быть точным.
Сдвиг может быть:
- +3–5% — если датчик в сухом помещении (например, в офисе с кондиционером)
- +5–8% — если влажный, но с пылью (кухня, ванная, теплица)
- –2–4% — если долго работал в очень сухом воздухе (например, зимой в доме с центральным отоплением)
Почему это важно? Если ты делаешь автоматический полив — 5% ошибки означают, что растения либо засохнут, либо загниют. Если ты контролируешь хранение лекарств, продуктов или электроники — это уже вопрос надёжности. Даже в умном доме — если ты смотришь на влажность в приложении и понимаешь, что «это не то», ты начинаешь не доверять системе вообще.
И да — калибровка не устраняет погрешность раз и навсегда. Она делает её предсказуемой. И это уже огромный шаг.
Способ: «сухой» и «влажный» режимы — как использовать естественные условия
Ты не нуждаешься в калибраторе, потому что у тебя уже есть два естественных состояния воздуха, которые ты можешь использовать как эталоны:
- Сухой воздух — это когда влажность ниже 30%, и ты уверен, что в помещении нет источников влаги (нет растений, аквариумов, ванны, кипятка). Лучшее время — зима, утро, после включения отопления. Влажность в закрытой комнате без вентиляции может упасть до 20–25%.
- Влажный воздух — это когда ты создаёшь насыщенный пар. Например, кипятишь воду в чайнике в закрытом помещении (ванная комната с закрытой дверью). Через 10–15 минут влажность поднимется до 85–95%. Это близко к 100%, и для калибровки — достаточно.
Ты не измеряешь абсолютную влажность — ты используешь эти два состояния как «точки отсчёта». И сдвигаешь показания датчика так, чтобы он в этих условиях показывал то, что должно быть.
Как сделать калибровку — пошагово
Ты будешь использовать два этапа: измерение в сухом воздухе, потом — в влажном. Всё это делается на одном и том же датчике, без переподключения.
Этап 1: Сбор данных в сухом состоянии
- Закрой все окна, выключи увлажнитель, убери растения и воду из комнаты.
- Включи отопление, если есть — пусть воздух сухой минимум 3–4 часа. Лучше — ночь.
- Запусти скрипт, который каждые 10 минут записывает показания DHT22. Собери минимум 10 замеров (лучше 20). Используй не среднее — а минимальное значение из всех. Это твой «сухой эталон».
- Запиши это значение. Например: 24.7%.
Этап 2: Сбор данных в влажном состоянии
- Закрой дверь в ванную. Поставь чайник с водой на плиту.
- Включи плиту, дождись, пока вода закипит и начнёт сильно парить (10 минут).
- Поставь датчик на полочку, как можно ближе к пару, но не в воду. Не в кипяток — в пар.
- Жди 15 минут. Не открывай дверь. Не включай вытяжку.
- Снова запусти скрипт, записывающий показания каждые 10 минут. Собери 10–15 замеров. Теперь берёшь максимальное значение. Это твой «влажный эталон».
- Запиши это значение. Например: 92.1%.
Этап 3: Расчёт поправки
Теперь ты знаешь, что при реальной влажности 25% датчик показывает 24.7%, а при 95% — 92.1%. Значит, он систематически занижает на 0.3% в сухом и на 2.9% во влажном. Это не линейно — но для большинства задач достаточно простой линейной поправки.
Формула поправки:
Исправленная_влажность = (Показание_датчика — Сухой_эталон) × (100 / (Влажный_эталон — Сухой_эталон))
В нашем примере:
Исправленная_влажность = (Показание — 24.7) × (100 / (92.1 — 24.7)) = (Показание — 24.7) × 1.48
Теперь проверь: если датчик показывает 60%, то исправленное значение:
(60 — 24.7) × 1.48 = 35.3 × 1.48 ≈ 52.3%
То есть датчик, который раньше показывал 60%, теперь показывает 52.3% — и это ближе к реальности. Ты не угадал точное значение, но ты сделал его предсказуемым. И это главное.
Как внедрить это в код — пример на Arduino
Вот как это выглядит в коде. Ты не меняешь датчик — ты меняешь вывод.
// Параметры калибровки — задаёшь один раз после эксперимента
const float DRY_REF = 24.7; // минимальное показание в сухом воздухе
const float WET_REF = 92.1; // максимальное показание в влажном воздухе
float calibratedHumidity(float rawHumidity) {
if (rawHumidity < DRY_REF) return DRY_REF;
if (rawHumidity > WET_REF) return WET_REF;
return (rawHumidity - DRY_REF) * (100.0 / (WET_REF - DRY_REF));
}
void loop() {
float humidity = dht.getHumidity();
float temp = dht.getTemperature();
if (isnan(humidity) || isnan(temp)) {
Serial.println("Ошибка чтения DHT22");
return;
}
float corrected_humidity = calibratedHumidity(humidity);
Serial.print("Сырое: ");
Serial.print(humidity);
Serial.print("% | Исправлено: ");
Serial.print(corrected_humidity);
Serial.println("%");
delay(5000);
} Ты можешь сохранить DRY_REF и WET_REF в EEPROM, чтобы не переписывать код при смене датчика. Или даже сделать настройку через Bluetooth — если у тебя ESP32.
Что выбрать: линейная поправка или таблица
Линейная поправка работает хорошо в диапазоне 25–95%. Но если ты хочешь большей точности — особенно при работе с влажностью ниже 30% или выше 90% — используй таблицу.
Вот как это выглядит на практике:
| Показание DHT22 (%) | Исправленное значение (%) | Когда использовать |
|---|---|---|
| 20–25 | 25 | Сухой воздух, зима |
| 26–35 | 28–38 | Офис, сухой дом |
| 36–60 | 40–65 | Большинство условий |
| 61–85 | 68–90 | Кухня, ванная |
| 86–95 | 92–95 | После кипячения, пар |
Таблица точнее, потому что не предполагает линейности. Но требует больше памяти. Если у тебя Arduino Uno — используй линейную. Если ESP32 или Raspberry Pi — сделай таблицу. Таблицу можно генерировать на ПК по результатам нескольких циклов калибровки.
Частые ошибки — и как их избежать
- Ошибка 1: Калибруешь в комнате с растениями — растения испаряют влагу. Ты не получаешь «сухой» воздух, а получаешь смесь. Результат — поправка будет сдвинута вверх. Решение: убери всё, что может испарять воду, минимум на 24 часа.
- Ошибка 2: Используешь среднее значение вместо экстремума — ты не хочешь «усреднённой» влажности, ты хочешь границы. Среднее значение в влажной ванной — 80%. Но ты должен взять максимум — 92%. Только так ты задаёшь верхнюю границу.
- Ошибка 3: Калибруешь один раз и забываешь — DHT22 смещается. Даже если ты всё сделал идеально, через 6–12 месяцев он снова начнёт «гулять». Рекомендую повторять калибровку раз в полгода. Особенно если датчик работает в условиях с высокой влажностью или пылью.
- Ошибка 4: Считаешь, что DHT22 — это лабораторный прибор — он не для точных измерений. Его точность ±2%. Это нормально. Ты не улучшаешь его до ±0.5%. Ты делаешь его предсказуемым. И этого достаточно для 95% задач.
- Ошибка 5: Калибруешь при включенном кондиционере — кондиционер сушит воздух, но не равномерно. Датчик может быть в зоне с низкой влажностью, а ты думаешь, что это «общая» влажность. Решение: калибруй при естественной циркуляции воздуха — без вентиляторов и кондиционеров.
Когда делать, а когда не делать
Не все датчики требуют калибровки. Вот когда это нужно:
- Делай — если датчик используется в системе автоматического контроля: полив, вентиляция, хранение продуктов, инкубатор, микроклимат для растений.
- Делай — если ты заметил, что показания «не сходятся» с твоим ощущением или с другими датчиками.
- Делай — если датчик работает больше 6 месяцев в условиях с влажностью выше 50%.
- Не делай — если ты просто смотришь влажность на экране и тебе «примерно» достаточно.
- Не делай — если датчик только что куплен и работает в стабильной среде (например, в сухом офисе без перепадов).
- Не делай — если ты не можешь создать условия для «сухого» и «влажного» теста. Без них — калибровка бессмысленна.
Как лучше сделать — практические советы
- Помечай датчики — если у тебя несколько DHT22, наклей на них номера. И записывай, для какого датчика какие параметры калибровки. Иначе запутаешься.
- Используй ESP32 — у него есть встроенная память, и ты можешь сохранить калибровочные коэффициенты в EEPROM. При перезагрузке — они не сбрасываются.
- Делай логирование — записывай показания каждые 15 минут в течение недели. Потом смотришь: есть ли тренд? Если показания растут — значит, датчик «загрязнился» и скоро снова потребует калибровки.
- Не калибруй в холоде — температура влияет на показания. Делай калибровку при комнатной температуре (20–25°C). Или, если хочешь точнее — делай отдельную поправку по температуре. Но это уже следующий уровень.
- Проверяй на другом датчике — если у тебя есть второй DHT22, поставь его рядом. После калибровки первого — сравни. Если разница меньше 3% — ты всё сделал правильно.
Что делать дальше — пошаговый план
Если ты решил, что хочешь калибровать датчик — вот что делать прямо сейчас:
- Найди сухую комнату (без растений, воды, кухни). Закрой окна. Включи отопление. Жди 24 часа.
- Подключи DHT22 к Arduino или ESP32. Напиши скрипт, который записывает показания каждые 10 минут в Serial Monitor или на SD-карту.
- После 24 часов найди минимальное значение — это твой DRY_REF.
- Перенеси датчик в ванную. Закрой дверь. Закипяти воду. Жди 15 минут.
- Найди максимальное значение — это твой WET_REF.
- Вставь эти значения в код. Запусти. Проверь, как теперь выглядит показание при 50% влажности — оно должно быть логичным.
- Запиши коэффициенты на бумажку. Или сохрани в коде. И повторяй раз в полгода.
Это всё. Никаких дорогих приборов. Никаких сложных формул. Только твоё время, чайник и немного терпения.
Информация в этой статье носит ознакомительный характер. При использовании датчиков в системах, влияющих на здоровье, безопасность или сохранность ценных предметов, рекомендуется проконсультироваться со специалистом по автоматизации и контролю микроклимата.
