Домашние растения являются не только украшением в квартире. Они выделяют во внешнюю среду кислород, устраняют запыленность помещений, а также обезвреживают витающие в воздухе токсичные примеси. Поэтому так важно, чтобы растение всегда оставалось здоровым, а для этого нужно правильно его поливать. Очень часто недобросовестные хозяева не знают, как правильно это делать, или попросту забывают. Такая безответственность приводит к всевозможным болезням растений. Данная статья посвящена изучению вопросов, связанных с разработкой роботизированных устройств на платформе Arduino Uno, в том числе устройства, способного обеспечивать растения водой в зависимости от его вида и от условий среды.
Ключевые слова: робототехника, программирование, Arduino, автополив
Цель исследования:определить факторы окружающейсреды, влияющие на растения. Разработать систему полива растений, позволяющую автоматизировать процесс их выращивания.
Задачи исследования:
- Проанализировать специальную литературу, изучить основные принципы робототехники, а также особенности построения роботизированных устройств на базе плат семейства Arduino и их модулей.
- Изучить биологическую сторону вопроса, т. е. потребности растений, особенности их биологического ритма.
- Разработать устройство для автоматического полива растений и алгоритм его работы. Проверить работу устройства на практике.
Платформа ArduinoUNO. Платы расширения, сенсоры идатчики
Arduino — это аппаратная платформа, которая содержит простой интерфейс ввода-вывода и поддерживает среду разработки, реализующую открытый язык программирования Processing. Arduino может служить основой для автономных устройств или может работать под управлением ПО, установленного на компьютере. Под торговой маркой Arduino выпускается несколько плат с микроконтроллером и платы расширения («шилдов»). Arduino-совместимые платы спроектированы таким образом, чтобы их можно было при необходимости расширять, добавляя в устройство новые компоненты. Микроконтроллеры для Arduino отличаются наличием предварительно прошитого в них загрузчика (bootloader), с помощью которого программа загружается в микроконтроллер без использования отдельных аппаратных программаторов. Порты ввода-вывода микроконтроллеров оформлены в виде штыревых линеек. Программисту доступны некоторые специальные возможности портов ввода-вывода микроконтроллеров, например, широтно-импульсная модуляция (ШИМ), аналогово-цифровой преобразователь (АЦП), интерфейсы UART, SPI, I2C.
Практическая часть в рамках данного исследования реализована на основе платы Arduino Uno. Она выполнена на базе процессора ATmega с тактовой частотой 16 МГц, обладает памятью 32кБ.
Рис. 1. Платформа Arduino Uno и Troyka Shield
Для подключения необходимых датчиков в рамках исследования использована плата расширения Troyka Shield. Данный «шилд» позволяет подключать большое количество модулей и сенсоров через стандартные 3-проводные шлейфы. Troyka Shield может взаимодействовать с огромным количеством различных датчиков и сенсоров, которые можно классифицировать по различным признакам:
– по назначению: существуют сенсоры для измерения температуры, расстояния, вибрации, звука, влажности, движения, магнитного поля и многие другие;
– типу сигнала: некоторые передают сигнал в виде переменного напряжения (аналоговые), некоторые в виде последовательности низкого и высокого напряжения (цифровые), другие меняют собственное сопротивление. Тип сигнала определяет, как физические показания проецируются на электрические величины;
– по протоколу: он определяет, как принимающая сторона должна интерпретировать передаваемый сенсором сигнал, чтобы получить значение измеряемой величины. Для одних сенсоров измеряемая величина прямо пропорциональна передаваемому напряжению, другие передают только «да / нет», третьи передают свои показания в виде последовательности бит. Протокол у каждого сенсора свой и определяется производителем датчика;
– по способу подключения: большое количество сенсоров легко подключаются по трём проводам; другие сенсоры имеют контакты, подходящие для подключения через breadboard — специальной макетной платы для прототипирования.
Чтобы соединить сенсор с Arduino и начать считывать его показания, нужно:
– определить тип сигнала сенсора: аналоговый, цифровой, сопротивление;
– физически подключить сенсор к Arduino (по 3 проводам или через breadboard);
– определить протокол передачи данных;
– разработать алгоритм для получения и обработки сигнала.
Рассмотрим более подробно датчики, используемые в данном проекте.
- Датчик влажности почвы — простой в устройстве датчик для определения влажности земли, в которую он погружен. Он позволяет узнать о недостаточном или избыточном поливе растений. Принцип работы датчика следующий. Между двумя электродами создаётся небольшое напряжение. Если почва сухая, сопротивление велико и ток будет меньше. Если земля влажная — сопротивление меньше, ток — чуть больше. По итоговому аналоговому сигналу можно судить о степени влажности. Контактные поверхности датчика покрыты золотом, чтобы предотвратить пассивную коррозию, когда датчик выключен. Избавиться от электролитической коррозии, вызванной протекающим током, невозможно, поэтому датчик в разрабатываемом устройстве будет запитан через ключ, т. е. будет включаться только на время измерений.
Сенсор при работе потребляет ток около 35 мА. Напряжение питания 3,3–5 В. Возвращаемый сигнал при питании от 5 В: 0–4,2 В. Отобразив эти значения на 10-битный диапазон, можно воспользоваться следующими приближениями:
– 0–300: сухая почва
– 300–700: влажная почва
– 700–950: датчик в воде
Для вывода показаний датчика используется четырехразрядный индикатор.
Рис. 2. Датчик влажности почвы и четырехразрядный индикатор
- Датчик освещенности. Модуль выполнен на основе фоторезистора GL5528. C датчиком уровня освещённости устройство сможет отличить день от ночи, солнечную погоду от пасмурной, тень от света. Результатом является аналоговый сигнал. Выходное напряжение датчика обратно пропорционально интенсивности падающего света. Датчик подключается к управляющей электронике через 3 провода.
- Датчик температуры и влажности SHT1x. Сенсор SHT1x для измерения температуры и относительной влажности окружающего воздуха — точный, компактный, стабильный и энергоэффективный датчик. Датчик подключается к управляющей электронике через 2 шлейфа по 3 провода. Данные и температуры, и влажности поставляются по сигнальным проводам в виде синхронного цифрового сигнала. Это позволяет передавать данные на расстояние до 20 м. Характеристики:
– Диапазон температур: −40…+128 °С
– Погрешность температуры: ±0,3 °С (при 25° C)
– Диапазон влажности: 0–100 %
– Погрешность влажности: ±2 % (при влажности 10−90 %)
Для осуществления непосредственного полива растения по результатам проведенных измерений в устройстве используется погружная помпа. Для управления помпой с микроконтроллера используется силовой ключ.
Рис. 3. Датчики освещенности, температуры и влажности SHT1x и погружная помпа
Анализ влияния различных факторов на алгоритм работы устройства для автоматической поливки растений
Для разработки адаптивного алгоритма работы устройства необходимо учитывать различные факторы окружающей среды, которые прямо или косвенно влияют на растение.
– Время года. В жаркие весенние и летние дни растению нужно много воды. А вот осенью и зимой, когда температура снижается, много воды не требуется. Когда температура повышается или понижается относительно комнатной (относительно 24 ), автополивальщик должен зафиксировать это и изменить частоту полива.
– Время суток. Растения лучше поливать утром, когда активно идет фотосинтез, чтобы излишняя влага могла испариться в течение дня. При вечернем поливе растение остается во влажном состоянии всю ночь, а понижение температуры способствует развитию опасных грибков-вредителей.
– Влажность воздуха. Растения способны поглощать влагу из воздуха с помощью листьев. При недостатке влаги в воздухе нужно опрыскивать листья водой (не относиться к растениям с опушенной листовой пластиной).
– Влажность почвы. Учитывается для того, чтобы не залить растение.
– Кислотность почвы. Для благоприятного произрастания одних растений нужна подкисленная почва, а для других — более щелочная.
– Вид растения. Для того, чтобы проверить робота на практике, мы взяли 3 абсолютно разных вида растения: пеларгония, толстянка и кактус.
Особенности полива некоторых растений:
- Пеларгония предпочитает тепло и солнце, не любит обильные поливы, страдает от попадания влаги на листья. Не требуется опрыскивание. При высокой влажности обильной поливки не требует. В жаркую погоду нужно поливать 3–4 раза в неделю. В зимний период достаточно 1–2 раз в месяц.
- Толстянка не переносит больших перепадов температур и жару. Благодаря своим листьям способен накапливать влагу. Весной и летом поливать 3 раза в неделю, при обильной влажности — 2 раза. Зимой достаточно 1–2 раз в месяц.
- Кактус. Благоприятно переносит жару, поэтому в весенне-летний период достаточно поливать 2–3 раза в неделю. Зимой достаточно 1 раза в месяц. При этом полив лучше осуществлять в утренние или вечерние часы. В дождливые и пасмурные дни полив не нужен (влаги достаточно в воздухе).
Проектирование устройства для автоматической поливки
Для создания устройства для автоматического полива растений использовались описанные выше плата Arduino Uno, Troyka Shield, а также датчики влажности и температуры SHT1x, освещенности в влажности почвы. Для вывода текущего уровня влажности почвы применен четырехразрядный индикатор. В качестве вспомогательных элементов при подключении датчиков были использованы силовой ключ и нажимной клемник. Сам полив осуществляется с помощью погружной помпы. Процесс сборки устройства можно разбить на несколько этапов:
- Установка Troyka Shield на плату Arduino Uno. Проблем на данном этапе не возникло, т. к. «шилд» полностью совместим с платформами Arduino.
- Подключение датчиков. Все описанные выше сенсоры выполнены в виде специальных Troyka-модулей, что упрощает их подключение к «шилду». Для этого используются трехпроводные шлейфы. Контакты для подключения соединены с линиями управляющей платы следующим образом:
– сигнал (S) — с соответствующим цифровым или аналоговым пином;
– питание (V) — с рабочим напряжением;
– земля (G) — с землёй.
Подключение модулей осуществлялось в следующем порядке:
–дисплея к 3 цифровому пину;
–силового ключа к 4 цифровому пину;
–помпы с помощью клемника и силового ключа к GND и 5V;
–датчика влажности почвы к 0 аналоговому пину (А0);
–датчика влажности и температуры SHT1x к 10 и 11 цифровым пинам;
–датчика освещенности ко 2 аналоговому пину (А2).
- Сборка корпуса. Для этого использовались специальные пластины «Стурктора». Это решётчатый конструктор для быстрой сборки корпусов и механических узлов устройства. «Структор» разработан и выпускается компанией «Амперкой». Изготовлены детали из 5 мм вспененного ПВХ.
Рис. 4. Подключение датчиков к устройству (фото слева); устройство в сборке (фото справа)
Алгоритм работы устройства для автоматической поливки
Следующим шагом стало программирование устройства. Для этого использовалась специальная среда Arduino IDE. Алгоритм разрабатывался для полива кактусов. Общая идея алгоритма была следующей:
– программно подключить датчики к платформе;
– настроить режим работы датчиков;
– снимать показания последовательно с датчиков, текущий уровень влажности почвы вывести на дисплей, сохранив показания для дальнейшего использования;
– для осуществления контроля работы устройства показания всех датчиков можно вывести в специальный монитор порта;
– проверить сколько времени прошло с момента последнего полива и, если это позволяют условия внешней среды, произвести полив.
Для работы с датчиками использовались следующие библиотеки: QuadDisplay.h (для работы с дисплеем, SHT1x.h (для работы с датчиком влажности и температуры SHT1x).
Далее приведен полный скетч работы устройства:
#include "QuadDisplay.h"
#include
#define dataPin 10
#define clockPin 11
SHT1x sht1x(dataPin, clockPin);
#define DISPLAY_PIN 3
#define POMP_PIN 4
#define HUMIDITY_PIN A0
#define LUM_PIN A2
// минимальный и максимальный порог влажности почвы
#define HUMIDITY_MIN 250
#define HUMIDITY_MAX 700
// интервал между проверкой на полив растения (для кактуса летом - 24 часа)
#define INTERVAL 86400000
unsigned int humidity = 0;
unsigned long waitTime = 0;
void setup(void)
{
Serial.begin(9600);
pinMode(DISPLAY_PIN, OUTPUT);
pinMode(POMP_PIN, OUTPUT);
displayInt(DISPLAY_PIN, 0);
}
void loop(void)
{
float temp_c;
float humidity_air;
// считываем показания с SHT1x
temp_c = sht1x.readTemperatureC();
humidity_air = sht1x.readHumidity();
// считываем уровень освещённости (чем темнее, тем больше значение)
int lightness = analogRead(LUM_PIN);
// считываем текущее показания датчика влажности почвы
int humidityNow = analogRead(HUMIDITY_PIN);
if (humidityNow != humidity) {
humidity= humidityNow;
displayInt(DISPLAY_PIN, humidityNow);
}
Serial.print("Temperature: "); Serial.print(temp_c); Serial.println(" C");
Serial.print("Humidity_air: "); Serial.print(humidity_air); Serial.println(" %");
Serial.print("Lightness: "); Serial.println(lightness);
Serial.print("Humidity_earth: "); Serial.print(humidity); Serial.println("\n");
delay(3000);
// если прошёл заданный интервал времени, значения датчика влажности меньше допустимой границы и выполнены другие условия, включаем помпу на 2 сек
if ((waitTime == 0 || millis() - waitTime > INTERVAL) && humidity < HUMIDITY_MIN && lightness > 500 && humidity_air < 90) {
digitalWrite(POMP_PIN, HIGH);
delay(2000);
digitalWrite(POMP_PIN, LOW);
waitTime = millis();
}
}
Заключение
В ходе исследования были изучены особенности выращивания некоторых комнатных растений, факторы окружающей среды, влияющие на развитие. Полученные данные были учтены при разработке алгоритма работы устройства. Разрабатываемое устройство предназначено для использования в быту, поэтому в данной конструкции используется только один датчик влажности и одна погружная помпа. Однако, если необходимо осуществлять автоматический полив сразу нескольких растений, то можно добавить необходимое количество узлов. Кроме того, есть и другой вариант «масштабирования» — подключить к выводящему шлангу помпы более длинный шланг и расположить его между грядками, проделав отверстия. Существуют и другие направления модификации данной модели:
– Проблема запаса воды в резервуаре. Если необходимо оставить устройство работающим на длительный срок без присмотра, то необходимо позаботиться о том, чтобы вода в резервуаре не закончилась. Например, можно для этого добавить систему опустошения резервуара с водой с помощью дополнительного датчика влажности или ультразвукового дальнометра (для глубокой емкости).
– Снижение уровня энергопотребления. В данном проекте устройство можно питать только от сети. Но это не безопасно. Выходом может являться использование Arduino Mini, способного в режиме сна снижать потребляемый.
– Возможность «горячей замены» растения, т. е. способность устройства подстраивать время полива и другие факторы исходя из вида растения без перепрошивки. Этого можно достичь с помощью мембранной клавиатуры, которая позволит выбирать одну из заранее заданных программ полива.
Однако, несмотря на перечисленный возможности усовершенствования, цели исследования были достигнуты. Можно сделать вывод, что, имея определенный «багаж» знаний в области проектирования и программирования роботизированных устройств, а также умея решать прикладные задачи в различных областях жизнедеятельности человека, можно разрабатывать различные устройства, способные помочь человеку в быту и на производстве. В частности, разработанное устройство способно облегчить выращивание как комнатных растений, так и сельскохозяйственных культур. Работа по изучению и применению на практике роботизированных устройств будет продолжена.
Литература:
- Банци М. Arduino для начинающих волшебников. — М.: Рид Групп, 2012.
- Блум Д. Изучаем Arduino. — СПб.: БХВ-Петербург, 2015.
- Монк С. Программируем Arduino. Основы работы со скетчами. — СПб.: Питер, 2016.
- Петин В. А. Проекты с использованием контроллера Arduino. — СПб.: БХВ-Петербург, 2014.
- Соммер У. Программирование микроконтроллерных плат Arduino/Freeduino. — СПб.: БХВ-Петербург, 2012.
- Амперка. Вики [Электронный ресурс]. URL: http://wiki.amperka.ru/
- (Дата обращения: 12.02.2017г.)
- Информационный портал Arduino.ru [Электронный ресурс]. URL: http://arduino.ru/ (Дата обращения: 10.12.2016г.)