Поливалка. Работает. Есть пара вопросов, кто опытный, помогите, пожалуйста.

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

bwn пишет:

Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.

блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.

bwn
Offline
Зарегистрирован: 25.08.2014

Клапауций 823 пишет:

bwn пишет:

Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.

блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.

Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

bwn пишет:

Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.

я за траву в шкафу.

gallery_9590_423_47874.jpg

bwn
Offline
Зарегистрирован: 25.08.2014

Клапауций 823 пишет:

bwn пишет:

Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.

я за траву в шкафу.

gallery_9590_423_47874.jpg

А это добро нам без надобности. Мне для веселья  ректификатора хватает.

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

bwn пишет:

Мне для веселья  ректификатора хватает.

кому и кобыла - невеста.

bwn
Offline
Зарегистрирован: 25.08.2014

Клапауций 823 пишет:

bwn пишет:

Мне для веселья  ректификатора хватает.

кому и кобыла - невеста.

Уху, жеребцу.

grey72
Offline
Зарегистрирован: 30.01.2017

выкладываю рабочий код работающего автомата полива, сделана калибровка датчика дождя в течении 20 секунд, старт с поливом, без полива. Поливает раз в сутки утром, капельно. Сделал возможность выставления 0 во времени полива.

/*система автополива 11 грядок, первые две без, а все остальные с датчиком дождя
устанавливается один раз с записью в епром, чтобы поменять время полива надо нажать кнопку сброс и вновь выставить 
время полива на нужном реле поливается утром, раз в сутки, реализован дисплей на ТМ 1638, реле стандартные для ардуино с включением низким уровнем*/
#include <InvertedTM1638.h>
#include <TM1638.h>
#include <TM1638QYF.h>
#include <TM1640.h>
#include <TM16XX.h>
#include <TM16XXFonts.h>
#include <EEPROM.h>
// define a module on data pin A2, clock pin A3 and strobe pin A4
TM1638 module(A2,A3,A4);
#define irm     A1 //датчик влажности
#define pwr     A5 //датчик влажности power
#define light   A0 //датчик света
#define irrig1  2 //полив реле 1
#define irrig2  3 //полив реле 2
#define irrig3  4
#define irrig4  5
#define irrig5  6
#define irrig6  7
#define irrig7  8
#define irrig8  9
#define irrig9  10
#define irrig10 11
#define irrig11 12
unsigned long startTime; //время начала
unsigned long loopTime; //время прошло
unsigned long LimitTime = 0; //таймер
long previousMillis = 0; //счетчик прошедшего времени для AutoMainScreen
long interval = 10000; //задержка автовозврата к MainScreen 10сек
int h=1;//номер реле
int m=0;
int s=0;
int x;
int val;
boolean running = false; //Флаг Запуска отсчета
boolean flag = false;
void setup(){
  //установим режимы работы выходов и входов
  pinMode(irrig1,OUTPUT); 
  pinMode(irrig2,OUTPUT); 
  pinMode(irrig3,OUTPUT); 
  pinMode(irrig4,OUTPUT); 
  pinMode(irrig5,OUTPUT); 
  pinMode(irrig6,OUTPUT); 
  pinMode(irrig7,OUTPUT); 
  pinMode(irrig8,OUTPUT);
  pinMode(irrig9,OUTPUT); 
  pinMode(irrig10,OUTPUT); 
  pinMode(irrig11,OUTPUT);  
  pinMode(pwr,OUTPUT); 
  pinMode(light,INPUT); 
  pinMode(irm,INPUT); 
  digitalWrite (irrig1,HIGH);
  digitalWrite (irrig2,HIGH);
  digitalWrite (irrig3,HIGH);
  digitalWrite (irrig4,HIGH);
  digitalWrite (irrig5,HIGH);
  digitalWrite (irrig6,HIGH);
  digitalWrite (irrig7,HIGH);
  digitalWrite (irrig8,HIGH);
  digitalWrite (irrig9,HIGH);
  digitalWrite (irrig10,HIGH);
  digitalWrite (irrig11,HIGH);
  digitalWrite (pwr,HIGH);
  module.setupDisplay(true, 1);
  module.setLEDs(0x0000);  
  module.clearDisplay();
  module.setDisplayToString("HELLO");
  delay(3000);
} 

void loop() {
   unsigned long currentMillis = millis();

if (running == true){ 
   module.clearDisplay();
do {
   val = analogRead (light);//ждем день
   if (val > 600) { flag = false; }
  
   delay(3000);
   val = analogRead (light);
   if (val < 600) { flag = true; }
   }
  while (flag);
  running = true;
  digitalWrite (pwr,LOW);
  delay(500);
}
 if (running == true && EEPROM.read (21)>0){   
  startTime = millis();
  h = 1;
  m = EEPROM.read (1);
  LimitTime =  m*60000;
  digitalWrite (irrig1,LOW);
  digitalWrite (pwr,HIGH);
  while(loopTime < LimitTime){    // сравниваем время прошло с вр окончания  
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; //вычисляем сколько времени прошло
   }
 running = false;//окончание работы таймера 
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (21,0);
    digitalWrite (irrig1,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;
 }
   if (running == true && EEPROM.read (22)>0) {   
  startTime = millis();
  h = 2;
  m = EEPROM.read (2);
  LimitTime =  m*60000;
  digitalWrite (irrig2,LOW);
  digitalWrite (pwr,HIGH);
  while(loopTime < LimitTime){      
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false; 
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (22,0);
    digitalWrite (irrig2,HIGH);
    digitalWrite (pwr,LOW);//включаем питание датчика влаги(реле)
    delay (1000);
    running = true;
   }
   if (running == true && analogRead (irm)>220 && EEPROM.read (23)> 0) {   //таймер запущен и датчик дождя сухой
  startTime = millis();
  digitalWrite (pwr,HIGH);//выключаем питание датчика влаги(реле)
  h = 3;
  m = EEPROM.read (3);
  LimitTime =  m*60000;
  digitalWrite (irrig3,LOW);
  while(loopTime < LimitTime){      
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false; 
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (23,0); 
    digitalWrite (irrig3,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;
   }
 if (running == true && analogRead (irm)>220 && EEPROM.read (24)> 0) {   
  startTime = millis();
  digitalWrite (pwr,HIGH);
  h = 4;
  m = EEPROM.read (4);
  LimitTime =  m*60000;
  digitalWrite (irrig4,LOW);
  while(loopTime < LimitTime){      
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false;
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (24,0);
    digitalWrite (irrig4,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;
   }
 if (running == true && analogRead (irm)>220 && EEPROM.read (25)> 0) {   
  startTime = millis();
  digitalWrite (pwr,HIGH);
  h = 5;
  m = EEPROM.read (5);
  LimitTime =  m*60000;
  digitalWrite (irrig5,LOW);
  while(loopTime < LimitTime){      
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false;
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (25,0);
    digitalWrite (irrig5,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;
   }
 if (running == true && analogRead (irm)>220 && EEPROM.read (26)> 0) {   
  startTime = millis();
  digitalWrite (pwr,HIGH);
  h = 6;
  m = EEPROM.read (6);
  LimitTime =  m*60000;
  digitalWrite (irrig6,LOW);
  while(loopTime < LimitTime){      
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false; 
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (26,0);
    digitalWrite (irrig6,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;
   }
 if (running == true && analogRead (irm)>220 && EEPROM.read (27)> 0) {   
  startTime = millis();
  digitalWrite (pwr,HIGH);
  h = 7;
  m = EEPROM.read (7);
  LimitTime =  m*60000;
  digitalWrite (irrig7,LOW);
  while(loopTime < LimitTime){       
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false;
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (27,0);
    digitalWrite (irrig7,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;
   }
 if (running == true && analogRead (irm)>220 && EEPROM.read (28)> 0) {   
  startTime = millis();
  digitalWrite (pwr,HIGH);
  h = 8;
  m = EEPROM.read (8);
  LimitTime =  m*60000;
  digitalWrite (irrig8,LOW);
  while(loopTime < LimitTime){      
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false;//окончание работы таймера 
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (28,0);
    digitalWrite (irrig8,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;   
    }
 if (running == true && analogRead (irm)>220 && EEPROM.read (29)> 0) {   
  startTime = millis();
  digitalWrite (pwr,HIGH);
  h = 9;
  m = EEPROM.read (9);
  LimitTime =  m*60000;
  digitalWrite (irrig9,LOW);
  while(loopTime < LimitTime){      
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false;
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (29,0);
    digitalWrite (irrig9,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;
   }
 if (running == true && analogRead (irm)>220 && EEPROM.read (30)> 0) {   
  startTime = millis();
  digitalWrite (pwr,HIGH);
  h = 10;
  m = EEPROM.read (10);
  LimitTime =  m*60000;
  digitalWrite (irrig10,LOW);
  while(loopTime < LimitTime){      
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false;
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (30,0);
    digitalWrite (irrig10,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;    
   }
 if (running == true && analogRead (irm)>220 && EEPROM.read (31)> 0) {   
  startTime = millis();
  digitalWrite (pwr,HIGH);
  h = 11;
  m = EEPROM.read (11);
  LimitTime =  m*60000;
  digitalWrite (irrig11,LOW);
  while(loopTime < LimitTime){      
   s = (LimitTime - loopTime)/1000;
   delay(500); 
   loopTime = millis() - startTime; 
   }
 running = false;
    loopTime = 0;
    LimitTime = 0;
    s = 0;
    EEPROM.write (31,0);
    digitalWrite (irrig11,HIGH);
    digitalWrite (pwr,LOW);
    delay (1000);
    running = true;
  }
if (running == true){ 
  digitalWrite (pwr,HIGH);
do {
   val = analogRead (light);//ждем ночь
   if (val < 600) { flag = false; }
  
   delay(3000);
   val = analogRead (light);
   if (val > 600) { flag = true; }
   
 }
 while (flag);
 EEPROM.write (21,1);
 EEPROM.write (22,1);
 EEPROM.write (23,1);
 EEPROM.write (24,1);
 EEPROM.write (25,1);
 EEPROM.write (26,1);
 EEPROM.write (27,1);
 EEPROM.write (28,1);
 EEPROM.write (29,1);
 EEPROM.write (30,1);
 EEPROM.write (31,1);
 running = true;
}
 if (module.getButtons()==0b00000001){ 
      show (); 
      }
  else{
  module.setLEDs(0xFFFF);
  byte btn= module.getButtons(); //опрашиваем кнопки
  switch (btn){
    
  case 1: h++; //1-я добавить номер
  if (h > 11 ){
  h = 1;}
  previousMillis = currentMillis;
  delay(300);
  show();
  
  break;
    
  case 2: h--; //2 - убавить номер
  if (h < 1){
    h = 11;}
    previousMillis = currentMillis;
  delay(300);
  show();
  break;
  
 case 4: m++; //3-я добавить минут
  if (m > 59 ){
  m = 0;}
  previousMillis = currentMillis;
  delay(300);
  show();
  break;
  
  case 8: m--; //4-я убавить минут
  if (m < 0 ){
  m = 59;}
  previousMillis = currentMillis;
  delay(300);
  show();
  break;
  
  case 16: // установить значение и записать в память 5
  module.clearDisplay();
  module.setDisplayToString("SAPIS");
  previousMillis = currentMillis;
 delay(1000);
 set();
  break;

  case 32: // калибровка датчика дождя 6 действует 20 секунд
  module.clearDisplay();
  module.setDisplayToString("rAin SEt");
  previousMillis = currentMillis;
  digitalWrite (pwr,LOW);
  delay(20000);
  digitalWrite (pwr,HIGH);
  module.setLEDs(0x0000);
  module.clearDisplay();
  break;

  case 64: //старт без полива 7
  module.setLEDs(0x0000);
  module.clearDisplay();
  module.setDisplayToString("StARt");
  s =0;
  delay (1000);
 EEPROM.write (21,0);
 EEPROM.write (22,0);
 EEPROM.write (23,0);
 EEPROM.write (24,0);
 EEPROM.write (25,0);
 EEPROM.write (26,0);
 EEPROM.write (27,0);
 EEPROM.write (28,0);
 EEPROM.write (29,0);
 EEPROM.write (30,0);
 EEPROM.write (31,0);
  module.setLEDs(0x0000);
  module.clearDisplay();
  running = true;
  break;

  case 128: //старт с поливом 8
  module.setLEDs(0x0000);
  module.clearDisplay();
  module.setDisplayToString("StARt 1");
  s =0;
  delay (1000);
 EEPROM.write (21,1);
 EEPROM.write (22,1);
 EEPROM.write (23,1);
 EEPROM.write (24,1);
 EEPROM.write (25,1);
 EEPROM.write (26,1);
 EEPROM.write (27,1);
 EEPROM.write (28,1);
 EEPROM.write (29,1);
 EEPROM.write (30,1);
 EEPROM.write (31,1);
  module.setLEDs(0x0000);
  module.clearDisplay();
  running = true;
  break;
  }
   if(currentMillis - previousMillis > interval) 
    previousMillis = currentMillis;      
   module.setDisplayToString("out");
   delay (1000);
   module.setLEDs(0x0000);
  module.clearDisplay();
   running = true;
  }

}

 void timing()//для показа посекундно
 {
m = s/60;
s = s - m*60;
}  
 void show()//показ на дисплее
 {
x = h/10;
module.setDisplayDigit(x,0,0);
x = h - x*10; 
module.setDisplayDigit(x,1,0);
x = m/10;
module.setDisplayDigit(x,3,0);
x = m - x*10; 
module.setDisplayDigit(x,4,0);
x = s/10;
module.setDisplayDigit(x,6,0);
x = s - x*10; 
module.setDisplayDigit(x,7,0);
module.setDisplayToString("-",false,2);
module.setDisplayToString("-",false,5);
}

 void set()//запись в память
 {
EEPROM.write (h,m); 
x = h/10;
module.setDisplayDigit(x,0,0);
x = h - x*10; 
module.setDisplayDigit(x,1,0);
x = m/10;
module.setDisplayDigit(x,3,0);
x = m - x*10; 
module.setDisplayDigit(x,4,0);
x = s/10;
module.setDisplayDigit(x,6,0);
x = s - x*10; 
module.setDisplayDigit(x,7,0);
module.setDisplayToString("-",false,2);
module.setDisplayToString("-",false,5);
}

 

 

dmitron1036
Offline
Зарегистрирован: 10.01.2016

Молодэць!

Изобрёл велик!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

dmitron1036 пишет:

Изобрёл велик!

Ну, это гораздо лучше, чем ничего не изобрести.

grey72
Offline
Зарегистрирован: 30.01.2017

просто у меня в процессе эксплуатации выявились различные косяки(невозможность выставить ноль в поливе, невозможность калибровать датчик дождя с кнопки, да много чего еще произошло за 2 года). Изобрел же я велосипед потому, что в инете не нашел проги, удовлетворяющей моему ТЗ! Поверьте, если бы можно было тупо скопировать программу у кого-нибудь, я не стал бы заморачиваться. Можете в меня плюнуть, но двигатель прогресса все-таки жена))). сейчас стоит вопрос о прикручивании к поливалке А6 для управления с сотового телефона))). Вот отсюда и прогресс... Спасибо всем за дельные и не очень советы. Вы все очень помогаете!