УМНЫЙ ДОМ Система оптимизации и автоматизации полива растений.

Как вам?

  • Хорошо

    Голосов: 3 60.0%
  • Требуется доработка

    Голосов: 2 40.0%
  • Все плохо

    Голосов: 0 0.0%

  • Всего проголосовало
    5

SerjioSA

✩✩✩✩✩✩✩
7 Сен 2018
5
2
Предыстория:

У меня в саду есть система полива.



Со временем она стала работать плохо из-за, предположительно, засора системы песком.

Давления на постоянный полив не хватает, а чистка этого всего стоит немалых денег, так что я решил найти другое решение проблемы.

Этот проект подходит для частного случая, но вы можете использовать мои наработки в своих самоделках.



Функционал:

Полив растений по времени или принудительно при помощи алгоритма.

Алгоритм работы:

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

то электроника ждет 5 минут, потом реле включает насос и растения поливаются 1 минуту.

Примерно через это время давление начинает уменьшаться. Потом полив выключается на 5 минут, чтобы в системе снова появилось давление.

Все это повторяется до тех пор, пока не истечет время или переключатель не будет выключен.

Дополнительная часть кода - это “Ночной режим”. Она выключает реле ночью.

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

Настройка:

Все настройки находятся в коде и выделены комментариями.







Код:

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. Если у вас есть предложения по улучшению проекта, то пишите их в комментарии. Еще буду рад ответить на ваши вопросы.
 

Вложения

Последнее редактирование:
  • Лойс +1
Реакции: Тоха и EandV