Добрый день, уважаемые читатели! В этой статье поговорим о том, как выбрать датчик температуры и влажности для проекта какой-либо автоматики. Статья может быть полезна всем начинающим DIY-конструкторам устройств на микроконтроллерах, в том числе и на Arduino.
Ни для кого не секрет, что большинство самодельных устройств домашней автоматизации основаны на измерениях температуры и (или) влажности и управление какой-либо нагрузкой в зависимости от входных данных. Например это может быть управление вентилятором в душевой комнате, включение или отключение отопительного котла, поддержание необходимого микроклимата в инкубаторе и т.д. и т.п. Соответственно для всего этого нужен какой-то чувствительный элемент, который будет каким-либо измерять температуру и преобразовывать её в цифровую форму, для “понимания” процессором.
Исходя из личного опыта могу сказать, что абсолютно все мои устройства “полоумного дома” имеют какой-либо датчик температуры и иногда влажности. Даже автомат для дистанционного включения компьютера. Зачем он ему? Для работы автоматики температура и не нужна, но контроллер просто измеряет температуру в комнате и передает её на основной термостат через локальный брокер.
Если вы попытаетесь набрать в поиске известной китайской торговой площадки фразу “датчик температуры и влажности arduino”, то получите большой и разнообразный набор предложений совершенно разных производителей и моделей сенсоров. У начинающего самоделкина глаза разбегаются. Кошмар! Что же выбрать? И у меня поначалу было точно то же самое ощущение, ведь я пришёл в мир микроконтроллеров сравнительно недавно (хотя и знаком с электроникой довольно давно, с 80-х годов прошлого века).
Но по мере вдыхания паров канифоли и олова приходит некоторое понимание и какой-никакой опыт, которыми я и хочу поделиться с вами в этой статье. Надеюсь она поможет сделать вам правильный выбор.
Необходимый дисклеймер
Различных способов измерения температуры очень много. Соответственно очень много разных типов датчиков. Я не работал и не имел дела со всеми возможными типами датчиков, поэтому поделиться могу только тем, с чем имел дело на личном опыте. Соответственно, в статье приведены только те сенсоры, которые можно сравнительно просто приобрести в российских или зарубежных интернет-магазинах.
Поэтому статья с точки зрения обзора всех возможных сенсоров явно не полная.
Все что изложено в статье, не в коем случае ни является экспертным мнением и основано только на личном опыте применения разных типов сенсоров и датчиков в домашних проектах. В промышленном производстве все гораздо серьезней и выводы из этой статьи вряд ли подойдут.
Классификации, приведенные в статье, могут не совпадать с ГОСТами и стандартами, и служат только для более простого понимания темы.
Термины и определения
В данной статье:
- Слова датчик и сенсор в большинстве случаев обозначают одно и то же.
- Под термином влажность имеется в виду относительная влажность воздуха (RH). Определение в умных словах вы можете почитать по ссылке, а здесь лишь упомяну, что она сильно зависит от температуры, и зависимость эта – отнюдь не линейная. Чем выше температура, чем больше водяных паров может “поместиться” в одной единице объема воздуха. Поэтому при повышении температуры влажность всегда падает, и как следствие зимой в отапливаемых помещениях сильно сухо, ведь поступающий с улицы воздух содержит очень мало паров воды в абсолютном выражении.
Кроме того, существуют сенсоры, позволяющие измерять влажность почвы, но в данной статье я их рассматривать не буду.
Условная классификация
Датчики температуры могут быть “сами по себе, свои собственные” (то есть для измерения только температуры), так и совмещенные с сенсорами относительной влажности воздуха. “Автономные” сенсоры влажности воздуха (без сенсора температуры) встречаются гораздо реже и должны быть гораздо менее точными, так как для точного определения влажности важна температура (хотя поручиться не могу, так как лично не использовал). Итак, первый уровень классификации:
- Сенсоры только температуры (условно назовем их “T-датчики”)
- Сенсоры только относительной влажности (H-датчики или даже более правильно RH-датчики)
- Сенсоры температуры и относительной влажности (TH-датчики)
- Есть относительно небольшая группа сенсоров, которые дополнительно позволяют измерять другие параметры окружающей среды: например давление или уровень загрязнений. Их я тоже немного затрону в этой статье.
Далее, стоит разделить все датчико-сенсоры на два больших типа:
- Аналоговые сенсоры, которые преобразовывают измеряемые величины в простой электрический сигнал, который зачастую нужно еще как-то преобразовать (усилителем, например) и затем подать полученный сигнал на аналого-цифровой преобразователь (АЦП) микроконтроллера. К аналоговым сенсорам можно отнести различные терморезисторы (термисторы) и термопары.
- Цифровые сенсоры имеют “на борту” свой личный микроконтроллер и свой личный АЦП, и поэтому выдают результат уже в готовом к употреблению виде (в крайнем случае его потребуется “разогреть”, как например в сенсорах Bosch Sensortec). Но цифровым сенсорам, разумеется, требуется источник питания внутренней электроники. Кроме того, оцифрованные данные передаются на микроконтроллер по самым разным интерфейсам (шинам), что так же вносит некоторую путаницу. Цифровые сенсоры могут быть откалиброваны при изготовлении на заводе, а могут быть и нет. В общем больше вопросов, чем ответов.
Лично я предпочитаю цифровые сенсоры, но в некоторых случаях они не применимы.
Разрешающая способность и погрешность измерения
Пожалуйста, не путайте разрешение (или шаг) измерения и погрешность измерения. Это разные характеристики.
- Шаг измерения является характеристикой цифровых сенсоров, зависит от разрядности АЦП датчика и показывает, на какую минимальную величину может изменяться выходное значение.
- Погрешность – отклонение измеренного значения величины от её истинного (действительного) значения (попросту говоря – насколько “врёт” датчик) и c разрешением связана только косвенно.
Многие цифровые датчики умеют программно изменить разрядность внутреннего АЦП, а следовательно изменять шаг измерения. В этом случае в таблице указан минимально возможный шаг измерения. Но за всё нужно платить – как правило, чем выше разрядность (меньше шаг), тем дольше выполняется измерение и оцифровка, и тем выше потребляемый сенсором ток.
Теперь таки поговорим за погрешность. Погрешность изменения не так уже и страшна, если она линейна во всем измеряемом диапазоне и стабильна по времени. В конце концов всегда можно “сместить” выходные данные по образцовому термометру или просто “по ощущениям”. Гораздо хуже, когда на величину ошибки сильно влияет сама измеряемая величина или имеется значительный дрейф при старении датчика. Тут уже простые корректировки не помогут.
Практически у всех датчиков погрешность измерения растет к краям диапазона. Если рассматривать комбинированные сенсоры “температура + относительная влажность воздуха”, то температурные сенсоры всегда обладают более высокой точностью, чем влажностные. Температуру измерять человеки научились довольно давно и с высокой точностью, а вот с влажностью всё обстоит гораздо хуже. Тем более, что на измерение влажности могут влиять много посторонних факторов типа скорости воздушного потока. Но всё равно цифровые сенсоры влажности как правило намного превосходят бытовые психометрические гигрометры по точности измерения.
Большинство сенсоров разных производителей при длительном пребывании в сильно влажной атмосфере (более 90% ОВВ / RH) дают дрейф показаний влажности в сторону увеличения (вплоть до 100%). Это и понятно – сенсор влажности (как правило это полимерный конденсатор) перенасыщается влагой. Некоторые сенсоры могут при этом полностью выйти из строя, а некоторые способны самовосстановиться спустя какое-то время после пребывания в условиях нормальной влажности. Некоторые датчики имеют встроенный нагреватель для удаления конденсата с сенсора после длительного пребывания в условиях повышенной влажности.
Аналоговые датчики температуры
Мало изменить температуру и влажность, нужно передать их на контроллер. Для аналоговых датчиков все относительно просто.
Терморезистор (термистор, NTC, PTC)
Терморезистор (другие часто встречающееся названия: NTC, PTC или термистор) изменяет свое сопротивление при изменении температуры. При этом сопротивление терморезистора может изменяться в разную сторону, в какую именно – как раз и “зашифровано” в его аббревиатуре:
- NTC расшифровывается как Negative Temperature Coefficient, что в переводе на русский язык означает отрицательный температурный коэффициент. При повышении температуры датчика NTC его сопротивление уменьшается, а при понижении температуры сопротивление возрастает.
- PTC расшифровывается как Positive Temperature Coefficient, что в переводе на русский язык означает положительный температурный коэффициент. При повышении температуры датчика PTC его сопротивление увеличивается, а при понижении температуры сопротивление уменьшается.
Но сопротивление ни один микроконтроллер “напрямую” измерять не умеет. Воспользовавшись образцовым источником тока, мы можем измерить падение напряжения на этом резисторе, затем оцифровать его, и таким образом получить какое-то цифровое значение. Зная “точку нуля” и коэффициент преобразования терморезистора (изменения сопротивления на 1 градус температуры) легко посчитать измеренное значение температуры. В качестве источника тока в простейшем случае может выступать ещё один постоянный резистор, образуя обычный резистивный делитель.
Но тут следует учитывать, что погрешность у такой системы измерения будет зависеть не только от самого терморезистора, но и от температурного коэффициента “образцового” резистора. А следовательно такая схема годится только для самых простых случаев – для защиты от перегрева например. В более серьезных системах используется источник стабильного тока, что более-менее гарантирует точное измерение во всем диапазоне температур. Кроме того, на точность измерения влияют соединительные провода – если они достаточно длинные и их сопротивление достаточно велико, то провода дадут дополнительную погрешность в изменениях.
Несмотря на не самую высокую точность измерения и необходимость применения дополнительной схемы (источника тока), термисторы получили широкое распространение во всякого рода китайских термостатах и термометрах из ценовой категории “три рубля ведро”. При этом шаг отображения на экране у таких устройств как правило не выше 0,5 градуса. В частности поэтому я и не люблю китайские термометры, а делаю их сам. Эти же датчики используются в погодозависимых котлах и прочей погодной автоматике.
Выводы: лично на мой взгляд применение таких сенсоров оправдано лишь в устройствах, где погрешность плюс – минус 5 градусов ни на что не влияет. Например в схемах защиты от перегрева, где им самое место. Ну и разумеется хорошо подходят в различные аналоговые схемы терморегуляции “на транзисторах”.
Термопара
Термопара — это термоэлектрический преобразователь. Термопара физически представляет собой спай двух различных металлов, который при разной температуре генерирует разную ЭДС (напряжение). Измеряя напряжение на выходе термопары можно с определенной точностью судить о температуре спая. Более подробно о принципе работы термопар вы можете почитать в интернете, но большинство статей это просто элементарный копипастинг. Здесь же я упомяну только их классификацию (тоже копипастинг):
Выходное напряжение у термопары – милливольты, и прямое изменение таких напряжений АЦП микроконтроллера не возможно. Для измерения и преобразования данных в цифровой вид потребуется дополнительная плата – преобразователь, например MAX6675, MAX31855, MAX31865.
Самый распространенный тип – термопара типа К, она же ТХА, ХА и хромель-алюмель. Стандарт ее градуировочной характеристики одинаков и в СНГ, и за рубежом: ГОСТ 8.585 гармонизирован с международным IEC 60584 (там она называется type K, NiCr-Ni). Поэтому можно быть уверенным, что, например, итальянский терморегулятор, работавший ранее с итальянской термопарой типа К, отлично заработает и с российской ХА (К). Это самая распространенная термопара в мире. Ее достоинства: бюджетность, хорошая чувствительность, широкий диапазон измеряемых температур, практически линейная зависимость выдаваемых милливольт от температуры. Этой термопарой ГОСТ разрешает измерять температуру от -200 до 1200°C, а кратковременно и до 1300°С. Но верхние пределы температур в данном случае кажутся завышенными: “уплывание” ТЭДС у ТХА заметно уже после 1100 °C.
“Уплывание” или дрейф термоЭДС термопар с течением времени неизбежен. То есть показания датчика меняются со временем, теряется точность и увеличивается погрешность измерения. К сожалению, этот процесс необратим. На то, как быстро показания термопары “уплывут”, влияет многое: температура измерения, состав атмосферы, состав изолирующих материалов и материалов арматуры, механические воздействия…
В атмосфере воздуха при температурах до 600°C термопреобразователь ХА может проработать до 40000 часов — примерно 4,5 года непрерывной работы. Но чем выше температура, тем меньше ресурс датчика: при измерении температур от 600 до 900 этот преобразователь проработает до 16 000 часов, т.е. около 2 лет. И так далее… Выше температура — меньше по времени служит датчик ТХА. Причем речь именно о рабочем ресурсе термопары, т.к. погрешность начнет увеличиваться еще раньше.
Выводы: термопары незаменимы для измерения очень высоких и очень низких температур, при которых работа цифровых сенсоров попросту не возможна: в различных печах, духовках, и т.д. и т.п. В нормальном диапазоне температур (-40 ~ +100 градусов) можно найти более простое и эффективное решение, без применения дополнительных плат преобразователей ( кроме того, лично я не люблю шину SPI, на которой работают преобразователи 😉 ).
Цифровые датчики
С аналоговыми измерителями температуры разобрались, поговорим о цифровых сенсорах. Если вы планируете использовать цифровые сенсоры, то первое на что стоит обратить внимание – это тип шины и напряжение питания сенсора.
Тип шины
Температуру и влажность мало измерить, её ещё нужно оцифровать и передать в микроконтроллер. Для передачи данных внутри цифровых устройств всякие слишком шибко грамотные придумали целую прорву самых разных интерфейсов, которые ещё частенько называют шинами. А нам теперь придется разбираться. Ну что ж…
Я не буду вдаваться здесь в технические подробности и протоколы, в интернете масса информации по этом поводу, в том числе и в datasheet-ах. Итак, если кратко, существуют следующие варианты подключения (для рассмотренных датчиков).
- 1-WIRE ( 1-Wire, OneWire )
1WIRE – протокол передачи данных в обе стороны по одному проводу. Разработан фирмой Dallas Semiconductor (сейчас Maxim Integrated) в далёких 90-х, но активно используется и сейчас. На шине должно быть одно master-устройство (Ваш микроконтроллер) и одно или несколько адресуемых slave-устройств. Для подключения датчика к контроллеру потребуется всего один свободный GPIO вывод, но на один вывод можно подключить много датчиков с разными адресами. Адреса у разных экземпляров датчиков различаются, поэтому их можно подключить очень много. По некоторым данным, длина провода при нормальном питании (то есть трехпроводном включении) может достигать 100 м, однако лично я не проверял. На пятиметровом кабеле датчики работают вполне стабильно.
- 1BUS ( Single-bus, иногда встречается как Aosong 1-Wire )
Однопроводная шина Single-bus разработана компанией Aosong Electronics Co., при этом она программно отличается от однопроводной шины Maxim / Dallas, поэтому несовместима с 1-Wire шиной Dallas / Maxim, хотя “электрически” выглядит одинаково. Управление шиной Single-bus происходит «прижиманием к земле» (подачей логического «0») и «отпусканием» шины, тогда в шине появляется логическая «1» через подтягивающий резистор. На этой шине может быть только один датчик, то есть для подключения каждого отдельного датчика потребуется свой отдельный GPIO. Зато длина кабеля датчика при отсутствии помех может достигать нескольких десятков метров. При этом «подтягивающий» резистор лучше располагать не около контроллера, а на стороне датчика. А заодно около самого датчика и помехогасящий конденсатор 100нФ на выводы питания не помешает – если на этой шине датчик из-за помехи “вываливается в ошибку”, то вернуть его в работу можно только кратковременным сбросом по питанию, перезагрузка MCU не помогает.
- IIC / I2C ( Inter-Integrated Circuit )
Последовательная асимметричная шина для связи между интегральными схемами внутри электронных приборов. Разработана фирмой Philips Semiconductors в начале 1980-х как простая 8-битная шина внутренней связи для создания управляющей электроники. Поэтому физическая “дальность” такой шины не превышает нескольких метров. Зато при сбое датчика из-за помех, он, как правило самостоятельно возвращается в работу через некоторое время (в отличие от Aosong 1-Wire). Самый распространенный интерфейс у производителей сенсоров. Шина использует две двунаправленные линии связи: SDA – (DAta) “данные” и SCL (CLock) – “тактовый сигнал”. Для различных плат MCU обычно используются выводы, используемые в таблице (источник: enjoyneering):
На одну шину можно “повесить” целую гирлянду датчиков и тем самым можно освободить кучу драгоценных GPIO. Адрес сенсора на шине 7-битный (восьмой бит используется для указания направления передачи данных). Однако проблема в том, что адрес датчика задается производителем и разные датчики часто имеют одинаковый адрес – который изменить либо нельзя, либо с путем танцев бубном (перепаиванием “адресного” резистора на шилде датчика). Поэтому и выходит, что к одному контроллеру больше одного-двух одинаковых датчиков (с одним и тем же адресом) не подключить. Как выход можно использовать датчики разных производителей – у них адреса могут быть разными и их можно использовать одновременно. Либо использовать различные мультиплексоры.
Более подробно познакомиться с шиной I2C вы можете из следующей статьи: Шина I2C – принципы функционирования или зачем нужны подтягивающие резисторы – в данной статье вы сможете узнать, например, как правильно согласовать 5-вольтовые Arduino с трех-вольтовыми сенсорами.
- SPI ( Serial Peripheral Interface )
Последовательный периферийный интерфейс иногда называемый 4-х проводным интерфейсом, является последовательным синхронным интерфейсом передачи данных. На Arduino – совместимых устройствах используется не часто, ввиду того, что для нее требуется как минимум четыре GPIO, а их всегда не хватает (особенно на ESP8266). Лично я не пока не пользуюсь, поэтому описания здесь не будет (потому что я не пишу о том, что лично не попробовал).
- RS485 ( Recommended Standard 485 )
Промышленный стандарт, который приобрел большую популярность в промышленной автоматизации. Достаточно хорошо защищена от помех, длина шины может измеряться сотнями метров. Как в случае с I2C, позволяет подключить на одну шину множество адресуемых сенсоров, причем адрес можно изменять программными средствами, что не может не радовать. Как правило, внутри таких сенсоров используется какой-либо чип с интерфейсом I2C, например производства Sensirion, затем данные обрабатываются дополнительным микроконтроллером и уже затем передаются по интерфейсу. Но стоимость сенсоров с интерфейсом RS485 существенно выше аналогов с шиной I2C. Хотите длинный провод – раскошеливайтесь на RS485 версию. Дополнительно вы получите широкий диапазон питания – от 5 до 24 (или даже 36В). Из недостатков можно отметить гораздо более высокий ценник и необходимость применения специальной платы – преобразователя интерфейсов.
В последнее время я все чаще использую именно такие датчики, не смотря на их высокую цену. Почему? Да просто потому что относительно легко и просто кинуть всего одну витую пару по всему дому и подключить к ней множество однотипных датчиков. При этом большинство сенсоров RS485 уже оформлены в аккуратный корпус и вам не нужно заботится их “оформлением”. Некоторые даже имеют “свой личный” lcd-экран. За это стоит переплатить.
Напряжение питания датчиков I2C и SPI
Если вы планируете использовать цифровые сенсоры на шине I2C или SPI, то следующий фактор, на который следует обратить пристальное внимание – напряжение питания. Для шины RS485 всё проще – там внутри каждого сенсора есть свой стаб и напряжение питания может составлять от 5 до 36В.
Если обратиться к datasheet-ам производителей сенсоров, то можно заметить что большинство из них рассчитаны на работу с напряжением питания максимум 3,6В. Прямое подключение таких сенсоров к 5В микроконтроллерам вроде Arduino Uno приведет к однозначному выходу их из строя. Но ведь же работают же! – возразят читатели. И будут правы.
Большинство сенсоров, которые можно купить у дядюшки Ляо, как правило уже распаяны на миниатюрных платах – шилдах, на которых помимо собственно сенсора могут располагаться конденсатор на линии питания и резисторы подтяжки сигнальных выводов шины. Это если вы держите в руках трехвольтовыую версию шилда.
Но мудрые китайцы давно придумали дополнительно ставить на шилд стабилизатор на 3,3В и согласователь логических уровней 3.3В <-> 5В, что позволяет безопасно и просто использовать такие сенсоры и с пятивольтовой логикой. Такие шилды легко отличить внешне по наличию лишних деталей.
Но за все нужно платить. Стабилизатор в процессе своей работы немного, но нагревается, и тем самым может влиять на показания датчика.
Иногда стабилизатор встраивают прямо внутрь чипа сенсора, на производстве. Например так поступили в Aosong при выпуске AHT21. Он допускает напряжение питания до 5,5В. Но увы, по отзывам пользователей это ухудшило его характеристики в том числе и из-за паразитного нагрева от стабилизатора.
Можно ли такие сенсоры подключать к esp32 или esp8266 с 3-вольтовой шиной? Ответ: можно! Стабилизатор, конечно, немного просадит питание, но большинство сенсоров нормально работают уже с 2,5В и это не повлияет на их работоспособность. Но если есть возможность – лучше всё таки использовать версию без стабилизатора. Более подробно о согласовании уровней при подключении к шине изложено в статье: шина I2C
Популярные производители цифровых сенсоров I2C
Несмотря на обилие разнообразных предложений цифровых сенсоров на рынке, основных производителей не так уж и много.
Разумеется, каждый из перечисленных ниже производителей выпускает огромный ассортимент датчиков и чипов, но в данной статье я рассматриваю только те, которые больше всего “в ходу” у самодельщиков.
- Dallas Semiconductor, ныне Maxim Integrated. Этот производитель известен пожалуй самым популярным цифровым датчиком температуры – DS18B20 и его модификациями. DS18B20 обменивается данными по 1-Wire шине и при этом может быть как единственным устройством на линии так и работать в группе. Каждый DS18B20 имеет уникальный 64-битный адрес, который позволяет работать с множеством датчиков на одной шине. Длина провода в этом случае может достигать нескольких десятков метров. В дополнение, DS18B20 может питаться напряжением линии данных (“parasite power”), при отсутствии внешнего источника напряжения.
Сенсоры: DS1820, DS18B20 и модификации - Aosong Electronics Co.,Ltd (датчики так же маркируются как ASAIR). Выпускает датчики температуры и влажности серий DHT 11/12/21/22 (digital temperature & humidity) с интерфейсом Single Bus и более современные АНТ 10/15/20/21 (aosong temperature & humidity) с интерфейсом I2C. Сенсоры DHT весьма популярны у начинающих самодельщиков ввиду невысокой цены и обилию примеров использования (скетчей). Однако они обладают и существенными недостатками (из-за которых на текущий момент я полностью исключил их из постоянного использования в своих проектах): склонности к периодическому спонтанному зависанию и “закисанию” в условиях повышенной влажности (из-за чего датчик влажности тупо выдает 99.9% даже когда реальная влажность составляет менее 85%). Про сенсоры этого производителя я уже писал ранее.
Серии сенсоров: DHT 11/12/21/22 | АНТ 10/15/20/21 - Bosch Sensortec. Широко известный в определенных кругах производитель сенсоров температуры и … давления с интерфейсом I2C или SPI. Отличительной чертой этих сенсоров является именно измерение давления воздуха, вследствие чего их можно с успехом применять при измерении высоты полёта и в метеостанциях. Серия BMP умеет только в температуру и давление. Сенсор влажности добавлен позже в серию BME “сбоку-припеку” и не отличается особой точностью, особенно в условиях “наружных” измерений. Хотя в комнатных условиях его вполне можно применять. Про сенсоры этого производителя я уже отдельно писал ранее.
Сенсоры: BMP 80, BMP 180, BMP 280, BME 280, BME 680 - Sensirion, Switzerland (Швейцария). Лично на мой взгляд – это лучший производитель сенсоров температуры и влажности с интерфейсом I2C на текущий момент, очень популярных в том числе и среди DIY-конструкторов. На текущий момент выпускает серии сенсоров температуры и влажности SHT10, SHT2x, SHT3x и самая современная серия SHT4x. Если вы будете искать сенсоры этого производителя на Ali, то наверняка заметите, что все они продаются сериями, например: SHT20/21/25. Или SHT30/31/35. Конечно же, никто не запускает в производство отдельные сорта датчиков. Просто на этапе калибровки лучшие экземпляры маркируются как SHT35; явные середнячки – попадут в SHT31; ну а “третий сорт не брак” – будут промаркированы как SHT30. Ну и цена у них соответствующая. Когда будете выбирать себе сенсор для проекта, вы вполне можете ориентироваться на этот принцип. Как я уже упомянул здесь, температуру все сенсоры измеряют довольно точно, важна ли вам точность при измерении влажности? Для какой-нибудь автоматической сушилки, возможно, это и важно. А вот для управления котлом – вряд ли это будет иметь существенное значение. Кстати, самым точным сенсором этой компании был SHT71, увы, уже снятый с производства. Разумеется, компания выпускает широкую гамму самых разнообразных сенсоров, например Sensirion SCD30 – лучший из доступных CO2 сенсоров, но в статье речи об нем не будет.
Серии сенсоров: SHT10 | SHT20/21/25 | SHT30/31/35 | SHT40/41/45 - TE Connectivity (TE) Measurement Specialties, Inc – MEAS France. Французская компания, которая выпускает сенсоры температуры и влажности с интерфейсом I2C, во многом похожие на сенсоры от Sensirion. В DIY-секторе наиболее популярными продуктами являются сенсоры температуры и влажности серии HTU2xD и HTU3xD (буква D обозначает цифровой интерфейс, есть еще и аналоговые сенсоры). Эти сенсоры очень похожи на серию SHT2x Sensirion – не только по своим функциональным характеристикам, но и по набору регистров / команд, что делает их полностью совместимыми со стороны микроконтроллера и программного драйвера. Что, несомненно, очень нам на руку, не нужно лишний драйвер писать.
Серии сенсоров: HTU20/21/25D | HTU30/31/35D - Texas Instruments. Достаточно известный производитель чипов и электроники. В рамках данной статьи нам интересна линейка сенсоров температуры и влажности HDC1080 и HDC2080 с интерфейсом I2C. Отличительной особенностью этих сенсоров является их особая экономичность, что делает их лучшим решением для устройств с питанием от батарей или аккумуляторов. На AliExpress я не нашел шилды со стабилизатором, что подтверждает их основное назначение. Поэтому с Arduino Uno без танцев с бубном их использовать не получится.
Сенсоры: HDC1080, HDC2080 - Silicon Laboratories. В любительском сегменте нам интересен только один единственный датчик температуры и влажности с интерфейсом I2C – Si7021 (ранее был ещё Si7020, но его уже нет в продаже). На Ali мне попадались в только поддельные датчики, отличить которые можно по “кривому” серийному номеру. Датчики Si7021 “программно” совместимы (по регистрам) с SHT2x, что позволяет использовать один и тот же драйвер. Однако Si7021 имеют больше возможностей, чем собратья от других производителей, поэтому система команд более широкая, это следует учитывать. Серия Si70xx имеет в своем составе еще два датчика – Si7013 и Si7020, однако на текущий момент найти их уже довольно сложно. Да и незачем.
Сенсоры: Si7013, Si7020, Si7021
Возможно вы заметили, что в данном списке нет I2C – сенсоров для изменения только температуры. Это действительно так. Дело в том что лично мне они совсем не интересны, так как шина I2C имеет довольно ограниченный радиус действия. Когда нужен только датчик температуры проще использовать популярный и дешевый DS1820.
Дополнительные функциональные возможности цифровых сенсоров I2C
Многие цифровые сенсоры именитых производителей, помимо собственно измерения температуры и влажности, умеют делать некоторые дополнительные интересные штуки, которые могут вам пригодится в ваших проектах.
- Защитная шторка от пыли и конденсата. Некоторые сенсоры имеют специальный фторопластовый фильтр поверх чипа. Это позволяет защитить чувствительные элементы от пыли и конденсата. Может пригодится в помещениях с плохими условиями труда.
Этими “шторками” могут быть оснащены почти любые современные чип-сенсоры серия SHT, HTU, почти всегда она имеется на клоне Si7021. Таким же фильтром оснащены AHT15, но на AHT10 / 20 не встречал ни разу.
- Встроенный нагревательный элемент. Многие из современных сенсоров температуры и влажности оснащены встроенным резистором – нагревателем небольшой мощности. Поднять температуру он может не слишком сильно – обычно не более чем на 2-3 градуса. Некоторые производители указывают в даташитах его назначение только для целей самотестирования, но некоторые из производителей прямо указывают на возможность его использования для “самопросушки” сенсора влажности. Что я и делаю: в уличной метеостанции один раз в сутки (ночью) этот самый нагреватель включается на 15 минут, измерения при этом прерываются. Результат положительный: за год эксплуатации сенсора еще ни разу не наблюдалось “закисание” сенсора влажности, ни зимой, ни летом во время дождя.
Эта возможность имеется у сенсоров серий SHT, HTU и Si70xx, причем последний умеет еще и мощность нагрева регулировать.
- Возможность указания границ диапазонов и выход прерывания. Некоторые датчики имеют выход прерывания и специальные регистры для хранения пороговых значений температуры и влажности. Все это позволяет переводить главный контроллер в режим глубокого сна и “будить” только по сигналу прерывания при выходе за пределы заданного диапазона. Это очень удобно для устройств с автономным питанием.
Например: вам нужно создать устройство, которое будет предупреждать о появлении “лишней” влажности в каком-либо труднодоступном месте. Сетевое питание невозможно. В этом случае микроконтроллер запускается, подключается к сети, получает параметры например с MQTT сервера, настраивает сенсор и уходит в глубокий сон, сократив потребление энергии до минимума. При выходе влажности за заданные пределы сенсор прерыванием будит MCU, он запускается, подключается к сети и отправляет предупреждение. Задача решена.Эта функция имеется у HDC2080 и в “третьей” серии SHT 30/31/35 (но в последней, четвертой серии эту функцию убрали, так что если она вам нужна – запасайтесь пока есть в продаже)
Индивидуальные особенности и личный опыт эксплуатации цифровых сенсоров I2C
В этой части марлезонского балета статьи хотелось бы упомянуть о реальном опыте работы с датчиками разных серий. Самосдельные устройства автоматики работают у меня дома и на даче лет примерно около пяти, и уже можно сделать какие-то выводы. Итак…
DS1820 / DS18B20
Один из самых популярных датчиков температуры, возможность измерения влажности отсутствует. Зато благодаря вариантам в гильзе им можно измерять температуру не только воздуха, но и почвы, воды, теплоносителя, паров и т.д. и т.п. На максимальном взлетном режиме имеют разрешающую способность 0.0625°С с заявленной погрешностью ±0,5~2.0°С. Однако не стоит сходу доверять этой погрешности – почти всё, что есть на нашем рынке – подделки от дядюшки Ляо, соответственно и характеристики могут быть гораздо ниже. Пруфы здесь. Убедится в этом достаточно легко самому – подключить к одному прибору несколько одинаковых сенсоров, купленных в разное время у разных продавцов и посмотреть на разброс их данных. Однако при желании можно купить и оригинальные сенсоры, но совсем за другую цену.
DHT 11/12/21/22 (они же AM2301, AM2302), Mw33
Ещё одна очень популярная серия, которая позволяет измерять не только температуру, но и относительную влажность.
DHT11 стоит выделить отдельно – это самый дешевый и самый убогий из всех цифровых датчиков, которые можно найти. DHT11 не калибруется производителем на заводе. Это означает, что Вам потребуется скорректировать его данные по “образцовому” сенсору. Давным-давно, в далекой далекой галактике я как и все, накупил этих датчиков, но так и не смог найти им применение. Не рекомендую.
Mw33 – неопознанный (мной) китайский сенсор неизвествного производителя. Впрочем, он работает по тому же самому протоколу и по параметрам смахивает на DHT12.
DHT21 / DHT22 (или АМ2301 / АМ2102 в другой маркировке) относительно неплохи, и в принципе, подойдут для большинства “домашних” применений. Тем более, что позволяют использовать кабель до 10-20 м. Но есть два “но” – низкое качество сенсора влажности и склонность к зависаниям. При высокой влажности его показания резко поднимаются до 100% и упираются в “потолок”. Поэтому он не очень годится в качестве сенсора для уличной метеостанции, если вам важна влажность.
Не стоит использовать эти сенсоры и в помещениях с высокой влажностью (погреба, сауны и т.д.), так как после достаточно длительного пребывания (несколько недель и более) в таких условиях конденсатор измерения влажности насыщается влагой и выходит из строя. Необратимо! Измерение температуры при этом продолжает функционировать как обычно, а вот показания влажности будут всегда будут 99,9%.
В последнее время китайцы научились подделывать самих китайцев и на ali попадается много подделок под DHT22. На самом деле внутри корпуса совсем другой сенсор и другая электроника. Хорошо это или плохо – вам судить, я уже не использую эту серию в своих проектах.
Сенсоры этой серии склонны изредка уходить в “глухую несознанку” (иногда один-два раза в месяц, иногда реже, иногда чаще). Выглядит это так – датчик подтягивает линию данных к земле и наглухо зависает, никак не реагируя на внешние сигналы. Вернуть его в рабочее состояние можно только кратковременным отключением питания датчика, сброс MCU в этом случае никак не поможет. Поэтому сразу стоит предусмотреть в вашей конструкции кнопку или реле для сброса датчика без перезагрузки MCU. Для предотвращения подобных ситуаций на форумах рекомендуют устанавливать подтягивающий резистор на шину данных и фильтрующий конденсатор на вывод питания около датчика, а не около микроконтроллера (но, увы, это не всегда помогает). Поэтому имеет смысл купить их уже распаянными на минишилдах, где уже установлены и резистор и конденсатор. Это так же упростит их замену в случае выхода из строя. Но будьте внимательны – не все шилды содержат указанные компоненты.
При длине кабеля свыше 10 метров китайцы рекомендуют снизить сопротивление резистора подтяжки вывода данных до 1 кОм при 5В. Если требуется подключение датчика длинным кабелем, и Вы используете готовый шилд с резистором, можно просто установить дополнительный резистор “со стороны контроллера” с учетом уже установленного.
AHT 10/15/20/21. Относительно новый (datasheet от 2018 года)линейка сенсоров от той же ASAIR / AOSONG для измерения температуры и влажности. Уже для шины I2C. Шаг и погрешность измерения были улучшены производителем. В отличие от датчиков других производителей это не просто по разному откалиброванные сенсоры одного типа, а совершенно разные модели с разным функционалом.
Из недостатков в первую очередь стоит отметить отсутствие CRC (контрольной суммы) при передаче данных по шине для младших моделей AHT10 / AHT15. Из-за этого никак невозможно определить, правильные ли данные получены с датчика при помехах / проблемах на шине. В следствие чего показания температуры могут скакать аки тыгдымские кони – от +20 до -50 и до +150 за несколько соседних измерений. Можно только ориентироваться на последнее “правильное” значение – если новое значение отклоняется от последнего больше чем на 5 градусов, считаем его “плохим”. Но это далеко не оптимальный метод.
AHT10 увы, обладают невысокой “повторяемостью” выходных данных. Данные о температуре у меня совпадают на нескольких разных датчиках, раcположенных в одной и той же точке, но купленных в разное время. А вот показания о влажности при этом могут значительно различаться – аж до 15%. Приходится корректировать данные по более точным сенсорам, например SHT31.
Длительное воздействие на сенсор серии AHT в течение 60 часов при влажности > 80% может привести к временному дрейфу относительной влажности на +3%RH. Датчик медленно вернется к паспортной точности ±2%RH при нормальных условиях эксплуатации. Рекомендуемая частота опроса не менее 8 секунд (а ещё лучше до 30 секунд), так как датчик склонен к саморазогреву при выполнении измерений. Кроме того, следует учитывать, что этот сенсор имеет некоторую инерционность по сравнению с STU21D / Si7021, то есть гораздо медленнее реагирует на быстрые изменения влажности и температуры. Это может быть и хорошо (своеобразный встроенный фильтр от резких “скачков”), и плохо – когда требуется быстрая реакция на изменения. Вывод: “дешево и сердито”. Можно брать в условиях ограниченного бюджета, но не без недостатков. Когда требуется точность – лучше рассмотреть другие варианты.
Стоит отдельно остановиться на последней модели серии – AHT21. Это полностью кремниевая модель в I2C линейке сенсоров от ASAIR / AOSONG для измерения температуры и влажности со встроенным в чип стабилизатором. Поэтому на шилдах с этим сенсором стабилизатор не требуется. Но китайцы умудряются паять этот чип на плату от AHT10/20, получая двойную стабилизацию (впрочем – в этом есть некий смысл – меньше нагрев внутреннего стабилизатора чипа, меньше смещение температуры. Потребление тока достигает почти 1 мА в момент изменения, что в несколько раз выше, чем у предыдущих датчиков. Как и в случае с AHT20, этот сенсор умеет в CRC. Судя по отзывам, этот датчик вышел не очень удачным. Во первых встроенный стабилизатор много кушает и греет кристалл, что приводит к дрейфу показаний температуры. Во вторых, судя по тестам, AHT21 склонен занижать данные относительной влажности примерно на 10% RH. Сенсор достаточно быстро нагревается при повышении температуры (например при касании руками), а вот остывает гораздо медленнее.
BMP/BME. Линейка сенсоров от именитого производителя имеет довольно интересные особенности, отличающие его от других. Если говорить строго, сенсоры от Bosch – это не про температуру и влажность. Это про давление. В первую очередь эти сенсоры предназначены для изменения давления воздуха, и, как следствие, высоты над уровнем моря. И только во вторую очередь – всё остальное. Сенсор температуры нужен самому датчику для внутренних расчётов (давление зависит в том числе и от температуры воздуха), поэтому он так же присутствует во всех моделях сенсоров от Bosch. Ну а сенсоры для изменения относительной влажности воздуха и IAQ добавили “сбоку-припеку” постольку-поскольку они очень популярны в настоящее время.
Во-вторых, данные с датчика приходят “в сыром виде” (RAW), то есть ровно так, как были измерены и оцифрованы. Никаких внутренних перерасчётов в удобный пользователю формат внутри сенсора не производится. Пересчёт и корректировка измеренных значений по данным заводской калибровки должна производится на стороне микроконтроллера по специальным формулам. Для этого предварительно нужно “скачать” с датчика калибровочные коэффициенты. Сделано это, видимо, для снижения нагрузки на процессор датчика, а следовательно и снижение потребления энергии. Но не спешите паниковать – в библиотеках для Arduino уже встроены все необходимые функции, либо можно воспользоваться официальными API от Bosch.
К сенсору давления претензий нет – все работает максимально точно. Датчики BMP довольно хорошо ведут себя и в помещении и на улице, а вот с BME дела обстоят несколько хуже. По моим наблюдениям за несколькими BME280 эти датчики немного завышают показания температуры и немного занижают показания влажности (по сравнению с Si7021 / SHT31). Сенсор влажности на улице, так же как и DHT, во время дождя или тумана легко замокает и “упирается” в 100%, а зимой и вовсе может замерзнуть.
SHT. Лично на мой взгляд – лучшая линейка сенсоров температуры и влажности для шины I2C на данный момент. Хотя и несколько более дорогая. Отлично работают как в помещении, так и на улице, особливо при периодическом использовании встроенного нагревателя. В уличной метеостанции SHT31 работает около года и пока не доставлял каких-либо нареканий – ни в морозы ни летом. Ничего плохого про них на данный момент сказать не могу.
SHT20 можно найти не только в виде чипа или шилда, но и в виде микромодуля в пластиковом корпусе (чем-то похож на DHT22) с напряжением питания до 5.5 В. Очень удобно использовать, корпус небольшой, аккуратный и не заметный. На Ali его можно легко найти по названию FHT20.
Чипы-сенсоры этой серии братья-китайцы часто используют в RS485 версиях сенсоров температуры и влажности, но в основном это “младшие” модели из линеек.
Предупреждение! Есть информация от моего подписчика, что на AliExpress могут попадаться оригинальные сенсоры, но бывшие в употреблении, то есть снятые с разбираемых приборов.
HTUxxD. По сути это аналоги серии SHT от другого производителя. По моим наблюдениям несколько хуже справляются с измерением влажности, но все-таки лучше “китайцев” AHT. Иногда данные требуют корректировки. За 3 года использования только один вышел из строя, но он находился в суровых условиях – внутри кухонной вытяжки. На улице лично у меня пока не использовались, поэтому про применение в условиях русской зимы ничего сказать не могу. Но судя по наличию нагревателя, возможно не все так плохо. Относительно дешевы, поэтому смело могу рекомендовать для большинства “домашних” применений.
HDC. Неплохие сенсоры от ещё одного производителя. Отличительная особенность – низкое потребление энергии. А также настраиваемые пороги и выход прерывания для HDC2080, но он имеет заметно более высокую стоимость. Для автономных приборов, но ничто не мешает использовать их и в обычном режиме.
Si7021. Еще один аналог серии SHT. Как и ближайшие конкуренты, этот датчик так же способен к длительной работе в условиях повышенной влажности, включая конденсацию капель воды. Si7021 содержит встроенный резистивный нагревательный элемент, который можно использовать для повышения температуры датчика на 1.5°C. Этот элемент можно использовать для тестирования датчика, для предотвращения конденсации или для измерения точки росы, когда Si7021 используется вместе с отдельным датчиком температуры. Ток нагревательного элемента можно регулировать от ~3 до ~95 mA, соответственно будет изменяться и рассеиваемая нагревателем мощность.
В отличии от собратьев (HTU21D / SHT2x) Si70XX измеряет температуру и влажность одновременно. То есть измерения происходят гораздо быстрее и экономичнее. Вначале отсылаем команду на измерение влажности, а после необходимой паузы получаем измеренные влажность и температуру. Кроме того, сам по себе датчик Si7021 гораздо быстрее выполняет измерения, что может быть важно в некоторых применениях. Во вторых, датчик выдает уже термокомпенсированное значение влажности, а на HTU скомпенсированное значение придется считать отдельно.
К сожалению, на AliExpress часто попадаются поддельные Si7021, видимо мне попались именно такие. Распознать их можно по серийному номеру: у поддельных датчиков он всегда будет 0X15FFFFFF, при этом китаезы даже не потрудились посчитать для него корректную контрольную сумму. В целом такие датчики работают, и даже выдают более-менее достоверные данные, вот только временные задержки на измерения не соответствуют заявленным.
Выводы или небольшой гайд по выбору датчика
Наконец-то мы добрались до главной цели данной статьи – руководства по подбору датчика для проекта. Разумеется – все что здесь описано – не строго обязательно и изложено на мой вкус. Но этот мой вкус обоснован вышеизложенной теоретической информацией. А следовать ей или нет – ваш личный выбор.
Если вам нужна только температура – то вы можете легко использовать практически весь спектр доступных сенсоров – от аналоговых для цифровых. Но с учетом того, какую температуру нужно измерять и где.
- если вам вообще не нужна точность, а достаточно включить нагрузку по приблизительному порогу – используйте аналоговый терморезистор
- если нужно измерять высокие (выше 100°C) или низкие (ниже минус 50°C) температуры – то выбора у вас нет – вам подойдет только термопара. Соответственно потребуется и преобразователь сигнала для нее.
- если нужно измерять температуру воды, пара, почвы и прочих несовместимых с электроникой субстанций – то ваш выбор DS1820 в стальной гильзе. Только стоит учитывать, что в воде эта гильза служит относительно недолго, несмотря на заявления “из нержавейки”. Да и заливка с открытого конца гильзы оставляет желать лучшего.
- в нормальных условиях вы можете использовать любой удобный вам сенсор исходя из точности и длины необходимых кабелей. Например тот же DS1820 даст вам возможность использовать более длинные кабели по сравнению с шиной I2C (без специальных ухищрений).
Если вам нужна и температура и влажность, то от использования аналоговых преобразователей и DS1820 придется отказаться. Только цифра, только хардкор. Тут выбора относительно не много.
- нужна относительно высокая стабильность измерения влажности или работа на улице – используйте серию SHT от Sensirion. Лично мой выбор – SHT21, 31 или 41. Старшие модели неоправданно дороги для домашних применений.
- нужна защита от пыли или конденсата – используйте модификацию с фторопластовым фильтром на чипе.
- нужна работа в условиях автономного питания – используйте сенсоры от Texas Instruments.
- нужна возможность задать пороговые значения и выход прерывания – ваш выбор SHT31 или HDC2080
- нужен кабель подключения длиннее 3 метров – из цифровых TH-сенсоров без “обертки” такое могут только DHT (они жеAM2301 / АМ2302). Не не намного, до 10, максимум 20 метров. Нужно больше – вашим выбором должен стать RS485, но об этом ниже.
- во всех остальных случаях можно использовать любой доступный сенсор для I2C, но я больше не покупаю AHT10.
Во всех случаях подбирайте сенсор по диапазону рабочих температур и влажности.
А что, если важны и температура и влажность, но длина кабеля “сенсор <-> микроконтроллер” должна быть достаточно высокой?
У вас, в принципе, есть два выбора:
- использовать например специализированные микросхемы – “удлинители шины” типа PCA9615 или P82B715. Они позволяют существенно поднять напряжение и токи внутри “физической шины” и тем самым снизить потери и помехи. Но это дается за счет очень существенного дополнительного энергопотребления, разумеется. За счет этого можно “удлинить” шину до 20 метров.
- используйте сенсоры на шине RS485. Китайская народная промышленность выпускает огромное количество сенсоров температуры и влажности со встроенными преобразователями интерфейса для подключения к шине RS485.
Да, такие устройства существенно дороже обычных шилдов и требуют применения адаптера (одного на всю шину), но:
- Шина RS485 позволяет иметь длину кабеля до 1000м, что с огромным запасом перекрывает все домашние потребности
- Устройства на шине RS485 имеют “программные” адреса, которые может изменить пользователь, что позволяет подключить к одной шине до 127 устройств.
- Питание таких сенсоров обычно может быть в пределах от 5В до 36В, что несомненно, очень удобно
- Они имеют корпус и иногда собственный дисплей
Недостатки такого подхода:
- Гораздо более высокая стоимость
- Необходимость применения адаптера TTL – RS485
- Как правило, в китайских устройствах используются либо термопары, либо младшие модели из линеек sensirion (SHT20 или SHT30)
- Мы теряем возможность использования встроенного нагревателя, если он имеется
В заключение приведу несколько фотографий (с AliExpress) таких сенсоров, которое я использовал:
На этом пока всё, до встречи на сайте и на dzen-канале!
💠 Полный архив статей вы найдете здесь
Пожалуйста, оцените статью:
Хорошая содержательная статья.