Портативный прибор для измерения влажности воздуха

У меня есть друг, который говорит, что если посчитать количество часов потраченное на изготовление этого прибора, то дешевле купить самый дорогой. Я конечно с ним не согласен, но не буду долго останавливаться на этой провокационной теме. Скажу лишь, что по времени, разработка и изготовление этого прибора заняла около 30 часов. Я использовал детали которые были у меня в наличии, в том числе датчик влажности, был куплен только аккумулятор. Для меня подобные проекты нужны ещё за тем, чтобы прокачать навыки, узнать что-то новое, и получить прибор на свой вкус.

Прибор нужен был автономный,  с временем автономной работы около 12 часов. Соответственно схема питания USB-> контроллер заряда -> повышающий преобразователь до +5 В. Питание выбрал 5 В, так как датчик влажности, имеющийся в наличии (HIH-4010-004), калиброван при питании 5 В. При покупке к датчику прилагалась распечатка, со всеми константами для расчета RH% по выходному напряжению, для достижения точности измерения влажности ±3.5%.

Тема датчиков влажности - это отдельная тема. Если коротко, оказалось, что они очень нежные. На HIH-4010-004 в datasheet есть запись, что долгая эксплуатация при влажности более 90% может привести к сдвигу показаний на 3% . А вот для более новых датчиков HDC2080 от TI указано, что рекомендуемый диапазон влажности для работы, от 20% до 80% при температуре воздуха от 0° до 60°.  Если долго эксплуатировать датчик за пределами этого диапазона, то используемый в датчике полимер будет деградировать, и показания будут сдвигаться с долгим временем восстановления. 

В 2014 году Cypress устроил промо, на микроконтроллеры. PSOC 4200 можно было купить за $1 с бесплатной доставкой, в том числе и в Россию. И я не устоял и прикупил пару десятков в QFP корпусе и десяток в SSOP.

Микроконтроллеры примечательны тем, что помимо Cortex-M0, 32KB EEPROM и 4K RAM, у них на борту присутствовало четыре  UDB блока (вариант программируемой логики), в каждом из которых было два PLD (Programmable Logic Device) и 8 битное ALU с возможностью выполнять до 8 команд в цикле,  работающее на тактовой частоте процессора 48 МГц. Так как в своих прошлых проектах часто надо было городить мелкую логику вокруг контроллера, тема UDB меня привлекла.

Также на борту микроконтроллера был необычный контроллер LCD, он позволяет управлять мультиплексными LCD индикаторами, не как обычно, используя для формирования напряжения смещения резистивные делители, а используя ШИМ. Для LCD с количеством разрядов до 4 есть еще более экономичный режим Цифровой Корреляции.

Как оказалось, изображение получается достаточно контрастным. В данном приборе применил регулировку контрастности в зависимости от температуры. Всего 3 ступени, меньше 0°, от 0° до 30° и больше 30°.

Схема и печатная плата разработаны с помощью программы Eagle. Плата разрабатывалась для изготовления дома, поэтому такие огромные переходные отверстия.

По программе, работа с датчиком DS18B20 организована через UART в прерывании, поэтому пришлось тактовую частоту микроконтроллера сделать 24 МГц, чтобы получить целые делители для скоростей 9600 и 115200. Разница в потреблении на 6 МГц и 24 МГц - 4 мА. Наверное можно было как то выкрутиться и сделать минимальную тактовую частоту, но я не стал возиться, так как для данного прибора не предполагалось долгой автономной работы.

Преобразование измеренного напряжения датчика влажности в RH% сделано в целых числах, с учетом напряжения питания и температурной компенсацией. В моем случае напряжение на выходе повышающего преобразователя оказалось 5.16 В. По этой причине, и по причине того, что у каждого датчика HIH-4010-004 свои калибровочные константы, прошивка для микроконтроллера на Git не размещена. Так как среда разработки PSOC Creator абсолютно бесплатная, а скомпилировать прошивку можно с помощью GCC компилятора, это не должно стать проблемой.

В приборе не предусмотрен тумблер включения питания, поэтому я старался предусмотреть все возможные отказы, в том числе замыкал пинцетом выход DS18B20 на землю. В программе сделал как обработку ошибок в прерывании, так и перезапуск UART по тайм ауту и естественно использовал Watch Dog таймер на случай непредвиденных зависаний самого микроконтроллера.

Напряжение батареи отображается угловым знаком подчеркивания под каждым разрядом, диапазон 3 - 4.2 вольта по 0.15 вольта на каждый сегмент.

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

При длительном нажатии единственной кнопки или спустя 60 минут после включения, микроконтроллер уходит в режим «STOP» . Микроконтроллер потребляет в режиме «STOP» всего 80 нА. Так как в режиме «STOP» у микроконтроллера выходы «замораживаются» , контроллер LCD заранее отключаем, а на выводе ENABLE импульсного стабилизатора устанавливаем 0, тем самым отключаем стабилизатор и датчики.

И немного техно обнаженки.

Сразу хочу сказать, что я чистюля, и мою платы в изопропиловом спирте по нескольку раз. Но с этой платой случай особый, во-первых стекляшка LCD не любит растворители, во вторых начитался про датчик влажности HDC2080, что ни в коем случае, ни в чем, нельзя отмывать плату после пайки. Только безотмывочные флюсы и паяльные пасты. Поэтому наблюдаются остатки флюса на плате после отладки. Один проводок на обратной стороне - это косяк в разводке платы (косяк устранен). Второй был припаян на момент отладки без датчика DS18B20, так как ножки датчика служили соединителями дорожек между слоями, да так и был оставлен.

Корпус датчика нарисован в Компас 3D и распечатан на 3D принтере. До сих пор не придумаю, как сделать нормальные защелки для соединения двух половинок корпуса, поэтому просто засверливаю с торцов и креплю маленькими шурупами. 

Сверловка платы на CNC станке, программы для сверловки и фрезеровки сделаны в FlatCam из Gerber файлов, сгенерированных Eagle. Фотошаблон напечатан на лазерном принтере, выдержан в парах ацетона 20 минут, после чего стал достаточно чёрным для изготовления печатной платы с помощью фоторезиста.

Вообще тема домашнего изготовления сейчас не очень актуальна, но когда надо сделать одну не сложную плату, а ждать посылки из Китая не хочется, очень выручает данный навык. У меня способ отработан уже годами, делаю походя, занимаясь параллельно другими делами, если есть интерес, пишите в комментариях, напишу отдельную статью на эту тему. 
Файлы вместе с исходниками на GitHub

Средняя зарплата в IT

120 000 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 9 207 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 64

    +7

    Напишите статью про программирование под cyppress'овские чипы. Не нашел в интернете почти ничего на эту тему

    0
    Мой первый датчик влажности был HIH-3610.
    Прибор лежал на подоконнике и капля конденсата вывела датчик из строя.
    В следующем приборе влажность мерил по сухому и влажному DS18B20, написал математику на asm, получилось очень близко к показаниям ВИТ-2.
      0
      Да, во всех datasheet пишут что без конденсации влаги на поверхности датчика. Я изучал вопрос по измерению влажности по сухому и мокрому датчику. По такому методу, сложно сделать достаточно точный датчик. У него долгое время отклика, и им просто неудобно пользоваться.
      0
      Спасибо за статью, очень основательно сделан проект. Я правильно понимаю что основной целью было именно запустить HIH4010? Остальная элементная база позволяет получить малое энергопотребление а вот датчик потребляет 200-500мка от 5В, это много.

      Со своей стороны могу порекомендовать датчики SHT20/21/25. Работают от 3В, i2c, термодатчик внутри. В даташите тоже много написанно про то что это нежный компонент, и есть масса ограничений на мойку, приклеивание, и.т.п. Рекомендют заклеивать окошко каптоновой лентой во время мойки. У меня датчики в нескольких DIY приборах живут много лет, вроде бы сильно показания не дрейфуют если на датчик не садится пыль. Конденсата не боятся.
        0
        Да, HIH-4010-004, был в наличии. Посмотрел на SHT20/21/25, SHT21/25 вполне достойные датчики, у SHT20 слишком большая ошибка измерения температуры. Кстати по области нормальной работы SHT20/21/25 с HIH-4010 сильно отличаются в районе отрицательных температур. У SHT20/21/25 чем ниже температура, тем больше влажность должна быть, чтобы не произошёл дрейф показаний у датчика, что в жизни редко бывает. Обычно наоборот, чем ниже температура, тем суше. HIH-4010 имеет как раз такую зону нормальной работы.
          0
          Возможно sht2x не очень подойдет для уличного термометра, но если устройство портативное и иногда заносится в дом то проблем с измерениями при отрицательных температурах быть не должно. Там указано 60 часов для деградации в сторону +3%RH.
        +3
        Я уж думал, вы на 580-й серии все это сделали:)
          0
          Была такая мысль, но решил, что аккумулятор будет великоват:)
          0
          У меня только один вопрос. А была какая то объективная причина, почему решение такое сложное по схемотехнике? Может быть какие то особые требования по точности/диапазону измерений?
          Просто я делал аналогичное (как я думаю) решение на одном ATTINY13A, LED-дисплее на TM1637 и датчике влажности-температуры DHT-22. Собственно других компонентов в схеме и не было, ну ещё 3.7 вольтовый LIon аккумкулятор, при питании от которого устройство работает неделю без выключения.
            0
            Как по мне, так у меня простое решение, не вижу ничего сложного. В принципе, не понятно, что такое проще. Есть требования к конструкции, у меня они были такие, использовать элементную базу которая есть в наличии, устройство должно питаться от аккумулятора, мало потреблять, быть носимым. Я все свои требования в данной конструкции удолетворил. Если бы стоял вопрос стоимости изготовления и элементной базы при установленных критериях точности и времени автономной работы, может быть получилось бы совсем другая конструкция.
              0
              Посмотрел даташит на TM1637, он при выключенных светодиодах 5 мА потребляет. Плюс 2мА микроконтроллер, предположил, что он работает от внутреннего RC генератора 4.8 МГц. Получается 7 мА * 7 дней *24 часа = емкость аккумулятора 1176мА/ч, и это еще не включали светодиоды LED индикатора.
                0
                В моём случае Attiny13a работает на частоте 1 мГц с тактованием от внутреннего RC-генератора. Плюс нужно добавить потребление от датчика, хотя он в ждущем режиме потребляет слёзы, а опрос у меня идёт всего несколько раз в минуту. Питание от NONAME-LiION аккумулятора типоразмера 18650 неизвестной ёмкости (промаркирован 4000 мАч, но веры этой маркировке нет). В итоге прибор работает в режиме «в выходные зарядили — всю неделю работаем без отключения». В принципе дольше и не нужно.
                  0
                  Аккумулятор 4000 мА/ч объясняет такую долгую работу. Значит светодиоды у вас потребляют около 16 мА, в принципе теория с практикой сходится.
                    0
                    18650 максимально может иметь емкость что-то вроде 3000 — 3200 мА*ч. А аккумуляторы, промаркированные такими цифрами, обычно имеют очень маленькую емкость, меньше 1,5 А*ч.
                      0
                      Обычно в таких индикаторах выставляют ток светодиодов 5 мА, в среднем горит 4 сегмента, получаем 20 мА. Можно долго философствовать на эту тему, слишком много неизвестных. Я лишь написал, что это похоже на правду.
              0

              А про eagle… "мыши плакали, кололись, но упорно продолжали есть кактус". Попробуйте kicad

                0
                А по факту, чем Eagle не устраивает?
                  0
                  Скорее всего идеологически.
                  0
                  Я пробовал. Библиотека компонентов такая убогая, что если бы не возможность импорта из проклятого eagle, делать в нем вообще нечего было бы.
                    0
                    А вы какую версию пробовали?
                      0
                      Свежую: 5.1.7
                      В комплекте нет даже 2N2222!
                        0
                        В стандартной библиотеке transistor.lbr есть такой элемент как «*-NPN-», в нем выбираете DEVICE «-NPN-TO092», ставите нужный вам номинал на схеме, например 2N2222. Хотя у меня старенькая версия, может AUTODESK что-то поменял.
                          0
                          Это понятно, можно взять что угодно NPN с аналогичной цоколевкой и назвать его на схеме 2N2222, но вы же понимаете, что это плохой подход.

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

                          Во-вторых, если бы в программе все элементы выбирались по принципу тип->подтип->корпус->цоколевка, то вопросов не было бы. Но там в библиотеке ведь лежат в основном конкретные типы элементов, значит подразумевается «осознанный» выбор. При этом самого популярного транзистора всех времен и народов среди них нет. Это как?
                            0
                            Специально загрузил новую версию Eagle. Она оказалась 9.6.2, как и в моей старенькой версии Eagle, транзистор 2N2222 присутствует в четырех библиотеках, transistor, transistor-neo-to90, transistor-npn, transistor-small-signal, корпус TO-18. Если вы хотите добавить новый корпус, это делается буквально за пару минут в месте с поиском даташита в интернете.
                              0
                              Скачал и установил kicad, как оказалось там из коробки нет такого компонента компонента 2N2222. Но это конечно не повод ругать CAD систему.
                                0
                                Много чего там нет. Библиотека компонентов крайне скудна. Еще претензии к интерфейсу. Выглядит как студенческий курсач: аляповатые иконки, по-дурацки нарисованные меню, артефакты при разводке (хотя тут и eagle не идеал).
                                  0
                                  Так это вы вроде ругали Eagle, причем версию 5.1.7 более чем 10 летней давности.
                                    0
                                    Нет, я сейчас ругаю KiCad версии 5.1.7 от конца 2020 года.
                                      0
                                      А вы, если не секрет, на чем платы разрабатываете? Altium за $10 000?
                                        0
                                        Триальным eagle. В тех редких случаях, когда его не хватает, беру kicad и страдаю.
                    0
                    Промахнулся веткой.
                      0
                      Отличный проект!

                      Микроконтроллер потребляет в режиме «STOP» всего 80 нА
                      . Правда? Круто, если так. STM32L жрет несколько мкА в том же режиме (с сохранинием памяти).

                      Впрочем, step-up все равно съест намного больше (из даташита на TPS61040: 28-µA Typical No-Load Quiescent Current). Кто-нибудь может порекомандовать хороший step-up преобразователь для работы от батареек?
                        0
                        С сохранением памяти CY8C4245 «жрет» 16-17 µA. В режиме «STOP» содержимое памяти не сохраняется. У TPS61040 ток потребления в выключенном состоянии 1µA.
                          0
                          С сохранением памяти CY8C4245 «жрет» 16-17 µA. В режиме «STOP» содержимое памяти не сохраняется.
                          А, понятно. Значит, это разница в названиях режимов. У STM32 такой режим называется «STANDBY».

                          У TPS61040 ток потребления в выключенном состоянии 1µA.
                          А вот тут можно поподробнее? Как я вижу, у вас MK запитан от +5V. То есть он выключает сам себя? Или на +5V остается VBAT при выключении преобразователя?

                          UPD: А, вижу, остается. Выходит, и HIH-4010-004 тогда стоит под напряжением?
                            0
                            Кстати, на самом деле у STM32L (во всяком случае, L151) в режиме Standby память сохраняется, если ее не затирать при инициализации и если не пропадало питание.
                              0
                              Возможно, Standby там гибкий, и можно выбирать, что оставить (часть памяти, часы). На L4 есть две области памяти, и одну из них, действительно, можно сохранить в режиме STANDBY. Но тогда и потребление будет порядка 500 nA вместо ~100 nA.
                                0
                                Никакой гибкости, просто сохраняется и все. Недокументированная особенность. Видимо, не гасится питание на ОЗУ в режиме стендбай, а то, что память в STM32 переживает NRST — давно известно.
                                  0
                                  Интересно, надо будет поэкспериментировать. Но я бы не стал на это рассчитывать в серьезном проекте — а то мало ли, пофиксят в новых партиях, разбирайся потом.
                              0
                              Ключик VT1 при выключении стабилизатора отключает оба датчика от земли.
                                0
                                Понял. Смотрел на шину +5V, а вы их от земли отрываете. :-)
                          0
                          Как вы умудрились такой косяк разводки допустить с инструментом полного цикла?
                            0
                            Как это обычно бывает, в 00-00 не запустил DRC после коррекции. Так как я плату не на производство отдавал, не включил у себя режим бдительности.
                            0

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

                              0
                              Посмотрите Humidity Sensor: Storage and Handling Guidelines и сноску 11 на странице 5 Datasheet HDC2080.
                                0
                                сноска 11 относится к параметрам тестирования в условиях отсутствия конденсации, вообще рабочий диапазон этого сенсора 0-100%. в моей системе если сенсор находился при температуре близкой к дью пойнту я запускаю внутренний нагреватель, после минуты работы и пары-тройки минут остыть, сенсор снова готов. А жидкости, которые приведены в первом документе способны уничтожить любой сенсор, являясь либо мощными окислителями либо сольвентами, либо кислотами…
                                  0
                                  Не знаю как вы перевели сноску 11: «Recommended humidity operating range is 20 to 80% RH (non-condensing) over 0 to 60°C. Prolonged operation beyond these ranges may result in a shift of sensor reading, with slow recovery time.», но я его перевел так: Рекомендуемый рабочий диапазон, влажность от 20% до 80% (без конденсации) при температуре от 0° до 60°. Продолжительная работа вне этих диапазонов может привести к сдвигу показаний датчика, с медленным временем восстановления.

                                  Про первый документ, я лишь писал, что производитель настоятельно рекомендует при пайке использовать только безотмывочные паяльные пасты: «NOTE: It is important that “no-clean” solder paste is used and no board wash is applied once the sensor is assembled onto the PCB.»
                                    0

                                    так вы посмотрите в каком месте даташита это написано. это параметры для снятия проверочных значений, а вот первой строчкой
                                    Relative humidity range: 0% to 100%
                                    понятно, что в реальной работе при влажности более 80% показания будут плыть.


                                    насчёт безотмывочной пасты, согласен, там по другому и не получится, если вы паяли wson6 или ещё хуже 8 пиновый корпус 2х2.5, то знаете, что из под него ничего не вымыть.

                                      0
                                      Эта сноска написана напротив строчки в таблице «Рабочий диапазон». Где вы взяли слова: «для снятия проверочных значений» и почему вы решили, что она относиться к «параметрам тестирования» мне непонятно.
                              0

                              если вы посмотрите на таблицу, то увидите рабочий диапазон мин, мах от 0 до 100, условия тестирования, не конденсирующаяся и сноска что такие тестирования рекомендуем проводить притаких то параметрах 20-80%.

                                0

                                Покажите мне слово "тестирования".

                                  0
                                  вы таблицу только по строкам читаете? столбец называется «test conditions» в нем написано «non-condensing», на что дана ссылка поясняющая, что «non-condensing» означает ограничение оперативного уровня влажности в пределах 20-80% при 0-60С. Это означает что больше влажности будет «condensing», но это никак не относится к рабочему диапазону. Следующая колонка MIN MAX — operation range, где написано, 0 — 100%, показывает рабочий диапазон, для (последняя kолонка RH) релятиве хумидити — что означает относительная влажность.
                                  Надеюсь объяснил)
                                    0
                                    В сноске четко сказано: «Рекомендуемый РАБОЧИЙ диапазон влажности от 20% до 80% при температуре от 0°до 60°». Я привык трактовать datasheet буквально, а не придумывать новые слова в предложении.
                                    Точка росы зависит от влажности, температуры воздуха и температуры поверхности. Если вы датчик занесли с улицы домой, и на улице +5°, а дома +21° и 35% влажности, на холодном датчике, для данных условий, будет эта самая «точка росы» и на нем может успеть сконденсироваться влага. Хотя все условия соответствуют рабочему диапазону датчика. «Надеюсь объяснил.»
                                      0
                                      дискуссия прекращает быть продуктивной, я искренне пытался убедить, что датчик хороший и я работаю с ними продолжительное время, особенно в условиях близких к точке росы и активно использую внутренний нагревательный элемент для «рефреша» датчика.
                                        0
                                        Вам хотелось, чтобы датчик работал в диапазоне RH от 0% до 100%, и вы нашли способ как прочитать это в datasheet. Я понимаю, что убедить вас в том, что производитель рекомендует использовать датчик при влажности от 20% до 80% и при температуре от 0° до 60°, дабы избежать долговременного дрейфа показаний, не представляется возможным. А с тем, что датчик хороший, для определенных условий работы, никто не спорит.

                                        P.S. Хотя, где логика? Если при тестировании, как вы говорите, дрейф есть при выходе за указанный диапазон, то почему бы ему не быть при обычном использовании?
                                          0
                                          вы уж меня извините, но в даташите так прямо и написано, что датчик работает в диапазоне 0-100, причем в нескольких местах и прямым текстом. Остальное, для любителей читать между строк )
                                            0
                                            Вот датчик HIH-4010, у него в таблице указан рабочий диапазон от 0% до 100%, но «между строк» есть такой график: В случае hdc2080 графика нет, но есть сноска мелким шрифтом, где указан рабочий диапазон для того, чтобы избежать дрейфа.
                                              0
                                              какой вы однако, читайте сноски внимательно, в вашем же мануале. Помочь с переводом?
                                              5. Non-condensing environment. When liquid water falls on the
                                              humidity sensor die, output goes to a low rail condition
                                              indicating no humidity.
                                              я могу прогреть 2080 и он испарит влагу и продолжит правильно показывать влажность, а этому придется ждать просушки…
                                                0
                                                А как рабочий диапазон связан с конденсацией? Я вам показал выше, что условия для конденсации могут возникать и в рабочем диапазоне влажности и температуры.
                                                  0
                                                  напрямую, вам четко написали, что при точке росы сенсор ваш работать не будет. как вы правильно написали, точка росы есть функция относительной влажности и температуры.
                                                  Следовательно во всем диапазоне измерений при образовании росы ваш сенсор работать не будет, а мой будет.
                                                    0
                                                    Вы плавно перевели разговор от рабочего диапазона датчика, в сторону возможности работы в случае выпадения конденсата на датчике.
                                                      0
                                                      я думаю что у всех CMOS-MEMS сенсоров примерно одна судьба, по причинам своего строения они не могут работать когда на них конденсируется влага, их внутренние канальцы просто коротит. И одни производители прямо пишут это другие завуалированно.
                                                      Некоторые делают варианты, которые таки позволяют избавится от влаги, некоторые не хотят удорожать свои сенсоры.
                                                      Если вы интересуетесь сенсорами, вот интересный обзор. Я не хочу сказать, что он качественный, но много инфы в одном месте бывает полезно.
                                                      wiki.liutyi.info/display/ARDUINO/Test+i2c+humidity+sensors
                                                        0

                                                        Спасибо, я видел этот обзор.

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое