Автополив для цветка на Arduino

Ради развлечения! ;)

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

Когда делал вентиляцию (о ней можно почитать тут http://sdinfo.ru/контроллер-arduino-рекуператор/ ) взял на про запас пару arduino nano, и один остался валяться, вот такой

Arduino nano

Пришлось докупить мини помпу — 500 руб

Датчик влажности почвы — 120 руб

Батарейный отсек на 4-е батарейки АА — 70 руб

И силовой ключ (реле) взял от Troyka-модуль — 240 руб

Вот так это все выглядит на окне, баночка за 120 руб из “твой дом”.

Корпус в белой коробочке от давнишнего браслета xaomi за горшком

И так соединяем датчик влажности, S с AO, V с +5V, G c GND, соединяем реле S c D9, V с VIN(это тоже +5V) и G со свободным GND. Помпу подсоединяем к L на реле, плюс к плюсу минус к минусу, и питание батареек подсоединяем к P на реле, соблюдая полярность.

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

И загружаем на ардуино программку

#define hum A0

//датчик подключен к A0

#define pomp 9

//реле помпы подключено к D9

int h=0;

// переменная для сохранения значения датчика

void setup()

{

//для активации порта

Serial.begin(9600);

//для активации управления реле

pinMode(pomp, OUTPUT);

}

void loop()

{

//снимаем показания с датчика влажности

h=analogRead(hum);

//отправляем в порт чтобы видеть на экране монитора не обязательная функция с подключенным компьютером можно определить уровень влажности

Serial.print(“hum=”);Serial.println(h);

//если влажность менее 250 включаем помпу на 8 сек и выключаем иначе помпа выключена

if(h<=250)

{digitalWrite(pomp,HIGH);

delay(8000);

digitalWrite(pomp,LOW);}

else

digitalWrite(pomp,LOW);

//таймаут 5 мин

delay(60000*5);

}

То есть программа снимает показания с датчика почвы раз в 5 минут, можно поставить этот промежуток больше например раз в день, для этого пишем 60000*1440. Помпа включается на 8 секунд, 1–2 секунды она разгоняется и доставляет воду, 6–7 секунд поливает, вроде этого достаточно, если нет изменить в любую сторону можно. Уровень влажности тоже можно поменять, 100 совсем сухо, после полива значение примерно 800, как вода впитывается в грунт минуты через 3–5 значение становиться около 500–600.

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

Для этого надо установить библиотеку JeeLib

Скачиваем от сюда https://jeelabs.net/projects/jeelib/wiki

Выбираем

В самом начале кода пишем

#include <JeeLib.h> // Low power functions library

перед void setup() пишем строку инициализации

ISR(WDT_vect) { Sleepy::watchdogEvent(); }

И в конце вместо delay(60000*5);

пишем

Sleepy::loseSomeTime(60000*5);

Время можно выставить побольше, например у меня стоит 60000*60 это раз в час.

UPD: В процессе эксплуатации выяснилось, для длительной работы батарейки все равно приходиться менять часто, поэтому лучше конечно убрать батарейный блок, и просто подключить обычный блок питания от телефона и забыть о смене батареек. А литра воды хватает примерно на 3 недели.