Резистивные датчики влажности почвы с Mysensors

402В прошлый раз я разрабатывал сенсор влажности почвы.

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

И вот новая версия резистивного (пока) датчика влажности почвы

Конструкция электрода

Электрод должен быть максимально устойчивым к коррозии. Например, покрытые оловом китайские сенсоры влажности живут меньше полугода.

Всего за месяц кислотность почвы  и слабая гальваника съедают тонкое покрытие и принимаются за медные дорожки

300

 

Из доступных коррозионностойких материалов я нашел графит и нержавейку. Но графитовые стержни непрочные и дорогие, поэтому выбор пал на полированные стержни из нержавеющей стали для моделек 100 мм. Для больших горшков с растениями, где длина электродов нужна больше, можно взять более длинные отрезки и нарезать по 120-150мм.

Крепления на плату изготовлены их обычные электротехнических колодок.

301 302 303

Подключение и алгоритм опроса

Первоначально, электроды через резистивный делитель подключались к аналоговому входу микроконтроллера. Резистор подбирался таким образом, чтобы средняя влажность попала максимально к средине диапазона значений АЦП.

%d1%81%d1%85%d0%b5%d0%bc%d0%b01

Опытным путем значение R1 было подобрано порядка 4.7К. К сожалению, такая схема для батареечного сенсора не очень хороша — через делитель постоянно течет ток порядка 0.3мА, что снижает время жизни батареи. Кроме того, постоянное напряжение на электродах, это опять гальваника, что не есть хорошо даже для нержавейки. Поэтому резистивный делитель сенсора я решил подключить к цифровому выходу МК  и включать сенсор только на момент измерения

%d1%81%d1%85%d0%b5%d0%bc%d0%b02

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

%d1%81%d1%85%d0%b5%d0%bc%d0%b03

Опыты показали состоятельность такого решения. Уже через несколько  изменений полярности и  измерений  на АЦП устанавливало стабильное значение. Алгоритм стал таким. В цикле 1 раз в миллисекунду меняем уровни на выходах 1 и 2. Пропускаем 5  значений как нестабильные, а потом начинаем усреднять показания одинаковой фазы.

Такой алгоритм показал высокую стабильность работы, и, самое главное, высокую повторяемость показаний разных сенсоров.

Калибровка

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

Метод калибровки сенсоров получился следующим:

Беру пустой горшок и взвешиваем его вместе с датчиками влажности.

Засыпаю универсальной почвой из магазина, поливаю почву до полного насыщения водой,  затем втыкаю датчики в горшок .

Далее жду, пока почва полностью не высохнет, и снимаю контрольные точки по весу  горшка с почвой и показаниям значений АЦП с сенсоров. Для ускорения  я ставлю горшок в сушилку для фруктов и овощей.

403

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

После всего эксперимента я высушиваю почву в духовке и снова взвешиваю ее. Это будет эталонный вес почвы без воды. Все данные заношу в Excel

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

%d0%b3%d1%80%d0%b0%d1%84%d0%b8%d0%ba2

Для определения уравнения пересчета я нашел хороший он-лайновый сервис.

Подставив значения по X и Y можно получаю различные функции зависимости АЦП и собственно влажности, а так же коэффициенты отклонения вычисляемых и реальных значений. Чем проще формула, тем больше отклонения.

%d1%84%d0%be%d1%80%d0%bc%d1%83%d0%bb%d1%8b

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

Схемотехника

После того как с концепцией самого сенсора разобрались, можно проектировать контроллер. Сердцем будет «ардуино-совместимый» МК — Atmega328/168/88. (На сколько памяти ужмусь). NRF24L01+ в качестве модема с протоколом Mysensors.

Ресет контроллера заводится на программатор UART так же как и в Arduino Pro Micro, чтобы прошивка по последовательному порту шлаа автоматически из среды программирования. Питание сделал от AAA x 2 без всяких преобразователей и стабилизаторов. Дело в том, что измерение влажности происходит на резистивном делителе, а в качестве опорного напряжения берется VCC. При изменении последнего, пропорционально изменяется напряжение и на аналоговом входе, поэтому значение АЦП остается неизменным.

%d1%81%d1%85%d0%b5%d0%bc%d0%b0

Перечень деталей (BOM) получился таким:

Общий бюджет по деталям составляет менее $3

Изготовление платы

Плату делаю как обычно, усовершенствованным ЛУТ, где вместо утюга используется ламинатор

%d0%bf%d0%bb%d0%b0%d1%82%d0%b0

301

Вот и  снова пригодился

410 411

В контроллер прежде чем паять, прошиваю загрузчик OptiBoot. Заодно устанавливаю фьюз-биты — отключаю проверку питания BOD, устанавливаю работу от внутреннего резонатора 8МГц

202

415

400 401

 

Корпус

С покупкой 3Д-принтера создание корпусов для устройств стало еще одним развлечением. Основное требование этого корпуса — защита от влаги при поливе. Поэтому сверху он будет сплошной с крышкой в нижней части.%d0%ba%d0%be%d1%80%d0%bf%d1%83%d1%811 %d0%ba%d0%be%d1%80%d0%bf%d1%83%d1%812

Так как цветов в квартире много и устройство планируется тоже — на каждом корпусе решил напечатать сетевой адрес ноды Mysensors, чтобы было проще ориентироваться. Заодно печатаем крепления под батарейки

402 403 416

Прошивка

В скетче сенсора влажности почвы с библиотекой Mysensors 2.3 отключаю всю отладку в UART и скетч вполне помещается в Atmega88

arduino-ide

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

arduino-ide-boot

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

Сенсоры готовы и отправляются на свои рабочие места.  Потребление одного сенсора порядка 20 мкА в режиме сна и 2-12 мА в режиме бодрствования и передачи информации

500

Мои планы на будущее

  1. Немного уменьшить корпус за счет перехода на другие элементы питания — СR2450 или малогабаритные литий-полимерные аккумуляторы.
  2. Попробовать сенсоры влажности с емкостным принципом.
  3. Весной автоматизировать теплицы в огороде совместно с GSM шлюзом MySensors

Файлы и ссылки

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

img_20190107_130041_hdr

Вы можете оставить отзыв или трекбек со своего сайта.

3 комментария на «Резистивные датчики влажности почвы с Mysensors»

  1. Михаил:

    Здравствуйте! Давно слежу за Вашими проектами. В этой статье Вы упомянули про OptiBoot. Можете поподробнее описать процесс прошивки данного загрузчика и выложить куда-нибудь Вашу папку Arduino IDE со всеми загрузчиками и настройками. Или может отправите куда почитать. НА сайте и форуме MySensors читал, но что-то не получается, то IDE не видит загрузчики, то не могу найти какие фьюзы для него надо прошить. Так же интересует какие фьюзы Вы указывали и в какой очередности, до заливки загрузчика или после.
    Уже 2 атмеги угробил в попытках настроить данный загрузчик. тоже хочу себе портативный датчик MySensors сделать. Плата есть, разведена правильно, но вот с загрузчиком никак не могу разобраться.
    Буду Вам очень благодарен за информацию. Спасибо за сайт и годный контент! Вы молодец что находите время не только на создание но и на подготовку и размещение материала!

    • Alexey Alexey:

      1. Через настройки добавляете URL для менеджера плат
      https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json
      2. В менеджере плат выбираете MiniCore by MCUdude — инсталлировать
      3. В менеджере плат появляется поддержка контроллеров Atmega328/168/88/48 и 8 разных модификаций. Выбираете
      Atmega328
      Clock 8nhz internal (в моем случае)
      Bootloader — да
      BOM — disabled
      Variant — 328PB
      Шьете загрузчик любым ISP программатором (фьюзы прописываются тоже) . Если запись загрузчика и верификация прошли успешно, можно работать с этим контроллером через загрузчик с этими же параметрами

      IDE нужно последней версии. В более ранних у меня при компиляции для 328PB выдавала ошибку

Ваш отзыв