?? Система регистрации состояния почвы растений Bluetooth ч1. (проверка датчика влажности)

Начало

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

Схема электрическая структурная (блок-схема)

Как вы понимаете пока что левая часть отсутствует, но ничего, ведь главное находится справа 

Купить на Aliexpress

STM32F030 Board:
?️ STM32F030 MCU Board (2.97?): https://ali.ski/SrWxvu
?️ 48MHz STM32F030F4P6 DevBoard (1.8?): https://ali.ski/ye1IQ
?️ STM32F030F4P6 Small Board CORTEX-M0 (2.04?): https://ali.ski/7Zohu

STM32F030 Chip:
?️ STM32F030F4P6 TSSOP-20 Chip (1.48?): https://ali.ski/QFvU9
?️ STM32F030F4P6 5pcs (8.3?/5pcs): https://ali.ski/OquWh6
?️ 10Pcs100% Original New STM32F030F4P6TR (10.96?): https://ali.ski/ZJz0L0

Bluetooth JDY-23:
?️ JDY-23 JDY-23A BLE 5.0 Module BLE5.0 (0.83?): https://ali.ski/xP7HKK
?️ JDY-23 Bluetooth 5.0 module (1.12?): https://ali.ski/7Z338k
?️ 10pcs JDY-23 Bluetooth 5.0 (11.2?/10pcs): https://ali.ski/KLHo5D

Выбор электронных компонентов

Датчики

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

Датчик влажности

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

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

Лучше всего делать датчик прямо на печатной плате, что значительно упростит и удешевит изготовление при высочайшей повторяемости (китайцы делают почти то же самое).

Форма заимствованна: https://2shemi.ru/besprovodnoy-datchik-vlazhnosti-...

Датчик температуры

Миниатюрный  термистор NCP18XH103F03RB типоразмера 0603 отлично подойдет, в статье про измерение температуры с помощью термистора рассмотрен расчет зависимости T(R), в общем показал он себя отлично.

Пусть термистор будет на самом конце штыря, чтобы измерения проводились на глубине 7 см – 8 см. Также замечу, что у STM32 есть встроенный датчик, который также можно будет использовать для получения разницы температур между землей и воздухом.

Конечно он должен быть защищен - можно капнуть эпоксидной смолы или герметика.

Датчик освещенности

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

Для точных измерений он никуда не годится, разброс характеристик дичайший, так что сюда отлично подойдет.

Приемопередатчик Bluetooth Low Energy

Связь осуществляется конечно же с использованием   Bluetooth-модуля JDY-23 (на самом деле здесь JDY-19):

Этот модуль был подробно рассмотрен и хорошо зарекомендовал себя, подключается соответственно через UART.

Микроконтроллер

Выбирал не долго , здесь применен один из самых мелких и доступных МК (тогда он действительно был очень дешев и сверхдоступен).

Это STM32F030F4P6, который с лихвой перекрывает наши надобности (с HALом на грани).

Питание

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

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

Схема электрическая принципиальная

*перепутаны SWDIO и SWCLK (относительно обычного)
*вывод BOOT (номер 1) нужно подключить к минусу для выбора SWD*
*перепутаны выводы GND и OUT для стабилизаторы XC6206 3.3V

Печатная плата

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

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

Собранная плата

Проект в Кубе

Ввиду просты устройства настраиваю сразу всё. Сначала отладчик.

Внешний кварц установить можно, но не делаю этого специально, поэтому частота тактирования 8МГц 48МГц (для программного UART).

Для емкостного датчика генерирую частоту 1МГц:

Устанавливаю на аналоговый вход три вывода для датчиков и один для аккумулятора:

Настраиваю ПДП, запуск по событию от Таймера 3:

Не забывая включить прерывания по окончанию преобразования:

Таймер 3 настраиваю на частоту 100 Гц:

Вывод для транзистора, который подключает делитель напряжения аккумулятора, вывод текущего статуса и управления питанием Bluetooth модуля. Остается связь между STM23 и BLE. И вот здесь меня ждал прикол, более года назад я неправильно соединил выводы аппаратного УАПП1 микроконтроллера с блютуз модуль, поэтому между подрезанием дорожек и программным УАПП, выбрал второе, во блин.

Программирование (проверка датчика влажности)

Начнем с самого главного - емкостного датчика, ведь если он работает, то всё остальное не имеет смысла. Нужен сигнал 1МГц, который создается таймеров в режиме ШИМ:

/* Moisture Sensor Signal */ HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_3);

И так как АЦП будет считывать всё сразу, то для его работы создается глобальный массив из четырех элементов:

/* USER CODE BEGIN PV */ uint16_t AdcRaw[4]; /* USER CODE END PV */

Который указывается в аргументах функции запуска вместе с количеством каналов (Перед этим выполняем калибровку!).

HAL_ADCEx_Calibration_Start(&hadc); HAL_ADC_Start_DMA(&hadc, (uint32_t*)AdcRaw, 4);

Далее запускается Таймер 3, который запускает АЦП:

HAL_TIM_Base_Start(&htim3);

В цикле пока ничего не будет.  Если есть проблемы с занимаемой памяти (как в проекте светодиодного тестера) или памяти вообще не хватает:

То срочно идем в свойства проекта ( Project -> Properties):

И меняем уровень оптимизации с None ( -O0) на Optimize for size (-Os):

Теперь лучше стало, а более подробное влияние оптимизации на занимаемую памяти смотрим  здесь:

Отладка (проверка датчика влажности)

Добавляю массив с результатами от АЦП в окно просмотра ( Live Expressions):

Запускаю программу и зная, что емкостному датчику соответствует нулевой канал (и здесь это нулевой канал массива) вижу показания:

Они весьма адекватные (около 2В):

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

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

Теперь время взять земли и поместить туда датчик, для чего устройство и предназначено:

Запитать сейчас удобно от одной банки литий-ионного аккумулятора:

Его, кстати, удобно заряжать через  TP4056 с USB Type-C (есть схема и плата в KiCad 6):

При погружении в грунт емкость  датчика-конденсатора увеличивается:

И напряжение уменьшилось на 0.2В (с 2000 мВ до 1800 мВ):

А теперь имитация полива растения:

Проверка в грунте также успешна:

Еще фотки

Видос

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

Изначально думал забить на эту самоделку, но вроде как многим зайдет, к тому же она очень легко и быстро собирается.

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

444
RSS
Нет комментариев. Ваш будет первым!
Загрузка...