Хороший газон требует постоянного ухода. Забудешь полить — трава засохнет и пожелтеет, не выключишь полив во время дождя — аккуратная лужайка превратится в хлюпающее болото.
Мы собрали систему, которая умеет поливать газоны по расписанию, контролирует влажность земли и не даёт промокнуть вашим детям и домашним животным. График полива сверяется с часами реального времени, влажность контролируется аналоговым сенсором, а за появлением людей в зоне полива следит пироэлектрический сенсор.
Проект удобно модернизировать не разбирая герметичный корпус устройства — Arduino Uno WiFi легко перепрошивается по беспроводной сети.
NC
и нормально разомкнутым — NO
контактам реле.GND
// библиотека для работы I²C #include <Wire.h> // библиотека для работы с часами реального времени #include "TroykaRTC.h" // номер пина реле #define RELAY_PIN 8 // номер пина PIR-датчика #define PIR_PIN A2 // номер пина датчика влажности почвы #define MOISTUSE_PIN A1 // максимальный порог влажности почвы #define HUMIDITY_MAX 100 // время включения полива в часах и минутах #define TIME_HOUR 20 #define TIME_MINUTES 30 // интервал полива #define INTERVAL 20 // создаём объект для работы с часами реального времени RTC clock; // состояния системы enum State { OFF, ON, }; // объявляем переменную state State state; // переменная для хранения времени в формате unixtime long unixTime; void setup() { // система выключена state = OFF; // открываем последовательный порт Serial.begin(9600); // пин реле в режим выхода pinMode(RELAY_PIN, OUTPUT); // инициализация часов clock.begin(); // метод установки времени и даты в модуль вручную clock.set(20,29,45,27,07,2005,THURSDAY); // метод установки времени и даты автоматически при компиляции // clock.set(__TIMESTAMP__); // что бы время менялось при прошивки или сбросе питания // закомментируйте оба метода clock.set(); } void loop() { // если значения влажности почвы превышают порог if (analogRead(MOISTUSE_PIN) > HUMIDITY_MAX) { // выходим из loop return false; } // запрашиваем данные с часов clock.read(); int hour = clock.getHour(); int minute = clock.getMinute(); // если система выключена if (state == OFF) { if (hour == TIME_HOUR && minute == TIME_MINUTES ) { // запоминаем текущее время unixTime = clock.getUnixTime(); // включаем полив wateringOn(); } } // если система включена if (state == ON) { if (!digitalRead(PIR_PIN)) { // если кто то оказался в зоне полива // выключаем полив wateringOff(); } else if (clock.getUnixTime() - unixTime > INTERVAL) { // если прошёл заданный интервал времени для полива // выключаем полив wateringOff(); } } } // функция включения полива void wateringOn() { digitalWrite(RELAY_PIN, HIGH); state = ON; } // функция выключения полива void wateringOff() { digitalWrite(RELAY_PIN, LOW); state = OFF; }
Вы можете скомбинировать этот проект с системой капельного орошения огорода. Если же ваша плантация умещается на подоконнике — посмотрите как сделать простую систему полива для комнатных цветов.