Увеличиваем точность определения влажности датчиков SHT-1x, а заодно и всех остальных

Уф. По поводу глючности датчиков серии DHT я уже писал, и активно агитировал переходить на более современные технологии и датчики серий SHT (Sensirion) или BME (Bosh). Дескать, они точнее, да и интерфейсы стандартные. Но в реальности все оказалось немного интереснее.

SHT1x, плата, HOY 10, SHT, SCK, DATA, GND, VCC

Сенсор SHT1x крупным планом. Хорошо видна щель в защитном кожухе сенсора.

Опытным путем я обнаружил, что по каким-то неведомым причинам влажность на моих датчиках SHT-1x определяется заведомо ниже, чем она должна быть. И определяется ниже на постоянной основе. Собственно, я и задался вопросом, почему влажность определяется с недобором и как, собственно, это можно исправить.

Сразу же хочу сделать оговорку. Сам производитель датчиков SHT1x не рекомендует их к использованию, так как уже доступны более точные датчики и с самыми современными интерфейсами. Но пока стоимость новых сенсоров слишком высока и следует ожидать, что еще долгое время будут популярны именно устаревшие версии.

Программный способ коррекции показаний

Начнем с того, что сенсор SHT1x «тупой», единственное, что он может делать, так измерить электрически характеристики, а потом слить их по весьма примитивному протоколу. Вся расшифровка и все коррекции производятся исключительно программным образом. Для экосреды Arduino пользователи часто используют популярную библиотеку от PracticalArduino. Библиотека быстрая и работает стабильно.

Вот только одна беда с ней. Последнее обновление было аж в прошлом десятилетии. А с тех пор Sensirion успела модернизировать свои датчики и в них поменялись показатели корректировок для трансформации. А что делать? Улучшился техпроцесс, поплыли показатели, все стало интереснее. Подробности о текущих показателях для корректировок можно посмотреть в актуальной на момент написания спецификации.

Что же делать? Либо использовать другую библиотеку, актуализированную для свежих ревизий датчиков, либо исправить библиотеку самостоятельно. Я предпочел второй путь, поскольку изменения хоть и вносятся в библиотеку, обновляемую с централизованного репозитория, но судя по всему автор не будет уже ее менять никогда.

Для внесения изменений редактируем файл SHT1x.cpp, заменяем соответствующие коэффициенты на новые из спецификации. Разобраться там не сложно, поскольку в библиотеке и в спецификации они называются идентично. Однако, проявите педантичность и проверьте весь код библиотеки, мест, где меняются коэффициенты несколько.

исходный код, ардуино, с, с++

Одно из мест в файле библиотеке, где требуется изменить коэффициенты

Попутно следует обратить внимание на то, что сенсоры SHT1x дают несколько различающиеся показания температуры в зависимости от используемого напряжения питания. Если используется 5V то коэффициент один, если 3.3V то следует вбить другой коэффициент.

график, влажность, значения, 12bit

График значений генерируемых датчиком от влажности

После изменения файла библиотеки, подобным варварским способом, перекомпилируем свои скетчи и наслаждаемся уточненными показаниями датчиков. Впоследствии, тем не менее, не забываем отслеживать изменения в аппаратных версиях, спецификациях и возможных обновлениях библиотеки. Keep an eye on that! Constantly!

Аппаратный способ коррекции показаний

Казалось бы, поставить программную заплатку просто и больше никаких манипуляций проделывать не нужно. В реальности все оказалось не так как на самом деле. Помимо программной коррекции нужно подумать и об аппаратном обеспечении. Оно тоже может вносить серьезный вклад в точность показаний в отношении влажности.

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

По мере того, сколько влаги содержит конденсатор, изменяется и его емкость. Тем самым появляется возможность измерять относительную влажность. Данный метод с одной стороны весьма точен, а с другой не требует большой энергии для проведения измерения. И этим он отличается от резистивного способа измерения, применяемого, например, в сенсорах DHT11 или DHT22. Кстати, резистивный способ, когда измеряется сопротивление определенного участка сенсора, отрабатывает в несколько раз быстрее, чем емкостной (около 8 секунд против 3–4).

датчик, влажность, погрешность

График погрешности в показаниях влажности различных датчиков Sinsirion

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

Полимер, который используется в качестве диэлектрика чувствительного элемента, может абсорбировать из атмосферы не только водяной пар. Он весьма охотно впитывает еще и различные растворители: изопропиловый спирт, толуол, бутилацетат и другие. Мне удалось связаться с техническими специалистами Sensirion и я получил весьма подробный отчет о том, как деградируют датчики в случае работы в атмосфере с различными загрязняющими веществами. Если что, то сигаретный дым не ухудшает показания датчиков.

плата, bme, bmp, bme/bmp280, vin, gnd, scl, sda, отверстие, терминалы, бош, bosch, температура, влажность, давление

Сенсор BME280 крупным планом на плате. Сенсор микроскопический. Отверстие черного цвета - вентиляционное. Светлая точка - отметка терминала 1. Цифры 054 - номер лота массового производства чипов. Буква "U" обозначает сенсор BME280 (в таком же корпусе выпускается и BMP280). Буква "P" - признак изготовления датчика подрядчиком.

Помимо загрязненной растворителями атмосферы, на точность датчиков может повлиять способ их установки на печатную плату, то, как их отмывали от флюса, например. Равно как и способы хранения. У Sensirion разработана даже специальная инструкция по обращению и условиях хранения датчиков. Вкратце, хранить их следует в оригинальной упаковке, а сели требуется произвести пайки или другу обработку, то вентиляционное отверстие можно закрыть только каптоновой лентой.

Но что делать, если загрязнение уже произошло или же есть предположение, что датчик прибыл уже надышавшийся растворителей на заводе и показывает значения, мало коррелирующие с окружающей действительностью? На такой случай разработана специальная процедура, состоящая из двух этапов:

  • Прожарка датчика.
  • Регидрация датчика.

По процедуре Sensirion, на стадии прожарки, датчик нагревается до температуры свыше 100 градусов Целься, но не выше 105 градусов. В таких условиях, при влажности менее 5%, датчик следует продержать около 10 часов. На этом этапе полимер диэлектрика очищается от воды и растворителей, так как температура гарантировано выше их точек кипения. На этапе регидрации необходимо продержать датчик при влажности около 75% и температуре в пределах 20–30 градусов Цельсия на протяжении 12 часов. Полимер наберет требуемое количество влаги, потерянной на стадии прожарки. Без процедуры регидрации влажность будет на несколько процентов занижаться.

Bosh для своих датчиков BME рекомендует похожую процедуру, но предлагает ажно три варианта:

  • Горячий: а) прожарка на 120 градусах, 2 часа, влажность <5%; b) регидрация на 70 градусах, с 75% влажностью, 6 часов.
  • Теплый: a) прожарка на 120 градусах, 2 часа, влажность <5%; b) регидрация на 25 градусах, с 75% влажностью, 24 часа.
  • Холодный: a) без прожарки; b) регидрация на ~25 градусах, при влажности >40% и на протяжении не менее 5 дней.

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

На выручку тут могут прийти знания отечественных стандартов. Разрабатывали их ученые мужи, поэтому есть понимание того, что и как можно сделать. Учеными мужами были протестированы и разработаны таблицы постоянной влажности при разных температурах над насыщенными растворами солей и прочих элементов. Ознакомиться с ними можно в соответствующем документе. Для наших целей, равно как и для целей проверки датчиков, отлично подходит насыщенный раствор хлорида натрия (NaCl). Оный раствор, в замкнутом объеме, при температурах от +5 и до +60 поддерживает постоянную относительную влажность в 75%. Собственно, что нам и требуется. А раздобыть NaCl можно на любой кухне, поскольку он есть не что иное, как обычная поваренная соль. Хлорид натрия применяется не только на кухне, но и для промывки засыпок ионообменных водоочистных фильтров. Где его и можно позаимствовать высокой чистоты.

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

Правильное питание и правильный опрос

Сенсоры SHT1x могут работать с питающим напряжением от 2.4 и до 5.5 вольт. Тем не менее, наибольшая точность показаний получается при напряжении в 3.3V. Влияет величина напряжения, в первую очередь на показания температурного датчика, а не сенсора влажности, но тем не менее, корректировка значений влажности осуществляется с учетом показания температурного сенсора!

Частота опроса сенсора с целью получения с него сведений не должна быть излишне высокой. На получение значений с сенсора температуры или влажности, датчик тратит энергию. Которая расходуется на нагревание самого сенсора! Плывет показание температурного сенсора, а за ним и показание влажности. Sensirion рекомендует опрашивать датчик не чаще, чем 1 раз в секунду. В таком случае погрешность из-за нагрева будет составлять не более 0.1 градуса Цельсия. Но, представьте, что вы считываете сначала температуру и тут же считываете влажность. Уже два запроса в секунду. А если учесть, что для получения значения влажности, библиотека получает еще раз температуру, то имеем уже 3 запроса в считанные миллисекунды.

Выводы

С датчиками SHT или BME вполне можно получать достаточно точные значения температуры или влажности, если провести с ними некоторые процедуры. Но любая теория, проверяется практикой. Поэтому я провел процедуру восстановления датчика SHT1x, подкрутил значения в библиотеке и поставил его на тестирование (и регидрацию) над насыщенным раствором хлорида натрия. В ходе теста я сравнивал значения сразу трех различных датчиков: DHT22, SHT1x и BME280.

Результаты показали, что SHT1x смог восстановиться от загрязнителей и определяет куда более адекватные значения по влажности. При анализе значений, следует учитывать, что сравнивать стоит не значения влажности от каждого из датчиков, а температуру точки росы. Я уже упоминал выше, что показания влажности зависят от температуры датчика, а что делать, если при частом опросе датчики нагреваются по-разному? Верно — сравнивать температуру точки росы.



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