Создание автоматической системы полива растений становится все более популярным занятием среди любителей садоводства и энтузиастов интернета вещей. Этот проект по созданию автоматической системы полива растений своими руками помогает решить распространенную проблему, связанную с тем, что мы иногда забываем вовремя поливать наши растения. В этом подробном руководстве мы расскажем как сделать автоматическую систему полива растений на основе платы Arduino и датчика влажности почвы с возможностью управления через мобильное приложение.
Данный проект использует платформу Blynk — работа с ней из России, к сожалению, может быть осложнена/невозможна без использования специальных средств. Но, судя по информации в сети, способы работы с этой платформой из России есть. Публиковать их здесь не могу, потому что их реклама как бы запрещена законом.
Ранее на нашем сайте мы также рассматривали аналогичные проекты полива растений:
- автоматическая оросительная система на Arduino Uno;
- автоматическая система полива растений на основе Arduino;
- умная оросительная система на NodeMCU ESP8266 и датчике влажности почвы;
- интеллектуальная ирригационная система на ESP8266 с контролем влажности и уровня воды.
Необходимые компоненты
- Плата Arduino Uno R4 WiFi (купить на AliExpress).
- Датчик влажности почвы FC-28 с модулем датчика.
- Водяной насос 5 В (купить на AliExpress).
- Модуль реле 5 В (купить на AliExpress).
- Соединительные провода.
- Адаптер питания 12 В постоянного тока с разъемом для подключения внешних устройств / адаптер питания 5 В USB-C.
Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158
Принцип работы автоматической системы полива растений
Автоматическая система полива растений — это устройство (или система), использующее датчики для контроля влажности почвы. Если влажность низкая, система автоматически поливает растения, как правило, с помощью водяного насоса и микроконтроллера. Эта система экономит время, снижает потребление воды и обеспечивает растениям необходимое количество воды в нужный момент. В этом проекте мы создадим такую систему, а также добавим некоторые функции IoT для удаленного полива растений и отправки SMS-уведомлений при низкой влажности почвы.
Начать создание подобной системы необходимо с выбора компонентов. Самое очевидное — нужен электрический насос для полива растений, а для управления им — микроконтроллер. Мы решили выбрать плату Arduino UNO R4, потому что в ней установлен самый мощный микропроцессор RA4M1 от Renesas, а также микроконтроллер ESP32-S3 от Espressif. Благодаря возможности подключения по Wi-Fi, мы можем обеспечить доступ к микроконтроллеру через интернет, что необходимо для удалённого управления. Эта плата также имеет встроенную светодиодную матрицу 12×8, поэтому на ней можно отображать различные параметры растений. Наконец, нам нужен аналоговый датчик влажности почвы, чтобы контролировать её и на основе этих данных дистанционно включать/выключать водяной насос через приложение Blynk.
Блок-схема автоматической системы полива растений
Блок-схема наглядно демонстрирует принцип работы этой автоматической системы полива растений. В основе системы лежит плата Arduino Uno R4, которая считывает уровень влажности почвы с помощью датчика влажности почвы. Если влажность низкая, она автоматически включает водяной насос через релейный модуль.
Помимо этого, мы также использовали облачную платформу Blynk IoT для удаленного мониторинга показаний датчика влажности почвы и включения водяного насоса через наше мобильное приложение. Таким образом, Arduino Uno R4 отправляет данные о влажности почвы в облако Blynk, и если нажата кнопка в мобильном приложении Blynk, данные отправляются на Arduino Uno через облачное приложение Blynk.
Схема проекта
На приведенной ниже принципиальной схеме в качестве основного контроллера используется плата Arduino UNO R4 WiFi, но вы можете использовать любой другой микроконтроллер, заменив его и внеся несколько изменений в код. Здесь я решил использовать Arduino UNO R4, потому что у него есть встроенная светодиодная матрица для имитации мимики растений.
Необходимо убедиться, что компоненты подключены правильно в соответствии с приведенной выше схемой. Обратите внимание, что мы не можем напрямую управлять водяным насосом от выводов периферийного устройства Wi-Fi Arduino UNO R4. Для этого нам потребуется либо модуль управления двигателем, либо релейный модуль. Для простоты я выбираю релейный модуль с внешним источником питания.
Для питания можно использовать либо внешний 12-вольтовый адаптер для питания Arduino через разъем постоянного тока, либо 5-вольтовый источник питания через порт USB-C. Для водяного насоса можно использовать либо внешний источник питания, либо 5-вольтовый вывод питания Arduino (только при питании Arduino от USB-C).
Далее мы займемся практической работой. Да, вам предстоит собрать реальную аппаратную систему, используя принципиальную схему в качестве образца. Прежде чем это сделать, внимательно ознакомьтесь с инструкциями по сборке оборудования, особенно при выборе источника питания для водяного насоса.
Руководство по настройке оборудования
На изображении ниже показана фактическая схема подключения оборудования для создания автоматической системы полива растений с использованием датчика влажности почвы. В этой схеме питание Arduino UNO R4 Wi-Fi осуществляется через USB-порт Type-C. Таким образом, мне не требуется внешний источник питания; я могу подавать питание на водяной насос непосредственно от контакта 5 В Arduino.
При питании Arduino через USB-порт, напряжение обходит стабилизатор, присутствующий на плате Arduino Uno R4 Wi-Fi, поэтому мы можем потреблять ток до 2 мА от контакта 5 В, чего достаточно для управления всеми этими устройствами. На изображении видно, что я использую 5-вольтовый двигатель водяного насоса и одноканальный 5-вольтовый релейный модуль, имеющий 3 контакта на входе и 3 контакта на выходе. На входе расположены три контакта: VCC, GND и сигнальный (IN) контакт. Мы можем управлять выходом реле с помощью сигнального контакта, подавая либо 0 В, либо 5 В.
С другой стороны, у него есть три выходных контакта: нормально разомкнутый (NO), нормально замкнутый (NC) и общий (COM). Но здесь мы используем только два выходных контакта реле, NO и COM, для управления двигателем водяного насоса. Мы используем нормально разомкнутый контакт для выключения двигателя, если сигнальный контакт находится в низком состоянии, и наоборот.
Также можно найти датчик влажности почвы с модулем, который имеет 4 контакта: VCC, GND, A0 (аналоговый выход) и D0 (цифровой выход). Но в нашем проекте мы используем аналоговый контакт (A0) для получения аналогового значения датчика. С другой стороны, у него есть два контакта, которые обычно используются для подключения датчика. У них нет полярности, поэтому независимо от способа подключения датчик будет работать нормально.
На изображении выше показан принцип работы датчика влажности почвы. Обратите внимание, как выходное напряжение модуля уменьшается с 5 В до 0 В в зависимости от содержания воды в почве. Далее перейдем к части, посвященной программированию микроконтроллера. Но прежде чем это сделать, давайте обсудим, как сгенерировать токен авторизации Blynk и идентификатор шаблона Blynk с помощью ПК, что крайне важно для связи микроконтроллера с облаком Blynk.
Генерация кода авторизации и идентификатора шаблона Blynk
ШАГ 1: Перейдите по ссылке https://blynk.io/. Если у вас нет учетной записи Blynk, нажмите «Регистрация», чтобы создать новую учетную запись. Если у вас уже есть учетная запись, нажмите «Войти» и введите свои учетные данные для доступа к порталу Blynk.
ШАГ 2: После входа в систему вы увидите эту веб-страницу. Для создания шаблона и генерации кода вам необходимо находиться в режиме разработчика. Чтобы проверить, находитесь ли вы в режиме разработчика, нажмите на меню профиля, как показано на изображении. Затем убедитесь, что «режим разработчика» («developer mode«) включен, и перезагрузите веб-страницу.
ШАГ 3: После включения режима разработчика выберите пункт «Зона разработчика» («Developer zone option«) в верхнем левом углу, затем нажмите на кнопку «Новый шаблон» («new template») в верхнем правом углу. Вам будет предложено заполнить данные шаблона. Заполните данные, как показано на изображении.
ШАГ 4: После заполнения данных шаблона нажмите «Готово». Вы перейдете на страницу настройки пользовательского шаблона, где сможете его настроить. Но наша цель — отслеживать и контролировать систему полива через телефон; для этого мы хотим использовать мобильное приложение Blynk для настройки шаблона. В любом случае, чтобы получить идентификатор шаблона и код авторизации, нам нужно выполнить эти действия на компьютере, что невозможно.
Здесь вы найдете идентификатор и имя шаблона; просто скопируйте и сохраните их. Это позволит нам включить их в код нашего микроконтроллера. После копирования просто нажмите «Сохранить», чтобы сохранить шаблон.
ШАГ 5: Нам по-прежнему нужен код авторизации Blynk. Чтобы получить код авторизации, нам нужно создать устройство, которое будет использовать этот шаблон. Для этого нам нужно нажать на опцию «Устройства» («Devices«), а затем нажать на «Новое устройство» («New Device«), чтобы создать новое устройство.
ШАГ 6: После нажатия кнопки «Новое устройство» система спросит, каким способом создать устройство. Выберите вариант «Из шаблона» («From template»).
Затем система запросит имя устройства и используемый шаблон. В качестве шаблона используйте наш ранее созданный шаблон «Удалённая система полива» («Remote Watering System«). Здесь я использую «Arduino Wifi» в качестве имени устройства. После заполнения данных нажмите «Создать» (Create).
ШАГ 7: После нажатия кнопки «Создать» будет создано новое устройство. В правом верхнем углу вы найдете код авторизации Blynk и ранее указанные данные шаблона. Просто скопируйте и сохраните их для использования в программировании микроконтроллеров.
Вот и всё, наконец, мы сгенерировали код авторизации Blynk и данные шаблона. Здесь вы можете увидеть наше недавно созданное устройство и шаблон.
Настройка виджетов-шаблонов в мобильном приложении Blynk
Ранее мы обсуждали, как сгенерировать код авторизации Blynk и идентификатор шаблона через ПК. Теперь перейдем к тому, как настроить виджет шаблона на мобильных телефонах для мониторинга уровня влажности почвы и управления водяным насосом.
ШАГ 1: Установите последнюю версию мобильного приложения «Blynk IoT» из соответствующего магазина мобильных приложений.
ШАГ 2: После установки просто откройте приложение. Оно попросит вас войти/зарегистрироваться. Мы уже создали учетную запись Blynk для генерации кода авторизации и идентификатора шаблона. Поэтому используйте эти учетные данные для входа.
ШАГ 3: После входа в систему вы сможете найти ранее созданное вами устройство на главной странице приложения.
ШАГ 4: Чтобы настроить наш шаблон, нам нужно убедиться, что мы находимся в режиме разработчика. Чтобы это проверить, просто нажмите на значок линии в левом углу. Откроется множество параметров; выберите пункт «Мой профиль». Отобразится статус «Зоны разработчика» («Developer zone«). Если она выключена, просто включите её.
ШАГ 5: После этого нажмите на значок гаечного ключа в верхней части главной страницы. Вы найдете наш ранее созданный шаблон. Нажмите на наш шаблон, чтобы настроить виджеты. Нажмите на значок «+», чтобы импортировать необходимые виджеты.
ШАГ 6: Как правило, нам нужны всего два виджета: кнопка для управления водяным насосом и радиальный индикатор для контроля влажности почвы. После импорта этих двух виджетов необходимо правильно их разместить и отрегулировать их размер для улучшения пользовательского опыта. После размещения виджетов следует создать для них виртуальные метки.
Для создания виртуального штифта для радиального индикатора нам нужно один раз нажать на этот виджет. Позже система запросит создание потока данных, как показано на изображении.
ШАГ 7: После нажатия кнопки «Выбрать поток данных» (“Choose datastream”) создайте виртуальный вывод потока данных для радиального датчика. Нажав кнопку «Создать виртуальный вывод потока данных» (create virtual PIN datastream), введите виртуальный вывод. Выполнив действия, показанные на изображении, мы можем создать виртуальный вывод V0 для радиального датчика.
При создании виртуального контакта для передачи данных мы выбрали тип данных double для получения точных данных, а также использовали диапазон от 0 до 100 для отображения процентного значения.
ШАГ 8: Мы создали виртуальный контакт для радиального индикатора. Теперь нам нужно создать новый виртуальный контакт для виджета «Кнопка», нажав кнопку «Создать новый» и следуя инструкциям на изображении ниже, поскольку контакт V0 предназначен специально для радиального индикатора.
Здесь мы выбираем данные V1 в виде целого числа, которое имеет только два состояния: 0 или 1. В состоянии «включено» оно отправляет данные «1», а в состоянии «выключено» — «0».
ШАГ 9: Наконец, мы создали виртуальные контакты потока данных для обоих виджетов. Позже мы также можем настроить внешний вид виджетов, например, как они должны отображаться в темном и светлом режимах телефона. Мы также можем присвоить каждому из виджетов заголовок.
Для визуального изменения виджетов необходимо один раз коснуться виджетов, присутствующих в шаблоне. После касания внизу появится значок «Дизайн» («Design«). Нажмите на этот значок, и вы сможете изучить параметры визуальной настройки виджетов.
ШАГ 10: После визуальной настройки виджета вы можете увидеть его точный пользовательский интерфейс, щелкнув по своему устройству, которое отображается на главной странице приложения.
Примечание: Использовать одни и те же виджеты для вашего приложения необязательно. Однако убедитесь, что виртуальные контакты, указанные в шаблоне приложения и в коде микроконтроллера, совпадают.
Код для автоматической системы полива растений на Arduino
Во-первых, этот код позволяет микроконтроллеру получить доступ к интернету, подключившись к известной доступной точке доступа Wi-Fi. После подключения к интернету контроллер может получить доступ к облаку Blynk, используя токен аутентификации Blynk. Здесь облако Blynk выступает в качестве посредника между микроконтроллером и приложением Blynk.
После авторизации через Blynk, код заставляет микроконтроллер продолжать получать данные о влажности почвы от датчика, и на основе этих данных он управляет встроенной светодиодной матрицей, отображая различные выражения лица, такие как «грустный», «нормальный» и «счастливый».
Одновременно с этим, система передает данные о влажности в облако Blynk и постоянно опрашивает облако на наличие входящих команд включения/выключения насоса. На основе входящей команды микроконтроллер включает/выключает водяной насос.
Здесь вы найдете исходный код с пояснениями к каждому разделу. Следующие заголовочные файлы имеют решающее значение для доступа к облачному серверу Blynk.
|
1 2 3 |
#define BLYNK_TEMPLATE_ID "XXXXXXXXXXX" #define BLYNK_TEMPLATE_NAME "XXXXXXXXXXXX" #define BLYNK_AUTH_TOKEN "XXXXXXXXXXXXX" |
Это необходимые заголовочные файлы, которые требуются при использовании предопределенных функций.
|
1 2 3 4 5 |
#include <SPI.h> #include <WiFiS3.h> #include <BlynkSimpleWifi.h> #include "Arduino_LED_Matrix.h" #include <EEPROM.h> |
Здесь мы определяем контакт датчика влажности почвы и сигнальный контакт релейного модуля.
|
1 2 |
#define moisture_sensor A0 #define relay 7 |
Это необходимые объекты для Blynk и предопределенных функций светодиодной матрицы.
|
1 2 |
BlynkTimer timer; ArduinoLEDMatrix matrix; |
Здесь вам необходимо ввести имя пользователя и пароль вашей сети Wi-Fi для предоставления доступа в интернет микроконтроллеру.
|
1 2 |
char ssid[] = "XXXXXXXXX"; //WIFI NAME char pass[] = "XXXXXXXXXXX"; //WIFI PASSWORD |
Это важные переменные для хранения данных с датчиков, адреса EEPROM и считывания состояния водяного насоса из облака Blynk.
|
1 2 3 4 5 |
int eeprom_addr = 0; //eeprom address int sensorValue = 0; // variable to store the value coming from the sensor int pump_status = 0; int prev_pump_status = 0; float moist_percent = 0.00; |
Следующие массивы используются для отображения грустного, радостного и обычного выражения лица на светодиодной матрице.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const uint32_t HAPPY_LED[] = { 0x3fc48a95, 0x58019fd9, 0x5889871 }; const uint32_t NORMAL_LED[] = { 0x3fc40298, 0xd98d8019, 0x5889871 }; const uint32_t SAD_LED[] = { 0x3fc48a9d, 0xd8898018, 0x71889905 }; |
Следующая функция работает внутри цикла таймера Blynk и используется для непрерывного считывания данных из облака Blynk и использования функции EEPROM, чтобы контроллер сохранял состояние водяного насоса даже после перезагрузки питания.
|
1 2 3 4 5 6 7 |
BLYNK_WRITE(V1){ pump_status = param.asInt(); EEPROM.write(eeprom_addr,pump_status); prev_pump_status = EEPROM.read(eeprom_addr); Serial.println(prev_pump_status); Serial.println(pump_status); } |
Следующая функция используется для отправки данных с датчика влажности воды в облако Blynk.
|
1 2 3 |
void sendSensor(){ Blynk.virtualWrite(V0,moist_percent); } |
Следующая функция инициализирует и настраивает периферийные устройства микроконтроллера, АЦП и светодиодную матрицу.
|
1 2 3 4 5 6 |
void init_renesas_MCU_IO(){ pinMode(relay, OUTPUT); pinMode(moisture_sensor, INPUT); analogReadResolution(12); //change to 12-bit resolution matrix.begin(); //initialise the led matrix*/ } |
Следующая функция используется для отслеживания уровня влажности почвы, на основе которого на светодиодной матрице будет отображаться соответствующее выражение лица. Например, при низкой влажности отображается грустное лицо, при нормальной — нормальное, а при высокой — счастливое.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void track_soil_moisture(){ sensorValue = analogRead(moisture_sensor); moist_percent = 100 - ((float)sensorValue / 4096.0) * 100; if(moist_percent >= 0 && moist_percent < 33.33){ Serial.println("DRY"); matrix.loadFrame(SAD_LED); } else if(moist_percent >= 33.33 && moist_percent < 66.66){ Serial.println("MODERATE"); matrix.loadFrame(NORMAL_LED); } else if(moist_percent >= 66.66 && moist_percent <= 100){ Serial.println("WET"); matrix.loadFrame(HAPPY_LED); } } |
Функция setup() считается отправной точкой программы и используется для настройки сервера Blynk, последовательного монитора, таймера Blynk, а также для получения предыдущего состояния водяного насоса после перезагрузки питания с помощью функции EEPROM.read().
|
1 2 3 4 5 6 7 8 9 |
void setup() { Serial.begin(9600); Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); init_renesas_MCU_IO(); timer.setInterval(1000L,sendSensor); prev_pump_status = EEPROM.read(eeprom_addr); pump_status = prev_pump_status; } |
Функция loop() запускается после того, как функция setup() выполнит свою задачу.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
void loop() { Blynk.run(); timer.run(); track_soil_moisture(); if(pump_status == 0){ Serial.println("Water pump is off"); digitalWrite(relay, LOW); } else if(pump_status == 1){ Serial.println("Water pump is on"); digitalWrite(relay,HIGH); } delay(500); } |
Визуализация выражения лица растения с помощью светодиодной матрицы
Если вы внимательно изучите приведенный выше код, вы поймете, что мы можем отображать выражение лица растения на светодиодной матрице на основе показаний датчика влажности почвы. На изображениях вы можете увидеть такие выражения, как «Счастливое», «Нормальное» и «Грустное». Эти выражения появляются в зависимости от уровня влажности почвы. Рассмотрим такой сценарий: если почва очень влажная, на светодиодной матрице появляется выражение смеха.
Если почва содержит даже небольшое количество влаги, на светодиодной матрице появляется улыбка, как вы можете видеть на изображении.
Если почва очень сухая, это приводит к появлению печального выражения на светодиодной матрице, как показано на изображении.
Вот и всё, наш мини-проект по созданию автоматической системы полива растений завершен. Осталось только включить её, поместить насос в емкость с водой и посмотреть, как она работает.
Видео работы автоматической системы полива растений
Видео было снято во время рабочей фазы нашего проекта, когда у нас была возможность поливать растения в любое время и в любом месте.
На изображении вы можете увидеть настраиваемый виджет приложения Blynk на мобильном телефоне для управления двигателем водяного насоса с помощью кнопки включения/выключения, а также для мониторинга уровня влажности почвы в режиме реального времени.
Итак, наконец-то мы можем создать свою дистанционную систему полива растений, где мы сможем управлять водяным насосом и получать информацию о состоянии почвы растения из любой точки мира. Всё, что нам было нужно, это мобильный телефон с активным подключением к интернету.
Вот ссылка на наш репозиторий GitHub, где вы найдете исходный код этого проекта.
