Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.
блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.
Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.
блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.
Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.
выкладываю рабочий код работающего автомата полива, сделана калибровка датчика дождя в течении 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);
}
просто у меня в процессе эксплуатации выявились различные косяки(невозможность выставить ноль в поливе, невозможность калибровать датчик дождя с кнопки, да много чего еще произошло за 2 года). Изобрел же я велосипед потому, что в инете не нашел проги, удовлетворяющей моему ТЗ! Поверьте, если бы можно было тупо скопировать программу у кого-нибудь, я не стал бы заморачиваться. Можете в меня плюнуть, но двигатель прогресса все-таки жена))). сейчас стоит вопрос о прикручивании к поливалке А6 для управления с сотового телефона))). Вот отсюда и прогресс... Спасибо всем за дельные и не очень советы. Вы все очень помогаете!
Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.
блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.
Для особо одаренных, капельным поливом поливают и круглосуточно. Если сумеете летом найти утром росу в той же Астраханской губернии, вам Нобелевку выдадут. Если сумеете представить обожженые корни от капельного полива, вам за званием академика в Сельхозакадемию.
блин! не поливают кактусы круглосуточно - в постоянно мокрой земле они сгниют нафиг.
Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.
Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.
я за траву в шкафу.
Та мне на кактусы вообще насрать, я за помидоры с огурцами и не балконе.
я за траву в шкафу.
А это добро нам без надобности. Мне для веселья ректификатора хватает.
Мне для веселья ректификатора хватает.
кому и кобыла - невеста.
Мне для веселья ректификатора хватает.
кому и кобыла - невеста.
Уху, жеребцу.
выкладываю рабочий код работающего автомата полива, сделана калибровка датчика дождя в течении 20 секунд, старт с поливом, без полива. Поливает раз в сутки утром, капельно. Сделал возможность выставления 0 во времени полива.
Молодэць!
Изобрёл велик!
Изобрёл велик!
Ну, это гораздо лучше, чем ничего не изобрести.
просто у меня в процессе эксплуатации выявились различные косяки(невозможность выставить ноль в поливе, невозможность калибровать датчик дождя с кнопки, да много чего еще произошло за 2 года). Изобрел же я велосипед потому, что в инете не нашел проги, удовлетворяющей моему ТЗ! Поверьте, если бы можно было тупо скопировать программу у кого-нибудь, я не стал бы заморачиваться. Можете в меня плюнуть, но двигатель прогресса все-таки жена))). сейчас стоит вопрос о прикручивании к поливалке А6 для управления с сотового телефона))). Вот отсюда и прогресс... Спасибо всем за дельные и не очень советы. Вы все очень помогаете!