Контроллер для гидропоники на Wemos D1 mini » Обзоры товаров из интернет-магазинов Китая

Контроллер для гидропоники на Wemos D1 mini » Обзоры товаров из интернет-магазинов Китая

Tomtop WW

Об одном из миллиона способов практического применении этой потрясной штуки.
Будет небольшая история создания, «самописные» программа для Андроид, вэб-морда и сайт на сервере, немного олова и много капсаицина.

Так сложилось, что я люблю что-нибудь выращивать, люблю острый перец и люблю что-нибудь мастерить. В этом устройстве соединились все три эти страсти.
Должен сказать, что я не IT-шник ни по образованию, ни по профессии, поэтому прошу спецов делать скидку и побольше критиковать, критику я люблю, помогает развиваться.

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


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

Контроллер.
Требования к контроллеру были следующие:
— мониторинг климата (температура, влажность)
— управление светодиодными лампами, причем двумя каналами, отдельно красными диодами, отдельно синими
— запись статистики.

Вариант №1.
Вначале использовалась Arduino Mega2560, которая была обвешана:
— датчик температуры и влажности DHT-21
— датчик давления bmp180
— двухканальное реле
— графический дисплей вот такой
— инфракрасный приемник для управление с пульта (взял от китайского прожектора), удобная штука, раз подключил — и имеешь кучу настраиваемых кнопок
— модуль записи SD-card
— модуль люксометра
— буззер
Отработало устройство без нареканий. Выполнило свою главную задачу — познакомило меня с Ардуиной.
Вариант № 2.
Давно меня терзали мысли перевести интерфейс (отображение информации и управление) Ардуины в Андроид-телефон, уж больно он разросся, но как подумаешь, что для этого Java штурмовать придется, желание делать это как-то сразу пропадало.
И вот набрел случайно на совершенно потрясную штуку — MIT App Inventor 2.
Написание Андроид-программы для людей, совсем не знакомых с программированием. Очень похоже на хорошо мне знакомый Scratch (с дочкой занимаюсь).
Среда разработки — онлайн в браузере.
Как и во «взрослой» Android Studio, написание состоит из двух частей, в первом окне с помощью драг&дропа набрасываем компоненты, вторая — написание логики. Просто до неприличия.
В общем стряхнул я пыль с давно валявшегося HC-05 уже практически через полчаса в телефон пошла первая информация с Ардуины.
Подключается он по Serial, все стандартно, передаю данные с Ардуины в таком виде:
<24.5, 40, 200, 14:10:08, 12, 10, 1, 1>
Данные, разделенные запятыми, т.н. CSV-формат. Температура, влажность, текущее время, люксы, количество часов красных диодов, и то же для синих, включен ли красный, и синий. Ну и по краям символы начала и конца строки, чтоб можно было проверить ее целостность.
Сначала накидали компонентов:

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

Раз в секунду считываем все байты, стоящие в очереди и отправляем на обработку в функцию trim_start.

Поскольку полученные данные могут быть повреждены, в функции trim_start делаем простейшую проверку (проверяем наличие символов начала и конца строки, чтобы символ начала шел впереди символа конца)
Разбиваем строку на элементы и наполняем ими массив data_list.

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

Ну и параллельно проверяем и меняем состояние кнопок (включено/выключено, ставит соотв. картинку).

Отправлять данные в Ардуину будем в следующем формате:
R_12>
Первый символ, что именно меняем (R-для красных диодов, B-для синих, T-для времени).
Вот к примеру для красных (формируем строку для отправки и выставляем флаг transmit, показыающий, что есть что оправить):

Собственно отправка:

Теперь принимаем их в Ардуине:
char reb_array[20] ;
int lll=0;
while (Serial1.available() > 0) { //если пришли данные
reb_array[lll]=Serial1.read(); // считываем байты и заполняем ими массив reb_array
lll++;
}

Далее парсим строку и в зависимости от первой буквы меняем нужные переменные:
char * pch;
pch = strtok (reb_array,»_»);
String pp = (String)pch;
if(pp == «R»){ pch = strtok (NULL, «>»);
String r1=(String)pch;
time_red_duration = r1.toInt();}
if(pp == «B»){pch = strtok (NULL, «>»);
String r1=(String)pch;
time_blue_duration=r1.toInt();}
Вот итоговый вид программы

Сверху два «спидометра» температуры и влажности, ниже люксометр, далее кнопки красных и синих диодов (выполняют три функции: 1 — показывают включены или нет, 2-текущий режим, 3-при нажатии принудительно включают/выключают их). Ниже время, далее слайдеры установки режима работы диодов. И в самом низу кнопка установки времени на Ардуине, т.е. его синхронизации со временем телефона (у меня сгорел модуль часов, поэтому после каждого включения приходилось вручную его устанавливать, теперь я лишен этой «радости»).

В общем архиудобная штука, теперь нет необходимости тулить громоздкое каскадное меню для отображения и управление (они уже сейчас занимают около 60% кода в Ардуине), намного удобнее, можно проверять, управлять дистанционно, значительно красивше, здорово экономит время при написании кода, возможно деньги (управляющие элементы и дисплей теперь не обязательно покупать и тулить к устройству), громадный простор для фантазии (построение графиков, передача в интернет, сложная логика на стороне телефона и т.д. и т.п.).
Аналогичным образом её можно использовать и при подключении по WiFi, не только блютуз.
Позже чуть подредактировал, стало так

Вариант №3.
Был приобретен герой обзора. В принципе это то же самый ESP8266, но уже распаянный, с программатором на борту (340-й), microUSB-входом, стабилизатором питания и практически бесплатно, программировать можно а Arduino IDE.
Что имеем:
1. частота 80 или 160 MHz, в отличие от Меги, где только 16.
2. Память 4 Mb, у меги 256кб
3. Оперативка 80кб, у меги 8.
4. И самое главное вайфай, которого у меги нету.
5. Единственный минус — меньше выводов, но на крайний случай можно их увеличить, с использованием сдвиговых регистров. Да и потребность в них упала на порядок, т.к. устройства интерфейса и управления уже не нужны.
В общем имеем на порядок (в прямом смысле — в 10 раз) более мощное устройство, но в разы дешевле и компактнее. Ресурсов хватает уже для запуска почти полноценного сервера.
Поначалу я не осознал всю суть и возможности этого зверька, и использовал его лишь в качестве довеска к Меге, соединив с последней по Serial и используя его лишь для отправки инфы на сервер (подробнее о сервере ниже).

Вариант №4.
И вот наконец пришло понимание с кем я имею дело, и в ходе размышлений пришел к выводу, что Ардуино Мега здесь совершенно лишняя.
Вот так выглядел мой коллайдер в связке с Мегой в прошлом году

Вот таким стал сейчас

Что изменилось:
Выкинул Ардуину Мега и перевел его полностью на Wemos.
Выкинул дисплей — теперь отображение информации по вайфаю на компьютере.
Выкинул IR-датчик управления с пульта — теперь управление тоже на компьютере.
Выкинул модуль SD-карт — вся инфа отправляется на сервер и записывается в базу MySQL.
Выкинул модуль блютуз — управление с телефона прямо в браузере.
Выкинул модуль люксометра — просто необходимости в нем нет.
Вемос сделал легкосъемным — при необходимости залить другую прошивку не нужно отсоединять всю периферию, с платы снимается только Вемос.

Осталось:
Датчик DHT-21
Датчик давления
Часы (вообще можно было и их выкинуть, а синхронизировать внутренний таймер Вемоса с временем интернета, но больше он мне пока нигде не нужен — решил пусть будет)
PPM-метр раствора — там выше на на фото сетевая вилка в растворе. Это и есть щупы TDS-метра. Подключена через делитель напряжения на аналоговый вход. Замеряю падения на них напряжения, вычисляют сопротивление и привожу к ррм. Штука конечно не точная, при передвижении вилки показания гуляют, но тенденцию показывает прекрасно (увеличение или падение ррм)
Реле управления светом, отдельно красными и синими диодами.
На помпу установил твердотельное реле вот такое:

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

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

В принципе все там понятно, объяснять не нужно, отображается инфа с датчиков, текущие установки. Справа поля для их изменения. При нажатии кнопки Setup, собираются данные с полей, если есть, берется текущее системное время для синхронизации с ним времени Вемоса, и отправляется в Вемос. Там данные записываются в EEPROM, при перезагрузке ничего не сбивается.

Каждые пять минут данные отправляются на сервер, где записываются в базу MySQL.
При заходе на сайт anndrew.tk выдается вот такая страница с информацией. Можете прямо сейчас зайти на него и увидеть текущую обстановку в моей гидропонике.

Отображаются «спидометры» — актуальные значения температуры, влажности, давления, ррм и объема оставшего раствора. Рядом с ними графики за последние сутки. Если нажать на график — откроется более подробный, где меняя в строке браузера последнее число (по умолчанию там стоит 500), можно посмотреть график за более продолжительное время.
Сайт писал сам на РНР, для графиков использовал библиотеку Highcharts

Всё работает нормально. Пруф:

Я так понял без этого администрация обзор не пропустит:

P.S. Это мой первый обзор, критикуйте, спрашивайте — с радостью отвечу.

Данный товар из магазина
Цена: $2.73, Перейти в магазин
* цена указана на момент написания обзора (28.06.2017)
http://review-china.com/aliexpress/19312-.html

Оставьте комментарий