====== Дождеватор — автоматизируем работу садового дождевателя ====== {{ :projects:automatic-watering:dojdevator_2.jpg |}} * Платформы: Arduino * Языки программирования: Arduino (C++) * Тэги: газон, дача, полив, автополив, дождеватель ===== Что это ===== Хороший газон требует постоянного ухода. Забудешь полить — трава засохнет и пожелтеет, не выключишь полив во время дождя — аккуратная лужайка превратится в хлюпающее болото. Мы собрали систему, которая умеет поливать газоны по расписанию, контролирует влажность земли и не даёт промокнуть вашим детям и домашним животным. График полива сверяется с [[amp>product/troyka-rtc?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki|часами реального времени]], влажность контролируется [[amp>product/soil-moisture-sensor?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki|аналоговым сенсором]], а за появлением людей в зоне полива [[amp>product/infrared-motion-sensor?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki |следит пироэлектрический сенсор]]. Проект удобно модернизировать не разбирая герметичный корпус устройства — [[amp>product/arduino-uno-wifi?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki |Arduino Uno WiFi]] легко перепрошивается по беспроводной сети. ===== Видеообзор ====== {{youtube>-Rl0ASRsdHk?large}} ===== Что понадобится ===== - [[amp>product/arduino-uno-wifi?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Arduino Uno WiFi]] - [[amp>product/arduino-power-shield-li-ion?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Power Shield]] - [[amp>product/arduino-troyka-slot-shield?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Troyka Slot Shield]] - [[amp>product/motorized-ball-valve-15mm?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Механизированный кран]] - [[amp>product/troyka-mini-relay?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Мини-Реле (Troyka-модуль)]] - [[amp>product/troyka-rtc?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Часы реального времени (Troyka-модуль)]] - [[amp>product/soil-moisture-sensor?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Датчик влажности почвы]] - [[amp>product/infrared-motion-sensor?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Инфракрасный датчик движения]] - [[amp>product/pin-headers-long?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Штырьковые соединители длинные (1×40)]] - [[amp>product/structor-mega?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Пластина мега (#Структор)]] - [[amp>product/21mm-jack?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Штекер питания 2,1 мм]] - [[amp>product/wire-mm?utm_source=announce&utm_campaign=ball-valve&utm_medium=wiki | Соединительные провода «папа-папа»]] - Блок питания: 12 В - Герметичный корпус ===== Как собрать ===== - Установите Power Shield сверху на Arduino Uno WiFi. - Добавьте к полученному бутерброду Troyka Slot Shield. - Чтобы сделать устройство умным, добавьте мини-реле и часы реального времени сверху на Troyka Slot Shield к ''8'' и ''I²C'' пинам соответственно. В итоге получился бутерброд как на схеме.{{ :projects:automatic-watering:automatic-watering_scheme.png |}} - Подключите к управляющей плате питание 12 вольт через внешний разъём.{{ :projects:automatic-watering:automatic-watering_scheme2.png |}} - В продолжении скоммутируйте сервопривод крана с управляющей платой через реле: - Красный и синий провод шарового крана подключите к нормально замкнутым — ''NC'' и нормально разомкнутым — ''NO'' контактам реле. - Жёлтый провод подключите к общей земле — ''GND'' - Общий вывод реле ''COM'' соедините с входным напряжением на плату Arduino Uno WiFi — ''Vin'' или ''V2'' на Troyka Slot Shield. {{ :projects:automatic-watering:automatic-watering_scheme3.png |}} В зависимости от состояние реле — клапан будет открыт или закрыт. - Добавьте к устройству через штырьковые соединители датчик влажности почвы и инфракрасный датчик движения к аналоговому пину ''A1'' и ''A2'' соответственно. {{ :projects:automatic-watering:automatic-watering_scheme4.png | }} Датчик влажности почвы не даст устройству включиться после или вовремя дождя, а PIR-датчик не даст устройству окатить вас водой. - Спрячьте управляющую электронику и блок питания в герметичный корпус. ====== Исходный код ====== // библиотека для работы I²C #include // библиотека для работы с часами реального времени #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; } ====== Что дальше ====== Вы можете скомбинировать этот проект с [[projects:barrel|системой капельного орошения]] огорода. Если же ваша плантация умещается на подоконнике — посмотрите как сделать [[/slot-box:automatic-watering|простую систему полива]] для комнатных цветов.