Найти тему
K12 :: О ESP32 и не только

Сенсоры температуры и влажности: условная классификация

Оглавление

Добрый день, уважаемый читатель! Начиная с этой статьи, я начну рассказывать про популярные в народе цифровые сенсоры температуры и влажности (ну ещё давления для Bosch Sensortec). В этой статье я постараюсь своими словами описать основные характеристики сенсоров, а так же их условную классификацию по способам подключения к микроконтроллерам. Статьи перенесены с моего сайта и дополнены с учетом личного опыта использования датчиков в течение нескольких лет и отзывов из "этих ваших ынтирнетов".

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

Характеристики сенсоров

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

  • Разрешение или шаг измерения зависит от разрядности АЦП (аналого-цифрового преобразователя) сенсора и показывает, на какую минимальную величину может изменяться выходное значение. Многие датчики умеют программно изменить разрядность внутреннего АЦП, а следовательно изменять разрешение.
  • Время измерения. Как правило, чем выше разрядность (меньше шаг), тем дольше выполняется измерение и оцифровка, и тем выше потребляемый сенсором ток.
  • Погрешность измерения – отклонение измеренного значения величины от её истинного (действительного) значения. Погрешность измерения является характеристикой точности измерения. То есть, грубо говоря, на сколько тот или иной сенсор "врёт". Практически у всех датчиков погрешность измерения растет к краям диапазона. Поэтому в характеристиках она может быть указана как “±0.5~1.0”, то есть “±в середине диапазона ~ на краях диапазона”.
На первый взгляд разрешение и точность - это одно и то же, но на самом деле это далеко не так. Шаг измерения может быть 0,01°С, но сенсор "показывает" 20°С, а на самом деле в комнате 22°С. Это означает, что сенсор температуры в данном случае, мягко говоря, "так себе".
График, иллюстрирующий ШАГ измерения
График, иллюстрирующий ШАГ измерения
  • Допустимые интервалы температуры и влажности. То есть зона комфорта сенсора, в переделах которой он сохраняет работоспособность. Если датчик измеряет одновременно температуру и влажность, рабочий диапазон температуры измерителя влажности может быть уже рабочего диапазона температуры измерителя собственно температуры. Например: диапазон измерения температуры в datasheet-e указан как “от -40° до +125°С”, но при этом измерение влажности возможно лишь при “от -20° до +70°С”
  • Многие сенсоры склонны к саморазогреву при частом измерении. То есть их показания температуры будут немного увеличиваться, если опрашивать их слишком часто. Там, где мне удалось найти такую информацию, я указал это в описании датчика. В любом случае в своих проектах я стараюсь не опрашивать датчик чаще чем один за в 20-30 секунд, обычно этого достаточно. Если Вам необходимы показания чаще, потребуется более тщательный выбор датчика.
  • Напряжение питания. Большинство сенсоров-чипов "с завода" имеют напряжение питания не выше +3,6В, что делает затруднительным их подключение к Arduino-подобным платам с питанием +5,0В. Но почти все из описываемых сенсоров можно приобрести уже в виде готовых модулей (шилдов), на которых могут быть распаяны стабилизатор 3,3В и конверторы логических уровней - такие сенсоры-модули можно без проблем подключать и к Adruino и к ESP32 / 8266. Соответственно для ESP и других контроллеров с напряжением питания 3,3В лучше выбирать шилды с прямым питанием, хотя обычно прекрасно работают и пятивольтовые экземпляры.
  • Шина подключения к микроконтроллеру. Температуру мало изменить, её еще нужно оцифровать и передать в микроконтроллер. Все цифровые сенсоры (NTC сенсоры я никогда не использовал и не рассматривал) можно условно поделить на несколько групп по типу подключения: 1-Wire, Single-bus, I2С, SPI и RS485. Их мы обсудим чуть ниже.

Особенности измерения относительной влажности воздуха

Если рассматривать комбинированные сенсоры "температура + относительная влажность воздуха", то температурные сенсоры всегда обладают более высокой точностью, чем влажностные. Температуру измерять научились довольно давно и с высокой точностью, а вот с влажностью всё обстоит гораздо хуже. Тем более, что на измерение влажности могут влиять много посторонних факторов типа скорости воздушного потока. Но цифровые сенсоры влажности как правило всё равно намного превосходят бытовые психометрические гигрометры по точности измерения.

Практически все сенсоры разных производителей при длительном пребывании в сильно влажном воздухе (более 90%) дают дрейф показаний влажности в сторону увеличения (вплоть до 100%). Это и понятно - сенсор влажности (как правило это полимерный конденсатор) перенасыщается влагой. Некоторые сенсоры полностью выходят из строя, некоторые способны самовосстановиться спустя какое-то время после пребывания в условиях нормальной влажности. Некоторые сенсоры имеют встроенный нагреватель для целей самотестирования и (или) удаления конденсата с сенсора влажности после длительного пребывания в условиях повышенной влажности.

Интерфейсы подключения (шины)

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

1WIRE ( 1-Wire, OneWire )

1WIRE – протокол передачи данных в обе стороны по одному проводу. Разработан фирмой Dallas Semiconductor (сейчас Maxim Integrated) в далёких 90-х, но активно используется и сейчас. На шине должно быть одно master-устройство (Ваш микроконтроллер) и одно или несколько адресуемых slave-устройств. Для подключения датчика к контроллеру потребуется свободный GPIO вывод, но на один вывод можно подключить несколько датчиков с разными адресами. Адреса у разных экземпляров датчиков различаются, поэтому их можно подключить много на одну и ту же шину. По некоторым данным, длина провода при нормальном питании (то есть трехпроводном включении) может достигать 100 м, однако лично я не проверял. На пятиметровом кабеле датчики работают стабильно.

Single-bus ( Aosong 1-Wire )

Однопроводная шина Single-bus разработана компанией Aosong Electronics Co., она отличается от однопроводной шины Maxim / Dallas, поэтому несовместима с 1-Wire шиной Dallas / Maxim.

Управление шиной Single-bus происходит «прижиманием к земле» (подачей логического «0») и «отпусканием» шины, тогда в шине появляется логическая «1» через подтягивающий резистор. Соответственно на этой шине может быть только один датчик, то есть для подключения каждого отдельного датчика потребуется свой отдельный GPIO. Зато длина кабеля датчика при отсутствии помех может достигать нескольких десятков метров. При этом «подтягивающий» резистор лучше располагать не около контроллера, а на стороне датчика. А заодно около самого датчика и помехогасящий конденсатор 100нФ на выводы питания не помешает – если на этой шине датчик из-за помехи “вываливается в ошибку”, то вернуть его в работу можно только кратковременным сбросом по питанию, перезагрузка MCU не помогает.

I2C ( Inter-Integrated Circuit )

Последовательная асимметричная шина для связи между интегральными схемами внутри электронных приборов. Разработана фирмой Philips Semiconductors в начале 1980-х как простая 8-битная шина внутренней связи для создания управляющей электроники. Поэтому физическая “дальность” такой шины не превышает нескольких метров. Зато при сбое датчика из-за помех, он, как правило самостоятельно возвращается в работу через некоторое время (в отличие от Aosong 1-Wire). Самый распространенный интерфейс у производителей сенсоров. Шина использует две двунаправленные линии связи: SDA – (DAta) “данные” и SCL (CLock) – “часы / тактовый сигнал”.

Для различных плат MCU обычно используются выводы, используемые в таблице (источник: enjoyneering):

-3

На одну шину можно “повесить” целую гирлянду датчиков и тем самым можно освободить кучу драгоценных GPIO. Адрес сенсора на шине 7-битный (восьмой бит используется для указания направления передачи данных). Однако проблема в том, что адрес датчика задается производителем и разные датчики часто имеют одинаковый адрес – который изменить либо нельзя, либо с путем танцев бубном (перепаиванием “адресного” резистора на шилде датчика). Поэтому и выходит, что к одному контроллеру больше одного-двух одинаковых датчиков (с одним и тем же адресом) не подключить. Как выход можно использовать датчики разных производителей – у них адреса будут разные и можно использовать их одновременно. Либо использовать различные мультиплексоры.

Ещё одна существенная проблема данной шины – физическая длина провода. Длина провода ограничена его емкостью – по стандарту емкость шины не должна превышать 400пФ. Отсюда вывод – максимальная длина шины сильно зависит от используемого кабеля. Витая пара и плоский телефонный четырехпроводный кабель достаточно хорошо подходят для этой шины но на на длине не более 3 метров. Немного увеличить “дальность” шины можно путем увеличения тока в шине, снизив номиналы подтягивающих резисторов, но осторожно – можно “спалить” ключи в MCU или сенсоре. Обычное значение подтягивающих резисторов – от 3,3к до 10,0к. Существуют микросхемы-удлинители шины I2C, у меня даже есть парочка комплектов, но и одни дают не сильно большой выигрыш.

Если вы используете уже распаянные датчики на минишилдах, то резисторы подтяжки на них уже обычно присутствуют, и дополнительно устанавливать их не требуется. Если необходимо к одной шине I2C подключить одновременно несколько датчиков (разумеется, с разными адресами), то в этом случае желательно отпаять резисторы подтяжки линий SDA и SDC с “промежуточных” шилдов датчиков (если они установлены), чтобы не перегрузить по току вывод MCU.

SPI ( Serial Peripheral Interface )

Последовательный периферийный интерфейс иногда называемый 4-х проводным интерфейсом, является последовательным синхронным интерфейсом передачи данных. На Arduino – совместимых устройствах используется не часто, ввиду того, что для нее требуется четыре GPIO, а их всегда не хватает (особенно на ESP8266). Лично я не пользуюсь.

Промышленный стандарт, который приобрел большую популярность в промышленной автоматизации. Достаточно хорошо защищена от помех, длина шины может измеряться сотнями метров. Как в случае с I2C, позволяет подключить на одну шину множество адресуемых сенсоров, причем адрес можно изменять программными средствами. Но стоимость сенсоров с интерфейсом RS485 существенно выше аналогов с шиной I2C. Хотите длинный провод - раскошеливайтесь на RS485 версию.

Маркировка сенсоров внутри серии

Если вы будете искать сенсоров на Ali, то наверняка заметите, что большинство современных сенсоров выпускается сериями, например: HTU20D/HTU21D/HTU25D. Или SHT20/21/25. Или SHT30/31/35. Связано это, на мой взгляд, с особенностями производства. Конечно же, никто не запускает в производство отдельные серии датчиков. Просто на этапе калибровки лучшие экземпляры маркируются как SHT35 (например); явные середнячки - попадут в SHT31; ну а "третий сорт не брак" - это SHT30. Ну и цена у них соответствующая. Когда будете выбирать себе сенсор для проекта, вы вполне можете ориентироваться на этот принцип. Как я уже упомянул здесь, температуру все сенсоры измеряют довольно точно, важна ли вам точность при измерении влажности? Для какой-нибудь автоматической сушилки, возможно, это и важно. А вот для управления котлом - вряд ли это будет иметь существенное значение.

Какой датчик выбрать для Вашего проекта?

В заключении данной статьи поделюсь своими личными соображениями – какой датчик выбрать для проекта.

Если требуется измерение только температуры (без учета влажности) – то смело можно брать DS18B20 и не задумываться о проблеме длинных проводов – этот датчик прекрасно работает на больших расстояниях при трехпроводном питании. При паразитном питании (2 провода) допустимая длина провода может быть ниже. Напомню еще раз, DS18B20 продается в вполне герметичной гильзе, что делает его прекрасным вариантом для различных “мокрых дел”. На мой взгляд этот датчик подходит для следующих проектов: измерения температуры теплоносителя на выходе из котла отопления, измерения температуры почвы в теплице, температуры воды в аквариуме, самогонного аппарата и т.д. и т.п. Ничто не мешает использовать его и для измерения температуры воздуха на улице или в помещении, но влажность измерять он “не могёт”. Если влажность не критичный параметр – смело используйте DS18B20. Как только требуется измерение влажности, начинаются проблемы. С проводами…

Если расстояние от MCU (микроконтроллера) до точки измерения невелико, то можно воспользоваться любым подходящим по цене и параметрам I2C датчиком. Предельная емкость шины I2C, равная 400 пФ, ограничивает практическое расстояние связи до нескольких метров. На практике лично у меня вполне стабильно работают датчики с кабелем 3 метра, но только если датчик на шине один (или они соединены “цепочкой”, если кабели датчиков соединены “веером” – помехи обеспечены). Следует учесть, что с увеличением длины провода количество “помех” на шине I2C резко возрастает, и датчики без передачи контрольной суммы (AHT10, например), могут выдавать неверные значения. В качестве альтернативы можно использовать специальные чипы – “удлинители” сигнала I2C, например P82B715, но и они не дают сильного эффекта. Цифровые сенсоры I2C (AHTxx, BM?x80, SHTxx, HTUxx и т.д.) прекрасно подойдут для домашней метеостанции, различных термостатов, управления отоплением и вентиляций, и прочими проектами управления климатом.

Если требуется высокая точность (особенно если предусмотрена работа на улице) и позволяет бюджет, рекомендую выбрать SHT31 – он обладает хорошими характеристиками и достаточной стабильностью. Кроме того, можно периодически “прогревать” датчик SHT31, чтобы избежать дрейфа показаний влажности. Но, ещё и ещё раз повторю – если длина провода относительно невелика.

Если требуется подключить датчик на более длинном проводе – то тут, увы, альтернативы DHTxx/AM2302 я особо не вижу (кроме RS485), при всех их недостатках (относительно невысокая точность, периодические зависания и быстрый выход емкостного сенсора при высокой влажности). Более-менее стабильно они способны работать на кабеле до 20м. На длинном кабеле (>10м) китайцы рекомендуют снизить резистор подтяжки до 1kOm. Как я не “крутился с I2С” в погребе, провод в 15 метров до MCU до сенсора не оставил мне выбора. Можно, конечно, запихнуть MCU непосредственно в погреб, подвести к нему питание, и подключить любой удобный сенсор, но WiFi там ловит “никак”, да и “городить огород” ради одного сенсора желание не возникает). Но это тогда проще купить RS485 версию и адаптер RS485 и организовать полноценную промышленную шину. В последнее время я иногда так и поступаю...

Продолжение следует...

Формат Дзена не предполагает огромные статьи. Поэтому исходная статья будет разбита на несколько частей. В следующей статье серии я расскажу про самые популярные в народе датчики: Aosong DHTxx и иже с ними. Затем обсудим новую серию от Aosong - AHTxx; затем сенсоры от Bosch Sensortec; ну и так далее.

Важное замечание: я рассказываю про сенсоры, с которыми лично удалось познакомиться. Которые я когда-либо покупал и может быть даже использовал. К которым написал драйвера для ESP-IDF, разобравшись в datasheet-ах. В свое время я закупил очень много разных сенсоров и даже делал проект для их сравнения в реальных условиях.

Поэтому описания новых серий, которых сейчас масса на алиэкспресс, пока не будет. Ну, например это SHT40 - я мельком глянул на datasheet - на первый взгляд. Если вы хотите получить готовые драйвера для них, вы можете стать спонсором и оплатить их покупку - и тогда, через некоторое время, я смогу сделать обзор и на них. Возможно даже опять повторить эксперимент со сравнением новых серий датчиков.

👉 Другие части данной серии:

👉 Подборка всех статей по сенсоры

👉 Оригинальная статья на моем сайте, в ней вы сможете найти описания и для других сенсоров

_______________

На этом пока всё, до встречи на сайте и на dzen-канале!

👍 Понравилась статья? Поддержите канал лайком или комментарием! Каналы на Дзене "живут" только за счет ваших лайков.

📌Подпишитесь на канал и вы всегда будете в курсе новых статей.

🔶 Полный архив статей вы найдете здесь

Благодарю за вашу поддержку! 🙏