Отображение отрицательных температур при использовании датчика DHT22 с библиотекой «DHT sensors library».

DHT22 и отрицательная температура
DHT22, Arduino и отрицательная температура

В процессе модернизации моей метеостанции на ESP8266 NodeMCU и добавления новых датчиков температуры и влажности — DHT22, столкнулся с тем, что обработка и отображение отрицательных температур, регистрируемых датчиком, проходит некорректно. Для работы с DHT22 задействовал библиотеку от Adafruit — «DHT Sensors Library». В мониторе COM порта, когда температура с положительных значений опускается ниже нуля, мы наблюдаем такие значения как -3276.90, -3276.80 … — 3275,50 и так далее… Было видно, что с понижением температуры эти значения увеличиваются. По логике, значение -3276.90, следуемое после температуры 0.0 °С, соответствует -0.1 °С. Пробовал различные библиотеки для работы с этим датчиком, подключал его к Wemos D1 и запитывал от 5 В, делал соединительную линию короче 1 метра — ничего не помогло. Может быть проблема в датчике? Может, но работать пришлось с тем, что есть. Итак, поделюсь тем, как я решил проблему некорректного отображения отрицательных температур при использовании цифрового датчика температуры и влажности DHT22 в ардуино — подобных платах.

Решил проблему просто, внеся небольшую корректировку в файле библиотеки «DHT.cpp» по части преобразования отрицательных температур. Файл можно найти в папке с библиотекой, скорее всего в расположении: С:\Users\пользователь\Documents\Arduino\libraries\DHT_sensor_library Вот фрагмент изначального кода из этого файла (версия библиотеки 1.3.0):

if (data[2] & 0x80) {
   f *= -1;

Заменил его на этот фрагмент:

if (data[2] & 0x80) {
      f = 3277.0 - f;
      f *= -1;
} 
if (f == -3277.00) f = -0.1;

Отображение отрицательных температур, на первый взгляд, стало корректным. Дальнейшее сравнение работы датчика DHT22 и DS18b20 при отрицательных температурах покажет насколько это правдиво.

Поделиться ссылкой:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *