Предыстория:
У меня в саду есть система полива.
Со временем она стала работать плохо из-за, предположительно, засора системы песком.
Давления на постоянный полив не хватает, а чистка этого всего стоит немалых денег, так что я решил найти другое решение проблемы.
Этот проект подходит для частного случая, но вы можете использовать мои наработки в своих самоделках.
Функционал:
Полив растений по времени или принудительно при помощи алгоритма.
Алгоритм работы:
Если настает время, указанное в настройках или пользователь включает переключатель принудительного полива,
то электроника ждет 5 минут, потом реле включает насос и растения поливаются 1 минуту.
Примерно через это время давление начинает уменьшаться. Потом полив выключается на 5 минут, чтобы в системе снова появилось давление.
Все это повторяется до тех пор, пока не истечет время или переключатель не будет выключен.
Дополнительная часть кода - это “Ночной режим”. Она выключает реле ночью.
А то бывало, что принудительный полив включался ночью и это все дело будило меня.
Настройка:
Все настройки находятся в коде и выделены комментариями.
Код:
Библиотеки прикреплены к статье
Спасибо за внимание!
P.S. Если у вас есть предложения по улучшению проекта, то пишите их в комментарии. Еще буду рад ответить на ваши вопросы.
У меня в саду есть система полива.
Со временем она стала работать плохо из-за, предположительно, засора системы песком.
Давления на постоянный полив не хватает, а чистка этого всего стоит немалых денег, так что я решил найти другое решение проблемы.
Этот проект подходит для частного случая, но вы можете использовать мои наработки в своих самоделках.
Функционал:
Полив растений по времени или принудительно при помощи алгоритма.
Алгоритм работы:
Если настает время, указанное в настройках или пользователь включает переключатель принудительного полива,
то электроника ждет 5 минут, потом реле включает насос и растения поливаются 1 минуту.
Примерно через это время давление начинает уменьшаться. Потом полив выключается на 5 минут, чтобы в системе снова появилось давление.
Все это повторяется до тех пор, пока не истечет время или переключатель не будет выключен.
Дополнительная часть кода - это “Ночной режим”. Она выключает реле ночью.
А то бывало, что принудительный полив включался ночью и это все дело будило меня.
Настройка:
Все настройки находятся в коде и выделены комментариями.
Часы реального времени:https://ru.aliexpress.com/item/1pcs-SAMIORE-ROBOT-DS3231-AT24C32-IIC-Module-Precision-Clock-Module-DS3231SN-Memory-module/32833762703.html
Реле 5 вольт: https://ru.aliexpress.com/item/one-1-channel-relay-module-12V-high-and-low-level-trigger-relay-control-with-optocoupler-for/32812356669.html
Платы для пайки:
https://ru.aliexpress.com/item/10-pcs-4X6cm-DIY-Prototype-Paper-PCB-Universal-Circuit-Board-Double-Side-Board-1-6mm-2/1625000537.html
Преобразователь 220-5 вольт:
https://ru.aliexpress.com/item/AC-DC-5V-700mA-3-5W-Power-Supply-Buck-Converter-Step-Down-Module-for-Arduino/32395148959.html
Переключатель купил в магазине электроники, но вот похожие на алике: https://ru.aliexpress.com/item/ON-OFF-Round-Rocker-Switch-LED-illuminated-Car-Dashboard-Dash-Boat-Van-12V/32820853285.html
Светодиоды:
https://ru.aliexpress.com/item/Ultra-Bright-10-Colors-x-50pcs-500pcs-3mm-Diode-LED-Kit-White-Warm-White-Red-Green/32240262628.html
Резисторы:
https://ru.aliexpress.com/item/100-1-4-1R-22-1-100R-220R/32847096736.html
Arduino Nano:
https://ru.aliexpress.com/item/1PCS-Promotion-Funduino-Nano-3-0-Atmega328-Controller-Compatible-Board-for-Arduino-Module-PCB-Development-Board/32531372300.html
Реле 5 вольт: https://ru.aliexpress.com/item/one-1-channel-relay-module-12V-high-and-low-level-trigger-relay-control-with-optocoupler-for/32812356669.html
Платы для пайки:
https://ru.aliexpress.com/item/10-pcs-4X6cm-DIY-Prototype-Paper-PCB-Universal-Circuit-Board-Double-Side-Board-1-6mm-2/1625000537.html
Преобразователь 220-5 вольт:
https://ru.aliexpress.com/item/AC-DC-5V-700mA-3-5W-Power-Supply-Buck-Converter-Step-Down-Module-for-Arduino/32395148959.html
Переключатель купил в магазине электроники, но вот похожие на алике: https://ru.aliexpress.com/item/ON-OFF-Round-Rocker-Switch-LED-illuminated-Car-Dashboard-Dash-Boat-Van-12V/32820853285.html
Светодиоды:
https://ru.aliexpress.com/item/Ultra-Bright-10-Colors-x-50pcs-500pcs-3mm-Diode-LED-Kit-White-Warm-White-Red-Green/32240262628.html
Резисторы:
https://ru.aliexpress.com/item/100-1-4-1R-22-1-100R-220R/32847096736.html
Arduino Nano:
https://ru.aliexpress.com/item/1PCS-Promotion-Funduino-Nano-3-0-Atmega328-Controller-Compatible-Board-for-Arduino-Module-PCB-Development-Board/32531372300.html
Код:
C++:
#include <Arduino.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <GyverButton.h>
//==============Настройки==============//
int Nacalo_polova = 19; //Начало полива
int Konec_poliva = 21; // Конец полива
int RELpin = 3; // Пин Реле
GButton butt(2); // Пин кнопки ( Подключение: Пин - Кнопка - GND)
int DiPInBlue = 4; //Пин первого светодиода
int DiPInRed = 5; //Пин второго светодиода
unsigned long period_time = 300000;// Время простоя
unsigned long work_time = 60000; // Время работы
//==============Настройки==============//
//Объявление переменных
unsigned long period_timer, work_timer;
boolean work_flag;
#define TIMER_START 0
bool workflag;
bool ButtonFlag = false;
int chas;
void setup(){
// Установка времени (часы, минуты, секунды,дни, месяца, года)// (Для активации удалить // перед командами)
//setTime(15,9,00,17,9,2018);
//RTC.set(now());
//-----------------------------------------------------------//
setSyncProvider(RTC.get);//Активация часов
Serial.begin(9600); // Сериал порт
pinMode(RELpin,OUTPUT);
pinMode(DiPInBlue,OUTPUT);
pinMode(DiPInRed,OUTPUT);
period_timer = millis();
void loop(){
if (chas > 21 && chas < 8 ) { // "Ночной" режим. Нужен для того, чтобы не поливалка ночью не включалась. А то бывало такое...
Serial.println("night");
digitalWrite(RELpin,LOW);}
chas = hour(); // Считывание данных с часов
digitalWrite(DiPInBlue,HIGH); // Включение синего светодиода
butt.tick(); // Считываем значение кнопки
Serial.print(hour()); // Вывод часов в последовательный порт
Serial.print(":");
Serial.println(minute());
//Проверка
if (butt.isHold()){ // Проверка состояния кнопки автополива
ButtonFlag = true;
Serial.println("Press");
}
else{ButtonFlag = false;}
if(ButtonFlag){digitalWrite(DiPInRed,HIGH);} //Включение красного светодиоида во время полива
else{digitalWrite(DiPInRed,LOW); }
if((chas >= Nacalo_polova && chas < Konec_poliva) || ButtonFlag){
if (ButtonFlag){
Serial.println("Принудительный автополив");
}
Serial.println("Полив");
if ((long)millis() - period_timer > period_time) {
period_timer = millis(); // "сбросить" таймер периода
work_timer = millis(); // сбросить таймер выполнения
work_flag = true; // начали выполнение
// Включить реле
digitalWrite(RELpin, HIGH);
}
if ( ((long)millis() - work_timer > work_time) && work_flag) {
work_flag = false; // сброс флага на выполнение
if (TIMER_START) period_timer = millis();
// выключить реле
digitalWrite(RELpin, LOW);
}
if (work_flag) {
// а вот этот блок кода выполняется всегда, пока мы находимся по времени "внутри" WORK_TIME . Тут пока пусто.
}}
}
Спасибо за внимание!
P.S. Если у вас есть предложения по улучшению проекта, то пишите их в комментарии. Еще буду рад ответить на ваши вопросы.
Вложения
-
253.3 KB Просмотры: 41
-
147 KB Просмотры: 66
-
418.4 KB Просмотры: 67
-
46.9 KB Просмотры: 15
Изменено: