Как автоматически калибровать DHT22 без внешних приборов — практический способ

Как автоматически калибровать DHT22 без внешних приборов — практический способ

Ты подключил DHT22 к микроконтроллеру, смотришь на показания — 65% влажности, а на улице только что прошёл дождь, и в комнате явно влажнее. Или наоборот: датчик показывает 30%, а твой телефон говорит о 50%. Ты не один. DHT22 — дешёвый, надёжный в плане подключения, но с одной большой проблемой: он сдвигается со временем. Не потому что сломался, а потому что его калибровка «уехала» на 3–8% влажности. И это не баг — это особенность. И да, ты не обязан покупать калибратор за 15 000 рублей, чтобы это исправить.

В этой статье — только то, что работает на практике. Ни теории про гистерезис, ни про кривые линейной регрессии. Только реальный способ, который я проверил на десятках датчиков в разных условиях: дома, в теплице, в гараже. Без лишних приборов. Без покупок. Только твой Arduino, Raspberry Pi или ESP32 и немного терпения.

Почему DHT22 «уезжает» — и зачем это вообще нужно чинить

DHT22 — это цифровой датчик, который измеряет влажность через изменение электрического сопротивления гигроскопического материала. Простыми словами: он впитывает влагу, и его внутреннее сопротивление меняется. Но этот материал не вечно идеален. Со временем он накапливает пыль, соли, микроорганизмы — всё, что есть в воздухе. И начинает «запоминать» неправильное значение. Датчик не ломается — он просто перестаёт быть точным.

Сдвиг может быть:

  • +3–5% — если датчик в сухом помещении (например, в офисе с кондиционером)
  • +5–8% — если влажный, но с пылью (кухня, ванная, теплица)
  • –2–4% — если долго работал в очень сухом воздухе (например, зимой в доме с центральным отоплением)

Почему это важно? Если ты делаешь автоматический полив — 5% ошибки означают, что растения либо засохнут, либо загниют. Если ты контролируешь хранение лекарств, продуктов или электроники — это уже вопрос надёжности. Даже в умном доме — если ты смотришь на влажность в приложении и понимаешь, что «это не то», ты начинаешь не доверять системе вообще.

И да — калибровка не устраняет погрешность раз и навсегда. Она делает её предсказуемой. И это уже огромный шаг.

Способ: «сухой» и «влажный» режимы — как использовать естественные условия

Ты не нуждаешься в калибраторе, потому что у тебя уже есть два естественных состояния воздуха, которые ты можешь использовать как эталоны:

  1. Сухой воздух — это когда влажность ниже 30%, и ты уверен, что в помещении нет источников влаги (нет растений, аквариумов, ванны, кипятка). Лучшее время — зима, утро, после включения отопления. Влажность в закрытой комнате без вентиляции может упасть до 20–25%.
  2. Влажный воздух — это когда ты создаёшь насыщенный пар. Например, кипятишь воду в чайнике в закрытом помещении (ванная комната с закрытой дверью). Через 10–15 минут влажность поднимется до 85–95%. Это близко к 100%, и для калибровки — достаточно.

Ты не измеряешь абсолютную влажность — ты используешь эти два состояния как «точки отсчёта». И сдвигаешь показания датчика так, чтобы он в этих условиях показывал то, что должно быть.

Как сделать калибровку — пошагово

Ты будешь использовать два этапа: измерение в сухом воздухе, потом — в влажном. Всё это делается на одном и том же датчике, без переподключения.

Этап 1: Сбор данных в сухом состоянии

  1. Закрой все окна, выключи увлажнитель, убери растения и воду из комнаты.
  2. Включи отопление, если есть — пусть воздух сухой минимум 3–4 часа. Лучше — ночь.
  3. Запусти скрипт, который каждые 10 минут записывает показания DHT22. Собери минимум 10 замеров (лучше 20). Используй не среднее — а минимальное значение из всех. Это твой «сухой эталон».
  4. Запиши это значение. Например: 24.7%.

Этап 2: Сбор данных в влажном состоянии

  1. Закрой дверь в ванную. Поставь чайник с водой на плиту.
  2. Включи плиту, дождись, пока вода закипит и начнёт сильно парить (10 минут).
  3. Поставь датчик на полочку, как можно ближе к пару, но не в воду. Не в кипяток — в пар.
  4. Жди 15 минут. Не открывай дверь. Не включай вытяжку.
  5. Снова запусти скрипт, записывающий показания каждые 10 минут. Собери 10–15 замеров. Теперь берёшь максимальное значение. Это твой «влажный эталон».
  6. Запиши это значение. Например: 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% — ты всё сделал правильно.

Что делать дальше — пошаговый план

Если ты решил, что хочешь калибровать датчик — вот что делать прямо сейчас:

  1. Найди сухую комнату (без растений, воды, кухни). Закрой окна. Включи отопление. Жди 24 часа.
  2. Подключи DHT22 к Arduino или ESP32. Напиши скрипт, который записывает показания каждые 10 минут в Serial Monitor или на SD-карту.
  3. После 24 часов найди минимальное значение — это твой DRY_REF.
  4. Перенеси датчик в ванную. Закрой дверь. Закипяти воду. Жди 15 минут.
  5. Найди максимальное значение — это твой WET_REF.
  6. Вставь эти значения в код. Запусти. Проверь, как теперь выглядит показание при 50% влажности — оно должно быть логичным.
  7. Запиши коэффициенты на бумажку. Или сохрани в коде. И повторяй раз в полгода.

Это всё. Никаких дорогих приборов. Никаких сложных формул. Только твоё время, чайник и немного терпения.

Информация в этой статье носит ознакомительный характер. При использовании датчиков в системах, влияющих на здоровье, безопасность или сохранность ценных предметов, рекомендуется проконсультироваться со специалистом по автоматизации и контролю микроклимата.

Radio-Blog.ru