?? Испытания на улице. Устройство регистрации состояния почвы растений Bluetooth ч.2

Вступление

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

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

Подключение датчика освещенности и температуры

Но прежде чем делать что-то дальше нужно завести оставшиеся датчики – фоторезистор и термистор.

Для выполнения расчета освещенности и температуры необходимо выполнять сложные (трудоёмкие) вычисления, поэтому хилый 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 условных процентов, да колебания очень большие, но качество измерений хорошо показывает плавное и линейное увеличения влажности почвы:

Видео

Следующая версия

Быренько набросал улучшенную версию сего устройства в  Кикаде:

Ничего особенного, поправил былые оплошности и добавил силовой выход для водяного насоса:

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