Автополив для цветка на Arduino
Супрун ДмитрийРади развлечения! ;)
Есть цветок который частенько засыхает из-за забывания его полить, а воду он любит.
Когда делал вентиляцию (о ней можно почитать тут http://sdinfo.ru/контроллер-arduino-рекуператор/ ) взял на про запас пару 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 это раз в час.