🏡 Испытания на улице. Устройство регистрации состояния почвы растений Bluetooth ч.2
Вступление
⏩ Первая часть: 🏡 Система регистрации состояния почвы растений Bluetooth ч1. (проверка датчика влажности)
Испытания датчика влажности с блютузом в банке с водой или грунтом это хорошо:
Но в сто раз круче будет проверка устройства в настоящей земле на улице, уж очень интересно как будет себя вести емкостной сенсор на грядке, тем более что получать показания можно через телефон:
Подключение датчика освещенности и температуры
Но прежде чем делать что-то дальше нужно завести оставшиеся датчики – фоторезистор и термистор.
Для выполнения расчета освещенности и температуры необходимо выполнять сложные (трудоёмкие) вычисления, поэтому хилый STM32F030F4P6 для этого не подходит:
Конечно, можно произвести расчеты заранее и запулить их в таблицу, но собственно это лишнее, т.к. все равно просмотр и обработка результатов измерения должна происходить на стороне приемника.
Передача информации
Поэтому, все что нужно – это передавать пакетом значения от АЦП (помня про ограничение на одноразово передаваемый объем информации).
Таким образом у меня передаваемые данные имеет следующий вид:
ADC_Moisture | ADC_Temperature | ADC_Illuminance | ADC_McuVcc | \r\n |
Период передачи сейчас устанавливается задержкой (слишком часто лучше не отправлять, приложение может зависать, если плохо написано), чтобы проверить правильность переданных измерений можно воспользоваться программой-терминалом.
Прием данных на телефоне
Чтобы принимать, обрабатывать и отображать данные с сенсоров нужна программа для ОС Android. Когда-то такое уже делалось в конструкторе MIT App Inventor 2, но делать там опять ну очень не хотелось, ибо программирование блоками это неудобно, оно сильно глючит и нужно было хоть немного разбираться с Android Studio.
Написать с нуля приложение приложение, которое сможет подключатся к устройству BLE, принимать и передавать данные будет ой-как непросто мне, поэтому взял готовое и немного переделал его – это позволит произвести быстрый запуск, а далее буду разбираться поэтапно на рабочем примере.
Источник: https://github.com/viktorvano/Bluetooth-for-STM32-...
Написано несколько функций, которые принимают сырое значение от АЦП, выполняют расчет и возвращают измеренную физическую величину.
Всё самое главное происходит в функции messageHandler(), которая вызывается при после того, как данные приняты (был обнаружен конец строки – знак переноса каретки \r). Там осуществляется разбивка строки (пакета данных) на отдельные части, преобразования их в числа, расчеты, опять преобразования в строки и отображение в виде текста.
Сохранение данных в память телефона ?
Чтобы не записывать вручную полученные измерения очень уж хотелось делать это автоматическим, но сделать это для меня было не так уж и просто.
Сначала получилось (по инструкциям) сохранять .txt файл с нужным текстом в папку приложении (это типо
Internal Storage), а также удобно добавлять в файл новые данные, но получить доступ к ней штатным файловым просмотрщиком не получается получилось (см. ниже).
Далее более сложно, но удалось просто сохранять .txt файл по любому доступному пути с возможностью выбора, но это не подходит, т.к. сохранение в ручном режиме.
Потом всё таки удалось просто сохранять .txt и .csv во внутреннюю память телефона, которую зеленый гуманоид называет External Storage и начиная с 10 ведроида требует супер-разрешение MANAGE_EXTERNAL_STORAGE.
И из-за того, что начальное приложение довольно старое, то SDK там тоже древнее, и нем провернуть фишку с сохранением, требующим супер-разрешение не вышло. По итогу используя хитрый файловый просмотрщик
ES File Explorer всё таки получается достать сохраняемые данные
Далее кусок такого .csv файла:
Y:2022M:3D:25 | 0:00:08 | 73% | 34.39°C | 0lm | 3.17V |
Y:2022M:3D:25 | 0:00:18 | 72% | 34.31°C | 0lm | 3.16V |
Y:2022M:3D:25 | 0:00:28 | 71% | 34.22°C | 0lm | 3.18V |
Y:2022M:3D:25 | 0:00:38 | 72% | 34.39°C | 0lm | 3.17V |
Y:2022M:3D:25 | 0:00:49 | 72% | 34.53°C | 0lm | 3.17V |
Подготовка
Учитывая, что емкость литий-ионной банки 18650 примерно 2600 мА·ч, а ток во время работы 25 мА, то ожидаемое время непрерывной работы 4 дня. Если будет нужно, то аккумулятор заменю.
Для заряда используется своя платка с TP4056 и удобным разъемом (и входным и выходным):
Перед установкой нужно защитить плату и источник питания (заряженный) от внешних воздействий (пока хватит пленки):
Установка на участке
Воткнув датчик и прикрыв торчащую плату, питание закопал рядом.
Первые показания
После погружения в грунт показания влажности почвы стали ненулевыми, около 42%, в первую ночь полив не производился, можно посмотреть что влажность почти не изменилась за сутки:
С температурой поинтересней, она уменьшается начиная с полуночи и до 06:00-07:00, и только потом растет:
А по графику освещенность по времени понятно, когда начинает светать (на значения слева не смотрим, ибо фоторезистор закрыт пленкой):
Ночной дождь
Поливать вручную не пришлось, ночью начался небольшой дождь, смотрим показания (логарифмический график):
Итого, влажность повысилась на 10-11 условных процентов, да колебания очень большие, но качество измерений хорошо показывает плавное и линейное увеличения влажности почвы:
Видео
Следующая версия
Быренько набросал улучшенную версию сего устройства в Кикаде:
Ничего особенного, поправил былые оплошности и добавил силовой выход для водяного насоса:
Давайте дальше развивайте эту тему, подключайте с помпой насосом и реле!