Автоматический полив растений на Ардуино

Как сделать автоматический полив растений на Ардуино? На платах Arduino можно реализовать различные устройства, например, автоматизировать орошение всех комнатных растений или 1 цветка. Чтобы сделать автополив на «Ардуино», нужно лишь приобрести необходимые материалы и следовать инструкции по сборке девайса.

Автополив

Что такое автополив на «Ардуино»

Автополив — автоматизированный процесс увлажнения растений, в котором требуется минимальное участие человека. Если организовывать его на плате «Ардуино», то от пользователя потребуется только периодически:

  • менять воду для полива;
  • осматривать конструкцию на наличие неисправностей.
Такую систему удобно использовать тем, кто не бывает дома, но должен ухаживать за цветами, чтобы они не засохли. Кроме того, свой огород или дача — места, для которых подходит автоматизированное орошение.

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

Что понадобится для работы

Для сборки конструкции потребуются следующие элементы:

  1. Плата Arduino (например, модель UNO или Мега).
  2. Датчик уровня влажности почвы.
  3. Насос для воды.
  4. Шланг для прокачки жидкости (подводится напрямую в горшок или на грядку).
  5. Емкость для забора воды.
  6. Контактные кабели.
  7. Блок питания электронных компонентов.

Плата Arduino

Система не будет напрямую подключаться к водопроводу, а будет забирать воду из резервной емкости, которую требуется наполнять самостоятельно. Это повысит надежность конструкции, т.к. поможет избежать непредвиденных ситуаций, связанных с неисправной работой водопровода.

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

Основные параметры и схема подключения

Датчик влажности состоит из щупа и компаратора. Сигнал может измеряться как в аналоговой форме (0 — максимум влажности, 1023 — минимум), так и в цифровой (0 — влажно, 1 — сухо). Для повышения точности лучше использовать аналоговую форму. Оптимально выбрать следующие параметры: 200 — нормальная влажность, 600 — предельная сухость. Эти показатели можно изменить в загружаемой в плату прошивке.

Схема подключения

1 вывод датчика подключается к аналоговому пину «Ардуино», 2 — к питанию (Vcc, GND), а оставшиеся 4 не соединяются ни с чем, т.к. цифровой сигнал не используется.

Вода из резервуара в систему будет подаваться при помощи насоса. Достаточно устройства на 12 В. Помпа должна работать в соответствии с выбранным типом полива растений. Оптимальный вариант — капельный.

Схема насосной станции состоит из:

  • мотора;
  • драйвера «двигатель-плата»;

Мотор 1 выводом подключается к драйверу, а другим — к собственному источнику питания в виде аккумулятора или батареи. Работающим двигателем подкачивается вода в трубки.

Драйвер подключается 1 выводом к информационному контакту «Ардуино», а 2 другими — к питанию (Vcc, GND).

Принцип работы автополива на базе мк «Ардуино»

Система автополива функционирует по принципу опроса платой датчика влажности земли. Каждую секунду (этот промежуток настраивается программой) датчик отправляет информацию о состоянии почвы микроконтроллеру.

Если принятое значение превышает 550, а помпа не работала более 15 минут, то активируется автополив. Время увлажнения прописывается в программе (в скетче за это отвечает переменная pomp_work).

Принцип работы автополива

15-минутный перерыв в процессе орошения требуется, чтобы влага успела впитаться в почву, и растения получили ровно столько жидкости, сколько нужно.

Модернизировать конструкцию можно установкой датчика воды в резервуаре. Если жидкости в нем не останется, устройству нет смысла функционировать (насос быстрее изнашивается при работе на холостом ходу).

Датчик можно подключить через драйвер к «Ардуино» и прописать в скетче условие: если уровень воды ниже *значение переменной*, то не подавать управляющий сигнал на помпу.

Дополнить автополив можно системой индикации, если параллельно основным сигналам подключить светодиоды. Тогда сразу будет виден путь прохождения сигнала, а также место возникновения неисправности.

Пошаговая инструкция сборки

Элементы собираются в следующем порядке:

  1. В плату загружается скетч.
  2. «Ардуино» отключается от питания.
  3. К плате без питания подключаются насос и датчик.
  4. К выводам резервуара с жидкостью подсоединяются трубки для полива.
  5. Двигатель помпы подключается к автономному питанию.
  6. Емкость для орошения наполняется водой.
  7. К «Арудино» подводится питание.
  8. Активируется автополив.

Подключение и настройка системы производится при полностью отключенном питании и отсутствии воды в конструкции.

Элементы питания нужно расположить максимально далеко от резервуара и трубок с жидкостью.

Пример кода

int min_value = 600; //предельная сухость

int max_value = 220; //нормальная влажность

int normal_value = 500; //высокая сухость

int value = 0; //полученное значение с датчика

int last_value = 0; //последнее влияющее изменение параметра датчика

int delta =50; //изменение, влияющее на работу помпы

int ralay = 6; //вывод реле

int pomp_work = 10; //время работы насоса в секундах

int analogPin = A0; //вывод датчика влажности почвы

int second = 0; //секунды

int off = 0; //счетчик времени, оставшегося до конца полива

int pause = 15; //время паузы после полива в минутах

void setup()

{

Serial.begin(9600);

pinMode(ralay,HIGH);

digitalWrite(ralay, HIGH);

}

void water()

{

int pomp_temp;

pomp_temp = pomp_work;

digitalWrite(ralay, LOW);

while(pomp_temp > 0 && value > norm_value)

{

delay(1000);

value=analogRead(analogPin);//обновляем значение влажности

pomp_temp—;

}

digitalWrite(ralay, HIGH);

second=0; //сброс счетчика секунд

off=pause;//установка таймаута между поливами

}

void loop()

{

value=analogRead(analogPin);

if (value>(last_value+delta)||value<(last_value-delta))

{

Serial.println(value);

last_value=value;

}

if ((value>(min_value-value_sdvig)) && off<1)

water();

if (second>59)

{

second=0;

if (off>0) off—;

}

delay(1000);//пауза 1 сек

second++;

}

Ссылка на основную публикацию