ФОРУМ КУПИТЬ

Последние статьи

ВСЕ СТАТЬИ

Датчик температуры и влажности HTU21D для MegaD-328

04/02/2016 21:55:17

Измерение температуры и влажности в помещении или за его пределами одна из ключевых функций Умного Дома. На основе этих данных производится автоматическое управление системами отопления, кондиционирования или увлажнения. Также эта информация крайне полезна и интересна живущим в доме людям, особенно с нынешними климатическими катаклизмами, а потому всегда доступна через Web-итерфейс Умного Дома и может также выводиться на различные информационные дисплеи. Но если с измерением температуры все давным-давно ясно (здесь у датчиков DS18B20, поддерживаемых контроллером MegaD-328, с точки зрения соотношения цены и качества попросту нет конкурентов), то вот относительно измерения влажности воздуха по-прежнему остается много вопросов...

Так уж сложилось, что в системах домашней автоматизации не принято в массовом порядке использовать дорогостоящие высокоточные датчики. Действительно, чтобы включить вытяжку в туалете или ванной не нужна научная точность. Поэтому широкую популярность завоевали недорогие датчики DHT11/DHT22 (они же AM2302) стоимостью от $4 до $12 за экземпляр, смонтированный на плате с разъемом и шлейфом. Ввиду распространенности среди пользователей эти датчики также как и DS18B20 уже достаточно давно поддерживаются контроллером MegaD-328. Однако реальный опыт эксплуатации показал, что DHT22 далеко не лучшее решение для измерения влажности.

Датчики DHT22 имеют следующие проблемы и недостатки:

1. Якобы невысокая точность измерения влажности
2. При считывании данных датчик всегда отдает предыдущие значения, поэтому, чтобы получить актуальные данные, нужно считать значение дважды
3. Некоторые экземпляры (не все) имеют неприятное свойство "подвисать", выдавая нулевые значения (лечиться только перезагрузкой датчика по питанию)
4. Достаточно крупные габариты датчика не всегда позволяют разместить его в небольшом корпусе.

Все это, а главным образом третий пункт, сподвигло меня на поиски другого решения для измерения влажности воздуха. А так как опыт с датчиком давления BMP180 показал, что к контроллеру MegaD-328, можно с легкостью подключать любые устройства для шины I2C, я решил попробовать в деле цифровой датчик HTU21D от компании Measurement Specialties.

HTU21D Humidity Sensor

HTU21D - крохотный цифровой датчик для шины I2C. Размеры его платы всего 15 х 15 мм. Также как и DHT22 датчик HTU21D может выдавать значение как влажности, так и температуры. В отличие от DHT22, который подключается тремя проводами: питание, земля, шина данных, I2C-датчики используют четыре провода: питание (+3,3В), земля, SCL, SDA. То есть HTU21D использует не один, а два порта устройства. Это, пожалуй, его единственный недостаток.

MegaD-328 + htu21d

HTU21D очень легко подключить к исполнительному модулю MegaD-14-IN. Для линий SCL и SDA можно использовать любые из 14 доступных портов. Необходимо только установить конфигурационный джампер портов, к которым подключается датчик в нижнее положение, а линии SCL и SDA подключить к правым клеммам выбранных портов. +3,3В необходимо взять с клеммы питания, а землю можно прикрутить как к клемме питания (как на фото), так и к любой левой клемме порта (напомню, что все левые клеммы портов - это "ground" / "земля" / "минус").  Таким образом, к одному исполнительному модулю MegaD-14-IN может быть подключено 7 различных датчиков для шины I2C, как, например, HTU21D или BMP180. Строго говоря, это, конечно, не совсем так, поскольку на одной шине может "висеть" несколько датчиков, но эта тема для отдельного разговора.

Итак, поскольку у меня уже была написана программная библиотека I2C-PHP, считать данные с датчика HTU21D не составило никакого труда. Был написан "драйвер" для HTU21D и теперь, чтобы получить требуемые значения, необходимо выполнить вот такой нехитрый код на PHP.
Ссылка на скачивание архива в конце статьи. Распаковываем, запускаем: php mod_dev_htu21d.php

<?
define("SCL", "8");
define("SDA", "9");
define("MD", "http://192.168.0.14/sec/?");

require_once("mod_i2c_htu21d.php");

$temperature = get_htu21d_temperature();
echo "Temperature: ".$temperature;

$humidity = get_htu21d_humidity();
echo "Humidity: ".$humidity;

$hum_compensated = $humidity + (25 - $temperature) * -0.15;
echo "Humidity (compensated): ".$hum_compensated;

?>

SCL и SDA (8 и 9 соответственно) - это номера портов, к которым подключен датчик.
Программа предельно проста и не требует дополнительных пояснений, кроме одного... Вы, наверное, обратили внимание, что программа выдает еще и влажность с температурной компенсацией. Согласно документации на датчик значение компенсированной влажности более точное. На деле же оно совсем незначительно отличается от некомпенсированного.

На момент написания этой статьи я не успел еще накопить достаточное количество данных, чтобы достоверно судить о точности и адекватности показаний нового датчика. Поэтому на текущий момент публикую только экспресс-тест, так сказать, с пылу с жару. Я подключил оба датчика у себя в офисе. Зима, февраль, температура окружающего воздуха примерно 22,5 градуса, активно работает отопление... Считывание данных 1 раз в минуту.

HTU21D vs DHT22

Красный график: HTU21D
Зеленый график: DHT22 (AOSONG AM2302)

Сразу стало заметно, что HTU21D дает более плавный график, тогда как DHT22 постоянно дергается. В то же время усредненное значение влажности обоих датчиков в этих условиях примерно одинаковое. Признаться, я ожидал, что DHT22 сразу ударит в грязь лицом, а в экспресс-тесте он... не очень то и ударил. Далее вы можете наблюдать резкие изменения на графике. Это я начал открывать окна, ставить блюдца с водой поблизости от датчиков, резко повышать температуру отопления... Довольно удивительно, но оба датчика в этом диапазоне значений (от 28% до 34%) при резких колебаниях измеряют влажность почти одинаково. При снижении влажности вследствие увеличения температуры отопления, HTU21D показывает более низкие значения, а DHT22 продолжает дергаться на уровнях чуть выше...

Возьмем более длинный отрезок времени, на котором видно, как нещадно "колбасит" DHT22. Тем не менее, общий тренд на обоих графиках если и не совпадает в точности, то во всяком случае выглядит очень похожим. HTU21D ведет себя более спокойно и, думается, отражает текущее положение вещей значительно точнее. Вряд ли ночью в офисе действительно происходят резкие колебания влажности, правда? С другой стороны, если нас удовлетворяет разброс значений в пределах 1% и есть возможность усреднить значения с помощью того или иного программного алгоритма, то и DHT22 в целом справится с функцией измерения влажности, если, конечно, вам не попадется подвисающий экземпляр.


В офисе помыли полы...

Несмотря на перманентно пилообразный характер графика DHT22, искусственное изменение влажности в помещении в виде мытья полов этот датчик отрабатывает практически аналогично HTU21D. Разница не существенная.

Я обязательно продолжу сравнительное исследование HTU21D и DHT22, чтобы понять, как датчики ведут себя при более низком и более высоком уровне влажности. Тем не менее, при любом исходе исследования использование HTU21D в домашней автоматизации выглядит более предпочтительным. Во-первых, он все-таки наверняка точнее (судя, хотя бы по документации), да и фирма производитель заслуживает большего доверия. Во-вторых, надежнее, так как не зависает, выдает актуальные значения сразу и имеет поддержку целостности данных CRC8 (работа с этим алгоритмом, к слову, реализована в моем драйвере). В третьих, датчик меньше, а потому его удобнее и легче будет смонтировать. И что самое интересное, в среднем HTU21D стоит несколько дешевле DHT22.

Исходники I2C-PHP для MegaD-328 и датчика HTU21D

 

Автор: Andrey_B
Любое использование материалов сайта возможно только с разрешения автора и с обязательным указанием источника.



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

(необязательно, не отображается на сайте)


Сортировка комментариев: Последние сверху | Первые сверху

2016-02-06 12:38:59 | THK
Здравствуйте, Андрей!
Хочу задать такой вопрос, длинна шины I2C по спецификации Philips не более 1 метра, но это на стандартной частоте обмена 100 или 400 kHz. В Вашем случае частота обмена на несколько порядков ниже. Проводились ли испытания "максимальной протяженности шины" скажем с кабелем UTP, как с самым народным...
Просто не всегда есть возможность разместить контроллер в помещении, где измеряется влажность.
PS Также интересно на линиях какой длины стабильно работают датчики DHT22.


2016-02-06 21:06:32 | Александр
Андрей, спасибо Вам за очередную интересную статью! Возможно ли подключить на одну шину несколько таких датчиков - шина ведь последовательная - тем самым сократив кол-во занимаемых портов?


2016-02-06 23:37:59 | Andrey_B
THK, вот да, самому интересно. Судя по опыту, описанному в Интернете, подобные датчики прекрасно работают на расстояниях в несколько метров. Но в самое ближайшее время проверю лично.


2016-02-06 23:41:39 | Andrey_B
Александр, насколько я понимаю, датчик конкретно этого типа на шине может быть только один (его адрес никак не меняется). Зато на эту же шину можно посадить другие датчики или устройства, адреса которых не совпадают. Таким образом можно экономить порты.


2016-02-07 14:23:01 | Andrey_B
THK, проверил на I2C OLED дисплее. Там поток данных очень большой. Обязательно вылезла бы где-нибудь ошибка. Использовал для подключения витую пару 18 метров. Отлично работает.


2016-02-08 14:18:05 | Андрей
У меня BMP085 и BMP180 по витой кат.5е (hyperline) не завелись на 26 метрах, пришлось ардуину переносить ближе к датчикам(( На 20 метрах попробовал - работали, но долго не тестировал, буквально увидел показания и отключил...


2016-02-08 15:59:45 | Andrey_B
Андрей, как справедливо заметил Виктор, там, где не работало на 100Кбитах в секунду, возможно, заработает через I2C-PHP на более медленной скорости. Как-нибудь проверю на длинном куске кабеля.


2016-05-05 00:18:48 | Александр
При установке define("V", "2") в скрипте выводит Temperature: CRC error - 27 Humidity: 17.98 Humidity (compensated): 14.23. Для define("V", "1") датчик HTU21D отрабатывает как надо.

На этой же шине на той же дистанции висит BMP180, который работает без проблем в обоих режимах.


2016-05-05 10:41:11 | Andrey_B
Александр, важно, чтобы в контроллере MegaD-328 была самая последняя прошивка. Также необходимо загрузить последнюю версию скрипта с сайта (или из архива с демо-интерфейсом).


2019-01-03 20:18:59 | Артем
Андрей доброго времени суток. Не подскажите, не планируется в будущем подключения к меги такой платки? /www.icstation.com/htu21dbmp180bh1750fvi-temperature-humidity-pressure-light-sensor-triad-module-p-8862.html Спасибо.


2019-01-03 21:31:14 | Andrey_B
Ее и сейчас можно подключить. Сервер посредством MegaD-2561 сможет считать с датчиков все данные по отдельности.


2020-01-26 23:24:56 | Вадим
Андрей, в статье вы проверяли температуру в офисе. Как было сказано: "Зима, февраль, температура окружающего воздуха примерно 22,5 градуса, активно работает отопление..." но на графике видно, что датчик показывает температуру от 28 до 30 градусов, в пике подпрыгивая до 34.
Я купил 3 таких датчика, подключил и снял показатели, они такие:
1. 36.10
2. 40.30
3. 38.05
При этом дома стандартная комфортная температура 22-24 градуса (к сожалению нет термометра для точных замеров). Как быть с такими завышенными показателями, если ли возможность подстройки?


2020-01-27 09:49:58 | Andrey_B
Вадим, это совершенно нормально для датчиков такого типа - отдавать различные данные относительной влажности и температуры. Это характерно для большинства подобных датчиков. Хотите более точных показаний, обратите внимание на SHT85. Это специально отобранные, откалиброванные, высокоточные датчики. Цена вот только более чем в 10 раз выше, чем у HTU21D и подобных.
Встроенной возможности подстройки нет. Можно корректировать значения на стороне сервера.


2020-12-31 18:39:44 | d.v.ermakov
Поступил вопрос относительно последних комментариев. Из них можно понять, что сенсор HTU21D плох и неточен, но это совсем не так.
Во-первых, речь о влажности, у неё точность измерений плюс-минус несколько процентов всегда.
Во-вторых, после транспортировки, особенно зимой, датчики влажности испытывают шок, требуется время для регидратации сенсора (можно её ускорить, процедура описана в даташите).
Но это всё про влажность, с температурой проблем ноль.


2021-11-11 20:55:02 | Петр
Андрей. Такое огромное количество всевозможных датчиков можно прикрутить к MegaD. А нормального, поддерживаемого блоком "из коробки" датчика влажности не нашел.
Стоял DHT22 - сервером снимал и парсил показания, все работало, но раз в 2-3 месяца подвисал датчик, помогал перезапуск МД по питанию (потом узнал что помогает так же перезапуск по физическому размыканию любой из трех жил датчика)
Сейчас попробовал HTU21D. Совсем не смог подружить с MajorDomo. Даже считать показания не смог. Точнее датчик отзывается, показания считываются, но влажность показывает -6% (почти как "на пол шестого").

Возможно ли реализовать аппаратную поддержку датчика, который бы мог управлять выходом (аналогично поддержке термостата в модуле, но по влажности) - хотелось бы управлять вентилятором по влажности, не прибегая к силам сервера. Спасибо


2021-11-11 22:59:58 | Andrey_B
Петр, HTU21D поддерживается автономно по влажности через Program. Подробнее.


2022-01-17 13:15:49 | Виталий
Добрый день, Андрей. А можно этот датчик использовать, чтобы мерять температуру инерционной батареи в комнате? То есть физически прикрепить на заднюю стенку, эпоксидкой или как-то так. По паспорту t батареи не выше 95, ну допустим еще каких 10-15 погрешность. Или лучше DS18B20 использовать? А то вариант бесконтактного датчика имеет погрешность за как раз за счет бесконтактности (ток воздуха и все такое)Ю, ну и, откровенно говоря, на 7-8 батарей бесконтактный по деньгам кусается все же


2022-01-17 19:22:35 | Andrey_B
Виталий, я лично не пробовал, но думаю можно попытаться.