Добрый день, уважаемый читатель! Эта статья продолжает тему сенсоров температуры и влажности и посвящена довольно старой и популярной линейке сенсоров от Guangzhou Aosong Electronic Co. - DHT11, DHT21(так же известен как AM2301), DHT22 (AM2302). Ну и попутно рассмотрим аналогичный сенсор Mw33 от неизвестного производителя.
Устройство сенсоров
Вся рассматриваемая линейка сенсоров построена по одному и тому же принципу и обладает схожей функциональностью. В них используется полимерный конденсатор для измерения влажности и терморезистор для измерения температуры окружающего воздуха. Для преобразования данных внутри датчика используется 8-битный микроконтроллер.
Условия использования
Не стоит использовать эти сенсоры и в помещениях с высокой влажностью (погреба, сауны и т.д.), так как после достаточно длительного пребывания (несколько недель и более) в таких условиях конденсатор измерения влажности насыщается влагой и выходит из строя. Необратимо! Измерение температуры при этом продолжает функционировать как обычно, а вот показания влажности будут всегда будут 99,9%.
DHT22 постоянно работает у меня в погребе и зимой при повышении влажности гарантированно выходит из строя (я имею в виду измерение влажности). Но зимой показания влажности не так уж и важны - главное не допустить промерзания; а летом для управления вентиляцией приходится каждый год его приходится менять. Впрочем, судя по отзывам на форумах, этот датчик и в нормальных условиях служит относительно недолго.
Питание и подключение к MCU
Данные выдаются в цифровой форме по шине Single-bus ("типа 1-wire", но это не 1-wire!). Однопроводная шина Single-bus разработана компанией Aosong Electronics Co. она отличается от 1-проводной шины Maxim / Dallas, поэтому несовместима с 1-Wire шиной Dallas. Производитель обещает передачу данных на расстояние до 20 метров, что делает его привлекательным выбором для различных приложений.
Сенсоры допускают питание от +3.0 В до +5.5 В, то есть его напрямую можно подключать к любым микроконтроллерам: и Arduino и ESP. Но при питании 5,0В сенсоры "ведут себя лучше", поэтому для трехвольтовых контроллеров я рекомендую использовать следующую схему:
В предлагаемом варианте сенсор питается от 5В, а шина данных подтянута к 3,3В - в итоге все счастливы. Если вы подключаете сенсор к 5в Arduino, то 3,3В не нужны вообще.
Сенсоры этой серии склонны изредка уходить в “глухую несознанку” (иногда один-два раза в месяц, иногда реже, иногда чаще). Выглядит это так - датчик подтягивает линию данных к земле и наглухо зависает, никак не реагируя на внешние сигналы. Вернуть его в рабочее состояние можно только кратковременным отключением питания датчика, сброс MCU в этом случае никак не поможет. Поэтому сразу стоит предусмотреть в вашей конструкции кнопку или реле для сброса датчика без перезагрузки MCU. Для предотвращения подобных ситуаций на форумах рекомендуют устанавливать подтягивающий резистор на шину данных и фильтрующий конденсатор на вывод питания около датчика, а не около микроконтроллера (но, увы, это не всегда помогает). Поэтому имеет смысл купить их уже распаянными на минишилдах, где уже установлены и резистор и конденсатор. Это так же упростит их замену в случае выхода из строя. Но будьте внимательны – не все шилды содержат указанные компоненты.
При длине кабеля свыше 10 метров китайцы рекомендуют снизить сопротивление резистора подтяжки вывода данных до 1 кОм при 5В. Если требуется подключение датчика длинным кабелем, и Вы используете готовый шилд с резистором, можно просто установить дополнительный резистор “со стороны контроллера” с учетом уже установленного.
DHT11
DHT11 самый недорогой (~0.7$) цифровой датчик температуры и влажности серии. Как и следовало ожидать его точность измерений относительно невелика. DHT11 – это не калиброванный датчик, это означает что его показания требуется скорректировать по “образцовому” сенсору. Не предназначен для работы на улице!
Производитель: Aosong Electronics Co.,Ltd (сейчас датчики маркируются как ASAIR)
Интерфейс: Single-bus
Напряжение питания: от +3.0 В до +5.5 В, без нареканий напрямую работает с платами 3.3 В и 5.0 В. Но лучше использовать питание 5.0 В.
Потребляемый ток: от ~1.0 µA в режиме ожидания до 1~1.5 mA в режиме измерения и передачи данных
Диапазон измерения температуры: от 0 до +50 °C
Шаг измерения температуры (разрешение): 1.0°C (8bit)
Погрешность измерения температуры (точность): ±2.0°C
Диапазон измерения влажности: от 20 до 90 %RH
Шаг измерения влажности (разрешение): 1.0%RH (8bit)
Погрешность измерения влажности (точность): ±5.0%RH (но это не точно)
Библиотека для Arduino: DHT Sensor Library
Библиотека для ESP32 + ESP-IDF: kotyara12/reDHTxx
Источники информации: Datasheet
Этот датчик можно использовать только в отапливаемых помещениях, из-за его узкого температурного диапазона. По некоторым сведениям, найденным в “этих ваших интырнетах”, DHT11 не калибруется производителем на заводе. Это означает, что Вам потребуется скорректировать его данные по “образцовому” сенсору. Учитывая, что точность DHT11 невелика, сделать это несложно.
Mw33
Еще один недорогой цифровой датчик температуры и влажности. Китайцы позиционируют его как “улучшенный DHT11”. Диапазон измеряемой температуры стал шире, начинаясь уже от -20°C, шаг измерения стал 0.1, точность не повысилась. Диапазон измеряемой влажности и шаг измерения также стал немного шире. Даташита на него найти не удалось, производитель не известен, возможно тот же Aosong. Используется тот же протокол передачи данных, что и у DHT11.
Производитель: неизвестен, возможно тот же AOSONG / ASAIR
Интерфейс: Single-bus
Напряжение питания: от +3.3 В до +5.5 В.
Потребляемый ток: ?
Диапазон измерения температуры: от -20 до +60 °C
Шаг измерения температуры (разрешение): 0.1°C
Погрешность измерения температуры (точность): ±2.0°C
Диапазон измерения влажности: от 5 до 95 %RH (предположительно)
Шаг измерения влажности (разрешение): 0.1%RH
Погрешность измерения влажности (точность): ±5.0%RH (предположительно)
Возможность измерения давления: отсутствует
Библиотека для Arduino: DHT Sensor Library
Библиотека для ESP32 + ESP-IDF: kotyara12/reDHTxx
Источники информации: AliExpress
У меня этот датчик прекрасно отозвался на той же библиотеке, что и все DHT. Опытным путем выяснил, что ему больше подходит режим DHT12 (чем DHT11), потому что шаг измерения у него оказалась не единица, а 0.1. Датчик показал себя гораздо более точным при измерении влажности, чем DHT11, и чуть лучше при измерении температуры. Так что могу смело рекомендовать его в качестве дешевого аналога. Отлично подойдет, например, для оценки температуры в емкостном измерителе влажности почвы (так как его данные требуется скорректировать в зависимости от температуры). Про выносливость в тяжелых условиях ничего не известно, так как лично я использовал его только в тестовом проекте. Судя по отклонениям показаний от других датчиков, этот датчик, как и DHT11, так же не калибруется заводом-изготовителем, Вам потребуется скорректировать его данные самостоятельно.
DHT21 / AM2301
DHT21, он же Гога, он же Жора, он же AM2301 – это более продвинутый вариант датчика от Aosong с лучшими характеристиками. Предназначен для работы в условиях отрицательных температур, но при высокой влажности сенсор может замерзнуть и выдавать только 99,9% влажности.
Производитель: Aosong Electronics Co.,Ltd (сейчас датчики маркируются как ASAIR)
Интерфейс: Single-bus
Напряжение питания: от +3.0 В до +5.5 В, без нареканий напрямую работает с платами 3.3 В и 5.0 В. Но лучше использовать питание 5.0 В.
Потребляемый ток: от ~40 µA в режиме ожидания до 1.5~2.1 mA в режиме измерения и передачи данных
Диапазон измерения температуры: от -40 до +80 °C
Шаг измерения температуры (разрешение): 0.1°C
Погрешность измерения температуры (точность): ±0.5°C (max ±1.0°C)
Диапазон измерения влажности: от 0 до 99.9 %RH
Шаг измерения влажности (разрешение): 0.1%RH
Погрешность измерения влажности (точность): ±3.0%RH (max ±5.0%RH)
Возможность измерения давления: отсутствует
Библиотека для Arduino: DHT Sensor Library
Библиотека для ESP32 + ESP-IDF: kotyara12/reDHTxx
Источники информации: Datasheet EN
Сенсор в дикой природе на AliExpress можно найти в черном корпусе с выводами – проводами.
DHT22 / AM2302
DHT22, он же Гога, он же Жора, он же AM2302 – это еще один вариант датчика от Aosong. Точнее, но и заметно дороже DHT11. Предназначен для работы в условиях отрицательных температур, но при высокой влажности сенсор может замерзнуть и выдавать только 99,9% влажности. Впрочем, это случается не очень часто.
Производитель: Aosong Electronics Co.,Ltd (сейчас датчики маркируются как ASAIR)
Интерфейс: Single-bus
Напряжение питания: от +3.0 В до +5.5 В, без нареканий напрямую работает с платами 3.3 В и 5.0 В.
Потребляемый ток: от ~40 µA в режиме ожидания до 1~1.5 mA в режиме измерения и передачи данных
Диапазон измерения температуры: от -40 до +80 °C
Шаг измерения температуры (разрешение): 0.1°C
Погрешность измерения температуры (точность): ±0.5°C (max ±1.0°C)
Диапазон измерения влажности: от 0 до 99.9 %RH (этот датчик не выдает значение 100%, максимум 99.9%)
Шаг измерения влажности (разрешение): 0.1%RH
Погрешность измерения влажности (точность): ±2.0%RH (max ±5.0%RH)
Возможность измерения давления: отсутствует
Библиотека для Arduino: DHT Sensor Library
Библиотека для ESP32 + ESP-IDF: kotyara12/reDHTxx
Источники информации: Datasheet EN
Датчик можно купить в нескольких вариантах. Точнее в одном, во втором случае тот же самый датчик просто упаковывается еще в один защитный корпус, более удобный для монтажа, но такой вариант и стоит несколько дороже. Второй вариант не предусматривает установку конденсатора и подтягивающего резистора, их нужно установить отдельно.
Если вам требуется минишилд с уже припаянным датчиком, то можно купить такой вариант:
Но будьте внимательны - на некоторых шилдах отсутствуют резистор подтяжки и конденсатор, а в последнее время стали попадаться шилды с AM2320 вместо AM2302.
AM2320 & AM2321
AM2320 и AM2321 – современный вариант DHT22 от Aosong. AM2321 отличается от AM2320 только другим корпусом и расположением выводов (насколько я понял). Принцип работы, разумеется, не изменился – в них используется все тот же полимерный конденсатор. Зато данные теперь с них можно получать в двух режимах – по шине I2C или Single-bus. В случае использования шины I2C можно освободить один вывод на микроконтроллере (так как выводы под I2C обычно в любом случае используются), но можно подключить только один датчик, так как адрес датчика один и тот же. В случае использования шины Single-bus можно подключить несколько датчиков, но каждому необходимо выделить свой вывод GPIO. В последнем случае на датчике вывод SCL необходимо соединить с выводом GND. Диапазоны измерений не отличаются от DHT22, зато точность измерения стала несколько выше. Кроме того, новый датчик заметно дешевле, что так же является его несомненным плюсом. Кроме этого, датчик стал немного экономичнее в плане потребляемого тока. В итоге более нет смысла заказывать AM2302. Оптимальный выбор для использования с шиной Single-bus.
На мой взгляд AM2320 – это чуть лучший AM2302 с наспех приделанной шиной I2C (почему наспех – поясню чуть ниже).
Производитель: Aosong Electronics Co.,Ltd (сейчас датчики маркируются как ASAIR)
Интерфейс: Single-bus или I2C, адрес на шине: 0x5С
Напряжение питания: от +3.1 В до +5.5 В
Потребляемый ток: от ~10 µA в режиме ожидания до 950 µA (500 µA для AM2321) в режиме измерения и передачи данных
Диапазон измерения температуры: от -40 до +80 °C
Шаг измерения температуры (разрешение): 0.1°C (16bit)
Погрешность измерения температуры (точность): ±0.2°C (max ±0.5°C)
Диапазон измерения влажности: от 0 до 99.9 %RH
Шаг измерения влажности (разрешение): 0.1%RH
Погрешность измерения влажности (точность): ±2.0%RH (max ±3.0%RH)
Возможность измерения давления: отсутствует
Библиотека для Arduino: AM2320
Библиотека для ESP32 + ESP-IDF: kotyara12/reDHTxx
Источники информации: AM2320 Datasheet EN, AM2321 Datasheet EN, Подключение к Arduino
Вообще этот сенсор оставляет устойчивое ощущение сделанного наспех китайскими студентами-троечниками в качестве дипломной работы.
Во-первых datasheet содержит просто огромное количество ошибок, которые никто не собирается исправлять. Ну например: в datasheet-е указан адрес датчика 0xB8, а во всех библиотеках используется адрес 0x5C. Ошибка? И да и нет. Дело в том, что на шине I2C адрес устройства не может быть больше 0x7F. Адрес 0xB8 это сдвинутый на 1 бит влево адрес 0x5C, то есть адрес плюс бит записи в датчик. Для чтения адрес будет уже другой – 0xB9.
Во-вторых, если подключать датчик по I2C, то почти все дополнительные регистры (кроме температуры и влажности) не выдают никакой информации, например запрос статуса, модели, версии и серийного номера вместо ожидаемых данных вернет только нули. В третьих процесс считывания данных с датчика по шине I2C реализован, хм, весьма кривовато. Для этого датчика стандартная функция запроса данных по шине, с которой прекрасно работают все I2C датчики других производителей, оказывается не подходит! Китайцы выпендрились и требуют двойной команды записи команды через паузу, пришлось писать другую реализацию. Дорабатывать датчик никто, видимо, не собирается.
Однако можно использовать этот датчик вместо AM2302 по однопроводному интерфейсу Single-bus. Для предотвращения зависания на форумах рекомендуют устанавливать подтягивающий резистор на шину данных и фильтрующий конденсатор на вывод питания около датчика, а не около микроконтроллера. Поэтому если Вы планируете подключить эти датчики посредством длинных проводов, то имеет смысл купить их уже распаянными на минишилдах, где уже установлены и резистор и конденсатор. Это так же упростит их замену в случае выхода из строя. Но будьте внимательны – не все шилды содержат указанные компоненты.
Сравнение сенсоров
В заключение приведу пару графиков изменений указанными выше сенсорами:
Как видим – DHT11 – это “нечто”. Мало того, что шаг измерения и точность никакая, так он еще и сильно занижает температуру, а влажность завышает. Показания скачут аки тыгыдымские кони. Годится только для экспериментов при освоении Arduino. Mw33 в этом плане выглядит немного лучше, особенно радуют данные для влажности, но все-таки он сильно занижает данные температуры. Остальные датчики идут довольно тесной группой, но все-таки можно заметить, что BME280 (как и BMP280) немного завышает данные температуры и занижает данные влажности – причем всегда, проверено на нескольких датчиках, купленных в разное время у разных продавцов. Можно смело скидывать примерно полградуса от его показаний. AM2302 наоборот, чуть занижает показания температуры. При измерении влажности AM2302 и AHT10 выдают примерно одинаковые данные, что не особо удивляет – ведь используется практически одна и та же технология изменения. Эксперимент показал, что применение достаточно дешевых AHT10 для изменения параметров климата внутри помещений вполне оправданно, и дает возможность использовать до 2-х датчиков на одной шине без применения мультиплексоров (или 4 датчика на ESP32).
👉 Другие части данной серии:
👉 Оригинальная статья на моем сайте, в ней вы сможете найти описания и для других сенсоров
_______________
На этом пока всё, до встречи на сайте и на dzen-канале!
👍 Понравилась статья? Поддержите канал лайком или комментарием! Каналы на Дзене "живут" только за счет ваших лайков.
📌Подпишитесь на канал и вы всегда будете в курсе новых статей.
🔶 Полный архив статей вы найдете здесь
Благодарю за вашу поддержку! 🙏