| Ваш IP: 35.175.121.230 | Online(24) - гости: 7, боты: 17 | Загрузка сервера: 0.38 ::::::::::::

4-х канальное реле времени (Arduino)

Реле времени позволяет коммутировать 4 реле, для этого необходимо указать для каждого реле время включения и время выключения. Перед установкой времени срабатывания реле необходимо установить правильное время на часах, корректировка времени часов включается одновременным нажатием кнопок «+» и «-«, далее при нажатии кнопки «К» производится установка минут, а при повторном нажатии кнопки часов. Аналогично происходит установка времени срабатывания реле. При много кратном нажимании кнопки «К» (надо выйти из режима коррекции часов), приходит перебор параметров установки времени реле.

Параметры времени реле включаются в себя несколько повторяющихся пунктов:

  • 1 on 00:00 kor_m — установки минут для времени включения первого реле
  • 1 on 00:00 kor_h — установки часов для времени включения первого реле
  • 1 off 00:00 kor_m — установки минут для времени выключения первого реле
  • 1 off 00:00 kor_h — установки часов для времени выключения первого реле

и далее аналогично для всех реле.

При помощи кнопок «+» и «-» производится установка времени срабатывания реле.

Информация о времени и состоянии реле выводится на индикатор:

  •  19:45:00 TIME — первая строка время (установка времени)
  •     0   1   0   1    — вторая строка, индикатор состояние реле, коррекция времени реле

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
#include <MsTimer2.h>
unsigned long time0;
byte korr_time,s, m, h, m0,h0;
byte m_1_on,h_1_on,m_1_off,h_1_off;
byte m_2_on,h_2_on,m_2_off,h_2_off;
byte m_3_on,h_3_on,m_3_off,h_3_off;
byte m_4_on,h_4_on,m_4_off,h_4_off;
int kn,kn1,kn2,korr,korr_rele;
void setup()
{ 
  lcd.begin(16, 2);// LCD 16X2
  MsTimer2::set(1000, to_Timer);// задаем период 1с
  MsTimer2::start();// старт таймера
  pinMode(6,OUTPUT);//реле1
  pinMode(5,OUTPUT);//реле2
  pinMode(4,OUTPUT);//реле3
  pinMode(3,OUTPUT);//реле4
  pinMode(A3,INPUT);// кнопка К
  pinMode(A4,INPUT);// кнопка +
  pinMode(A5,INPUT);// кнопка -
}

void to_Timer(){ s++;} // отсчет 1 с // функция таймера

void loop(){
  kn=analogRead(A3);// опрос кнопки, если значение больше 600 считать его HIGH
  kn1=analogRead(A4);// опрос кнопки, если значение больше 600 считать его HIGH
  kn2=analogRead(A5);// опрос кнопки, если значение больше 600 считать его HIGH
  // ВКЛЮЧЕНИЕ КОРРЕКЦИИ ВРЕМЕНИ = НАЖАТЬ ОДНОВРЕМЕННО КНОПКИ + И -
  if(kn1>600 && kn2>600){korr_time=1;}
  if(kn>600 && korr_time==1){korr++;if(korr>=3){korr=0;korr_time=0;time0=millis();}}
  if(time0-millis()<=200){kn=0;}
/// КОРРЕКЦИЯ ВРЕМЕНИ ЧАСОВ /////////
  if(kn1>600 && korr==1){m++;}
  if(kn1>600 && korr==2){h++;}
  if(kn2>600 && korr==1){m--;if(m>60){m=0;}}
  if(kn2>600 && korr==2){h--;}
/// ОТСЧЕТ ВРЕМЕНИ ЧАСОВ ///////
  if(s > 59){s = 0;++m;} // отсчет 1 мин
  if(m > 59){m = 0;++h;} // отсчет 1 час
  if(h > 23){h = 0;}
/// УСТАНОВКА ВРЕМЕНИ СРАБАТЫВАНИЯ РЕЛЕ ////////////////////////////
  if(korr_time==0){ 
  if(kn>600){korr_rele++;if(korr_rele>=17){korr_rele=0;}}
  if(korr_rele>=1 && korr_rele<=2){m0=m_1_on;h0=h_1_on;}
  if(korr_rele>=3 && korr_rele<=4){m0=m_1_off;h0=h_1_off;}
  if(korr_rele>=5 && korr_rele<=6){m0=m_2_on;h0=h_2_on;}
  if(korr_rele>=7 && korr_rele<=8){m0=m_2_off;h0=h_2_off;}
  if(korr_rele>=9 && korr_rele<=10){m0=m_3_on;h0=h_3_on;}
  if(korr_rele>=11 && korr_rele<=12){m0=m_3_off;h0=h_3_off;}
  if(korr_rele>=13 && korr_rele<=14){m0=m_4_on;h0=h_4_on;}
  if(korr_rele>=15 && korr_rele<=16){m0=m_4_off;h0=h_4_off;}
/// КОРРЕКЦИЯ ВРЕМЕНИ РЕЛЕ /////////
  if(kn1>600 && (korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11  || korr_rele==13 || korr_rele==15)){
    m0++;if(m0>59){m0=0;}}
  if(kn1>600 && (korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16)){
    h0++;if(h0>23){h0=0;}}
  if(kn2>600 && (korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11  || korr_rele==13 || korr_rele==15)){
    m0--;if(m0>60){m0=0;}}
    if(kn2>600 && (korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16)){
    h0--;if(h0>24){h0=0;}}
  }
  // вывод информации на экран 1 строка
  lcd.setCursor(1,0); 
  if(h < 10){lcd.print("0");}
  lcd.print(h); // часы
  lcd.print(":");
  if(m < 10 ){lcd.print("0");}
  lcd.print(m); // минуты
  lcd.print(":");
  if(s < 10){lcd.print("0");}
  lcd.print(s);// секунды
  if(korr_time==1 && korr==0){ lcd.print(" kor_T");}
  if(korr==1){lcd.print(" kor_m");}
  if(korr==2){lcd.print(" kor_h");}
  if(korr==0){lcd.print(" TIME");}
  
  // вывод информации на экран 2 строка
  lcd.setCursor(1,1); 
  if(korr_rele==1 || korr_rele==2){lcd.print("1-ON  ");}
  if(korr_rele==3 || korr_rele==4){lcd.print("1-OFF ");}
  if(korr_rele==5 || korr_rele==6){lcd.print("2-ON  ");}
  if(korr_rele==7 || korr_rele==8){lcd.print("2-OFF ");}
  if(korr_rele==9 || korr_rele==10){lcd.print("3-ON  ");}
  if(korr_rele==11 || korr_rele==12){lcd.print("3-OFF ");}
  if(korr_rele==13 || korr_rele==14){lcd.print("4-ON  ");}
  if(korr_rele==15 || korr_rele==16){lcd.print("4-OFF ");}
  
  if(korr_rele>0){ 
  if(h0 < 10){lcd.print("0");}
  lcd.print(h0); // часы
  lcd.print(":");
  if(m0 < 10 ){lcd.print("0");}
  lcd.print(m0); // минуты
  }
  
  if(korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11 || korr_rele==13 || korr_rele==15){lcd.print(" k_m");}
  if(korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16 ){lcd.print(" k_h");}
  if(korr_rele>=1 && korr_rele<=2){m_1_on= m0;h_1_on=h0;}
  if(korr_rele>=3 && korr_rele<=4){m_1_off= m0;h_1_off=h0;}
  if(korr_rele>=5 && korr_rele<=6){m_2_on= m0;h_2_on=h0;}
  if(korr_rele>=7 && korr_rele<=8){m_2_off= m0;h_2_off=h0;}
  if(korr_rele>=9 && korr_rele<=10){m_3_on= m0;h_3_on=h0;}
  if(korr_rele>=11 && korr_rele<=12){m_3_off= m0;h_3_off=h0;}
  if(korr_rele>=13 && korr_rele<=14){m_4_on= m0;h_4_on=h0;}
  if(korr_rele>=15 && korr_rele<=16){m_4_off= m0;h_4_off=h0;}
  // срабатывание реле по времени
  if((h*60+m)>=(h_1_on*60+m_1_on) && (h*60+m)<(h_1_off*60+m_1_off)){digitalWrite(6,HIGH);}
  if((h*60+m)>=(h_1_off*60+m_1_off)){digitalWrite(6,LOW);}
  if((h*60+m)>=(h_2_on*60+m_2_on) && (h*60+m)<(h_2_off*60+m_2_off)){digitalWrite(5,HIGH);}
  if((h*60+m)>=(h_2_off*60+m_2_off)){digitalWrite(5,LOW);}
  if((h*60+m)>=(h_3_on*60+m_3_on) && (h*60+m)<(h_3_off*60+m_3_off)){digitalWrite(4,HIGH);}
  if((h*60+m)>=(h_3_off*60+m_3_off)){digitalWrite(4,LOW);}
  if((h*60+m)>=(h_4_on*60+m_4_on) && (h*60+m)<(h_4_off*60+m_4_off)){digitalWrite(3,HIGH);}
  if((h*60+m)>=(h_4_off*60+m_4_off)){digitalWrite(3,LOW);}
  // опрос сотояния выходов
  if(digitalRead(6)==HIGH){lcd.print("1  ");}else{lcd.print("0  ");}
  if(digitalRead(5)==HIGH){lcd.print(" 1  ");}else{lcd.print(" 0  ");}
  if(digitalRead(4)==HIGH){lcd.print(" 1  ");}else{lcd.print(" 0  ");}
  if(digitalRead(3)==HIGH){lcd.print(" 1 ");}else{lcd.print(" 0 ");}
  delay(200);
  lcd.clear();
}
Библиотека MsTimer2.h - MsTimer2.zip

Вторая версия 4-х канального реле времени функционально аналогична первой, но в ней улучшена процедура коррекции времени часов и времени реле, а так же все настройки времени реле сохраняются в энергонезависимой памяти.

#include <LiquidCrystal.h>
#include <EEPROMex.h> // https://github.com/thijse/Arduino-EEPROMEx 
// #include <EEPROM.h> - для более позних  версий Arduino IDE
#include <MsTimer2.h> // https://github.com/PaulStoffregen/MsTimer2
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
unsigned long time0;
byte korr_time,korr,korr_rele,s,m,h,i,z,h0,m0,pause,value[16];
byte m_1_on,h_1_on,m_1_off,h_1_off;
byte m_2_on,h_2_on,m_2_off,h_2_off;
byte m_3_on,h_3_on,m_3_off,h_3_off;
byte m_4_on,h_4_on,m_4_off,h_4_off;
int kn,kn1,kn2;
void setup()
{ 
  lcd.begin(16, 2);// LCD 16X2
  MsTimer2::set(1000, to_Timer);// задаем период 1с
  MsTimer2::start();// старт таймера
  Serial.begin(9600);
  pinMode(A3,INPUT);// кнопка К
  pinMode(A4,INPUT);// кнопка +
  pinMode(A5,INPUT);// кнопка -
  for(int n=0;n<16;n++){
  value[n] = EEPROM.read(n);// ЧТЕНИЕ EEPROM - ЗНАЧЕНИЯ УСТАНОВОК ВРЕМЕНИ РЕЛЕ 
  if(value[n]==255){value[n]=0;}
}
m_1_on=value[0],h_1_on=value[1],m_1_off=value[2],h_1_off=value[3];
m_2_on=value[4],h_2_on=value[5],m_2_off=value[6],h_2_off=value[7];
m_3_on=value[8],h_3_on=value[9],m_3_off=value[10],h_3_off=value[11];
m_4_on=value[12],h_4_on=value[13],m_4_off=value[14],h_4_off=value[15];
}

void to_Timer(){ if(korr_time==0){s++;}else{s=0;} /// ОТСЧЕТ ВРЕМЕНИ ЧАСОВ ///////
  if(s > 59){s = 0;m++;} // отсчет 1 мин
  if(m > 59){m = 0;h++;} // отсчет 1 час
  if(h > 23){h = 0;}} 
void korr_Time(){  kn=analogRead(A3); kn1=analogRead(A4); kn2=analogRead(A5);
  // ВКЛЮЧЕНИЕ КОРРЕКЦИИ ВРЕМЕНИ = НАЖАТЬ ОДНОВРЕМЕННО КНОПКИ + И -
  if(kn1>600 && kn2>600){korr_time=1;korr=1;}
  if(kn>600 && korr_time==1 && korr<=2){korr++;if(korr>=3){korr=0;korr_time=0;pause=s+1;if(s<pause){kn=0;}}}
  /// КОРРЕКЦИЯ ВРЕМЕНИ ЧАСОВ /////////
  if(kn1>600 && korr==1){m++;}
  if(kn1>600 && korr==2){h++;}
  if(kn2>600 && korr==1){m--;if(m>60){m=0;}}
  if(kn2>600 && korr==2){h--;}}

void loop(){
korr_Time();

/// УСТАНОВКА ВРЕМЕНИ СРАБАТЫВАНИЯ РЕЛЕ ////////////////////////////
  if(korr_time==0){ 
  if(kn>600){korr_rele++;if(korr_rele>=17){korr_rele=0;}}
  if(korr_rele>=1 && korr_rele<=2){m0=m_1_on;h0=h_1_on;}
  if(korr_rele>=3 && korr_rele<=4){m0=m_1_off;h0=h_1_off;}
  if(korr_rele>=5 && korr_rele<=6){m0=m_2_on;h0=h_2_on;}
  if(korr_rele>=7 && korr_rele<=8){m0=m_2_off;h0=h_2_off;}
  if(korr_rele>=9 && korr_rele<=10){m0=m_3_on;h0=h_3_on;}
  if(korr_rele>=11 && korr_rele<=12){m0=m_3_off;h0=h_3_off;}
  if(korr_rele>=13 && korr_rele<=14){m0=m_4_on;h0=h_4_on;}
  if(korr_rele>=15 && korr_rele<=16){m0=m_4_off;h0=h_4_off;}
/// КОРРЕКЦИЯ ВРЕМЕНИ РЕЛЕ /////////
  if(kn1>600 && (korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11  || korr_rele==13 || korr_rele==15)){
    m0++;if(m0>59){m0=0;}}
  if(kn1>600 && (korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16)){
    h0++;if(h0>23){h0=0;}}
  if(kn2>600 && (korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11  || korr_rele==13 || korr_rele==15)){
    m0--;if(m0>60){m0=0;}}
    if(kn2>600 && (korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16)){
    h0--;if(h0>24){h0=0;}}
  }

  // вывод информации на экран 1 строка
  lcd.setCursor(1,0);
  if(korr==2 && i==1){lcd.print("  ");}else{ 
  if(h < 10){lcd.print("0");}
  lcd.print(h);} // часы
  lcd.print(":");
  if(korr==1 && i==1){lcd.print("  ");}else{
  if(m < 10 ){lcd.print("0");}
  lcd.print(m);} // минуты
  lcd.print(":");
  if(s < 10){lcd.print("0");}
  lcd.print(s);// секунды
  if(korr==0){lcd.print(" TIME");}
  
   // вывод информации на экран 2 строка
  lcd.setCursor(1,1); 
  if(korr_rele>=1 && korr_rele<=4){lcd.print("1 ");}
  if(korr_rele>=5 && korr_rele<=8){lcd.print("2 ");}
  if(korr_rele>=9 && korr_rele<=12){lcd.print("3 ");}
  if(korr_rele>=13 && korr_rele<=16){lcd.print("4 ");}
  if(korr_rele==0) {  // опрос сотояния выходов
  if(digitalRead(6)==HIGH){lcd.print("1  ");}else{lcd.print("0  ");}
  if(digitalRead(5)==HIGH){lcd.print(" 1  ");}else{lcd.print(" 0  ");}
  if(digitalRead(4)==HIGH){lcd.print(" 1  ");}else{lcd.print(" 0  ");}
  if(digitalRead(3)==HIGH){lcd.print(" 1 ");}else{lcd.print(" 0 ");}}
  
  if(korr_rele>0){ z=0;
  if((korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16) && i==1){lcd.print("  ");}else{ 
  if(h0 < 10){lcd.print("0");}
  lcd.print(h0);} // часы
  lcd.print(":");
  if((korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11 || korr_rele==13 || korr_rele==15) && i==1){lcd.print("  ");}else{ 
  if(m0 < 10 ){lcd.print("0");}
  lcd.print(m0);} // минуты
  }
  
  if(korr_rele==1 || korr_rele==2 || korr_rele==5 || korr_rele==6 || korr_rele==9 || korr_rele==10 || korr_rele==13 || korr_rele==14){lcd.print(" ON     ");}
  if(korr_rele==3 || korr_rele==4 || korr_rele==7 || korr_rele==8 || korr_rele==11 || korr_rele==12 || korr_rele==15 || korr_rele==16 ){lcd.print(" OFF   ");}
  if(korr_rele>=1 && korr_rele<=2){m_1_on= m0;h_1_on=h0;}
  if(korr_rele>=3 && korr_rele<=4){m_1_off= m0;h_1_off=h0;}
  if(korr_rele>=5 && korr_rele<=6){m_2_on= m0;h_2_on=h0;}
  if(korr_rele>=7 && korr_rele<=8){m_2_off= m0;h_2_off=h0;}
  if(korr_rele>=9 && korr_rele<=10){m_3_on= m0;h_3_on=h0;}
  if(korr_rele>=11 && korr_rele<=12){m_3_off= m0;h_3_off=h0;}
  if(korr_rele>=13 && korr_rele<=14){m_4_on= m0;h_4_on=h0;}
  if(korr_rele>=15 && korr_rele<=16){m_4_off= m0;h_4_off=h0;}
  
  if(korr_rele==0 && z==0){z=1; // запись в EEPROM КАЖДЫЙ РАЗ ПРИ ВЫХОДЕ ИЗ РЕЖИМА РЕДАКТИРОВАНИЯ ВРЕМЕНИ РЕЛЕ
  // ДЛЯ ЗАПИСИ ИСПОЛЬЗУЕТСЯ update вместо write ДЛЯ ЭКОНОМИИ РЕСУРСА ЗАПИСИ EEPROM
EEPROM.update(0,m_1_on);EEPROM.update(1,h_1_on);EEPROM.update(2,m_1_off);EEPROM.update(3,h_1_off);
EEPROM.update(4,m_2_on);EEPROM.update(5,h_2_on);EEPROM.update(6,m_2_off);EEPROM.update(7,h_2_off);
EEPROM.update(8,m_3_on);EEPROM.update(9,h_3_on);EEPROM.update(10,m_3_off);EEPROM.update(11,h_3_off);
EEPROM.update(12,m_4_on);EEPROM.update(13,h_4_on);EEPROM.update(14,m_4_off);EEPROM.update(15,h_4_off);
}
  
  // срабатывание реле по времени
  if((h*60+m)>=(h_1_on*60+m_1_on) && (h*60+m)<(h_1_off*60+m_1_off)){digitalWrite(6,HIGH);}
  if((h*60+m)>=(h_1_off*60+m_1_off)){digitalWrite(6,LOW);}
  if((h*60+m)>=(h_2_on*60+m_2_on) && (h*60+m)<(h_2_off*60+m_2_off)){digitalWrite(5,HIGH);}
  if((h*60+m)>=(h_2_off*60+m_2_off)){digitalWrite(5,LOW);}
  if((h*60+m)>=(h_3_on*60+m_3_on) && (h*60+m)<(h_3_off*60+m_3_off)){digitalWrite(4,HIGH);}
  if((h*60+m)>=(h_3_off*60+m_3_off)){digitalWrite(4,LOW);}
  if((h*60+m)>=(h_4_on*60+m_4_on) && (h*60+m)<(h_4_off*60+m_4_off)){digitalWrite(3,HIGH);}
  if((h*60+m)>=(h_4_off*60+m_4_off)){digitalWrite(3,LOW);}

  i++;if(i==3){i=0;}
  delay(200);
  
  lcd.clear();
}

Комментарии

  • shinkorenko.m:

    Здравствуйте!
    Как добавить часы DS1307 чтобы при отключении питания время сохранялось?

  • shinkorenko.m:

    Мне понравился 4-х канальное реле времени (Arduino),в статье второй скеч. Я под него уже печатку нарисовал.
    Нужно убрать с дисплея функцию 00:00:00 on, а 00^00^00 off оставить. Чтобы таймер выключался по установленному времени.

    • liman28:

      Нужно очень много правок вносить, проще написать новый скетч. Если дадите время я соберу макет и напишу новый скетч. Можно встроить часы реального времени, это даже упростит скетч. Но DS1307 у меня нет, есть ds3231. Просто напишите как должно работать реле времени, число каналов.

  • shinkorenko.m:

    Реле времени мне нужно для эл. плиты. Описание как в статье второй скеч.
    Показывает текущее время,показывает настройки таймера в режиме 00:00:00 OFF
    по достижению установленного времени таймер отключается, В EEPROM сохранять не нужно. Пять каналов.
    Сам писать прошивки не могу, только учусь.
    В файле дописал пятый канал и убрал сохранение в EEPOM.Поменял библиотеку дисплея на расифицированую.
    Скеч рабочий. В этом скече нужно убрать 00:00:00 ВКЛ.(настройка включения таймера).
    Ненужные строчки закоментировал.

    #include
    //#include
    LiquidCrystalRus lcd(7, 8, 12, 11, 10, 9);// RS,E,D4,D5,D6,D7
    #include // https://github.com/PaulStoffregen/MsTimer2
    //#include // https://github.com/thijse/Arduino-EEPROMEx
    //#include — для более позних версий Arduino IDE

    unsigned long time0;
    byte korr_time,korr,korr_rele,s,m,h,i,z,h0,m0,pause,value[16];
    byte m_1_on,h_1_on,m_1_off,h_1_off;
    byte m_2_on,h_2_on,m_2_off,h_2_off;
    byte m_3_on,h_3_on,m_3_off,h_3_off;
    byte m_4_on,h_4_on,m_4_off,h_4_off;
    byte m_5_on,h_5_on,m_5_off,h_5_off;
    int kn,kn1,kn2;
    void setup()
    {
    lcd.begin(16, 2);// LCD 16X2
    MsTimer2::set(1000, to_Timer);// задаем период 1с
    MsTimer2::start();// старт таймера
    pinMode(6,OUTPUT); //Реле1
    pinMode(5,OUTPUT); //Реле2
    pinMode(4,OUTPUT); //Реле3
    pinMode(3,OUTPUT); //Реле4
    pinMode(2,OUTPUT); //Реле5
    Serial.begin(9600);
    pinMode(A3,INPUT);// кнопка К
    pinMode(A4,INPUT);// кнопка +
    pinMode(A5,INPUT);// кнопка —
    for(int n=0;n 59){s = 0;m++;} // отсчет 1 мин
    if(m > 59){m = 0;h++;} // отсчет 1 час
    if(h > 23){h = 0;}}
    void korr_Time(){ kn=analogRead(A3); kn1=analogRead(A4); kn2=analogRead(A5);
    // ВКЛЮЧЕНИЕ КОРРЕКЦИИ ВРЕМЕНИ = НАЖАТЬ ОДНОВРЕМЕННО КНОПКИ + И —
    if(kn1>600 && kn2>600){korr_time=1;korr=1;}
    if(kn>600 && korr_time==1 && korr=3){korr=0;korr_time=0;pause=s+1;if(s600 && korr==1){m++;}
    if(kn1>600 && korr==2){h++;}
    if(kn2>600 && korr==1){m—;if(m>60){m=0;}}
    if(kn2>600 && korr==2){h—;}}

    void loop(){
    korr_Time();

    /// УСТАНОВКА ВРЕМЕНИ СРАБАТЫВАНИЯ РЕЛЕ ////////////////////////////
    if(korr_time==0){
    if(kn>600){korr_rele++;if(korr_rele>=21){korr_rele=0;}}
    if(korr_rele>=1 && korr_rele=3 && korr_rele=5 && korr_rele=7 && korr_rele=9 && korr_rele=11 && korr_rele=13 && korr_rele=15 && korr_rele=17 && korr_rele=19 && korr_rele600 && (korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11 || korr_rele==13 || korr_rele==15 || korr_rele==17 || korr_rele==19)){
    m0++;if(m0>59){m0=0;}}
    if(kn1>600 && (korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16 || korr_rele==18 || korr_rele==20)){
    h0++;if(h0>23){h0=0;}}
    if(kn2>600 && (korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11 || korr_rele==13 || korr_rele==15 || korr_rele==17 || korr_rele==19)){
    m0—;if(m0>60){m0=0;}}
    if(kn2>600 && (korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16 || korr_rele==18 || korr_rele==20)){
    h0—;if(h0>24){h0=0;}}
    }

    // вывод информации на экран 1 строка
    lcd.setCursor(1,0);
    if(korr==2 && i==1){lcd.print(» «);}else{
    if(h < 10){lcd.print("0");}
    lcd.print(h);} // часы
    lcd.print(":");
    if(korr==1 && i==1){lcd.print(" ");}else{
    if(m < 10 ){lcd.print("0");}
    lcd.print(m);} // минуты
    lcd.print(":");
    if(s =1 && korr_rele=5 && korr_rele=9 && korr_rele=13 && korr_rele=17 && korr_rele0){ z=0;
    if((korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16 || korr_rele==18 || korr_rele==20) && i==1){lcd.print(» «);}else{
    if(h0 < 10){lcd.print("0");}
    lcd.print(h0);} // часы
    lcd.print(":");
    if((korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11 || korr_rele==13 || korr_rele==15 || korr_rele==17 || korr_rele==19) && i==1){lcd.print(" ");}else{
    if(m0 =1 && korr_rele=3 && korr_rele=5 && korr_rele=7 && korr_rele=9 && korr_rele=11 && korr_rele=13 && korr_rele=15 && korr_rele=17 && korr_rele=19 && korr_rele=(h_1_on*60+m_1_on) && (h*60+m)=(h_1_off*60+m_1_off)){digitalWrite(6,LOW);}
    if((h*60+m)>=(h_2_on*60+m_2_on) && (h*60+m)=(h_2_off*60+m_2_off)){digitalWrite(5,LOW);}
    if((h*60+m)>=(h_3_on*60+m_3_on) && (h*60+m)=(h_3_off*60+m_3_off)){digitalWrite(4,LOW);}
    if((h*60+m)>=(h_4_on*60+m_4_on) && (h*60+m)=(h_4_off*60+m_4_off)){digitalWrite(3,LOW);}
    if((h*60+m)>=(h_5_on*60+m_5_on) && (h*60+m)=(h_5_off*60+m_5_off)){digitalWrite(2,LOW);}

    i++;if(i==3){i=0;}
    delay(200);

    lcd.clear();
    }

    • liman28:

      При каком условии реле включено, в момент подачи питания? То есть часы в реле не нужны, нужен таймер?

    • shinkorenko.m:

      скеч закачал с ошибкой.
      Вот исправленный.

      #include
      //#include
      LiquidCrystalRus lcd(7, 8, 12, 11, 10, 9);// RS,E,D4,D5,D6,D7
      #include // https://github.com/PaulStoffregen/MsTimer2
      //#include // https://github.com/thijse/Arduino-EEPROMEx
      //#include — для более позних версий Arduino IDE

      unsigned long time0;
      byte korr_time,korr,korr_rele,s,m,h,i,z,h0,m0,pause,value[16];
      byte m_1_on,h_1_on,m_1_off,h_1_off;
      byte m_2_on,h_2_on,m_2_off,h_2_off;
      byte m_3_on,h_3_on,m_3_off,h_3_off;
      byte m_4_on,h_4_on,m_4_off,h_4_off;
      byte m_5_on,h_5_on,m_5_off,h_5_off;
      int kn,kn1,kn2;
      void setup()
      {
      lcd.begin(16, 2);// LCD 16X2
      MsTimer2::set(1000, to_Timer);// задаем период 1с
      MsTimer2::start();// старт таймера
      pinMode(6,OUTPUT); //Реле1
      pinMode(5,OUTPUT); //Реле2
      pinMode(4,OUTPUT); //Реле3
      pinMode(3,OUTPUT); //Реле4
      pinMode(2,OUTPUT); //Реле5
      Serial.begin(9600);
      pinMode(A3,INPUT);// кнопка К
      pinMode(A4,INPUT);// кнопка +
      pinMode(A5,INPUT);// кнопка —
      for(int n=0;n 59){s = 0;m++;} // отсчет 1 мин
      if(m > 59){m = 0;h++;} // отсчет 1 час
      if(h > 23){h = 0;}}
      void korr_Time(){ kn=analogRead(A3); kn1=analogRead(A4); kn2=analogRead(A5);
      // ВКЛЮЧЕНИЕ КОРРЕКЦИИ ВРЕМЕНИ = НАЖАТЬ ОДНОВРЕМЕННО КНОПКИ + И —
      if(kn1>600 && kn2>600){korr_time=1;korr=1;}
      if(kn>600 && korr_time==1 && korr=3){korr=0;korr_time=0;pause=s+1;if(s600 && korr==1){m++;}
      if(kn1>600 && korr==2){h++;}
      if(kn2>600 && korr==1){m—;if(m>60){m=0;}}
      if(kn2>600 && korr==2){h—;}}

      void loop(){
      korr_Time();

      /// УСТАНОВКА ВРЕМЕНИ СРАБАТЫВАНИЯ РЕЛЕ ////////////////////////////
      if(korr_time==0){
      if(kn>600){korr_rele++;if(korr_rele>=21){korr_rele=0;}}
      if(korr_rele>=1 && korr_rele=3 && korr_rele=5 && korr_rele=7 && korr_rele=9 && korr_rele=11 && korr_rele=13 && korr_rele=15 && korr_rele=17 && korr_rele=19 && korr_rele600 && (korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11 || korr_rele==13 || korr_rele==15 || korr_rele==17 || korr_rele==19)){
      m0++;if(m0>59){m0=0;}}
      if(kn1>600 && (korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16 || korr_rele==18 || korr_rele==20)){
      h0++;if(h0>23){h0=0;}}
      if(kn2>600 && (korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11 || korr_rele==13 || korr_rele==15 || korr_rele==17 || korr_rele==19)){
      m0—;if(m0>60){m0=0;}}
      if(kn2>600 && (korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16 || korr_rele==18 || korr_rele==20)){
      h0—;if(h0>24){h0=0;}}
      }

      // вывод информации на экран 1 строка
      lcd.setCursor(1,0);
      if(korr==2 && i==1){lcd.print(» «);}else{
      if(h < 10){lcd.print("0");}
      lcd.print(h);} // часы
      lcd.print(":");
      if(korr==1 && i==1){lcd.print(" ");}else{
      if(m < 10 ){lcd.print("0");}
      lcd.print(m);} // минуты
      lcd.print(":");
      if(s =1 && korr_rele=5 && korr_rele=9 && korr_rele=13 && korr_rele=17 && korr_rele0){ z=0;
      if((korr_rele==2 || korr_rele==4 || korr_rele==6 || korr_rele==8 || korr_rele==10 || korr_rele==12 || korr_rele==14 || korr_rele==16 || korr_rele==18 || korr_rele==20) && i==1){lcd.print(» «);}else{
      if(h0 < 10){lcd.print("0");}
      lcd.print(h0);} // часы
      lcd.print(":");
      if((korr_rele==1 || korr_rele==3 || korr_rele==5 || korr_rele==7 || korr_rele==9 || korr_rele==11 || korr_rele==13 || korr_rele==15 || korr_rele==17 || korr_rele==19) && i==1){lcd.print(" ");}else{
      if(m0 =1 && korr_rele=3 && korr_rele=5 && korr_rele=7 && korr_rele=9 && korr_rele=11 && korr_rele=13 && korr_rele=15 && korr_rele=17 && korr_rele=19 && korr_rele=(h_1_on*60+m_1_on) && (h*60+m)=(h_1_off*60+m_1_off)){digitalWrite(6,LOW);}
      if((h*60+m)>=(h_2_on*60+m_2_on) && (h*60+m)=(h_2_off*60+m_2_off)){digitalWrite(5,LOW);}
      if((h*60+m)>=(h_3_on*60+m_3_on) && (h*60+m)=(h_3_off*60+m_3_off)){digitalWrite(4,LOW);}
      if((h*60+m)>=(h_4_on*60+m_4_on) && (h*60+m)=(h_4_off*60+m_4_off)){digitalWrite(3,LOW);}
      if((h*60+m)>=(h_5_on*60+m_5_on) && (h*60+m)=(h_5_off*60+m_5_off)){digitalWrite(2,LOW);}

      i++;if(i==3){i=0;}
      delay(200);

      lcd.clear();
      }

  • shinkorenko.m:

    нужны часы и таймер. Реле включается не сразу после подачи питания, а как установлю время отключения ВЫКЛ. При выходе из настройки канала, включается реле когда время выключения подошло реле выключается.Время включения по умолчанию 00:00:00.Если хоть на минуту бедет больше время выключения (00:02:00 выкл), то-есть реле должно включится и через 2 минуты выключится.
    Может проще описать подробно алгоритм раоты таймера ?

    • liman28:

      То есть нужны часы и время выключения отсчетом которого являются часы, реле не активно пока его настройки не были изменены, если реле сработало то в тоже время в следующие сутки оно будет не активно, а если зайти в его настройки то реле снова станет активным?
      Я правильно все понял?

  • shinkorenko.m:

    Реле активно будет , когда будет установлено время выключения.

  • shinkorenko.m:

    Это 5 канальное реле времени.

  • shinkorenko.m:

    Русифицированую библиотеку #include скачивал с //https://github.com/mk90/LiquidCrystalRus

  • shinkorenko.m:

    Русифицированую библиотеку LiquidCrystalRus скачивал с https://github.com/mk90/LiquidCrystalRus

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Регулятор яркости фар

    На элементах DD1.1 DD1.2 собран генератор с регулируемой скважностью, которую можно изменять при помощи резистора R1 от 1 до 50. Далее импульсы поступают на транзисторы и после них на лампы накаливания. Изменяя скаважность можно регулировать мощность свечения ламп накаливания. SA1 совмещен с резистором R1, SA1 служит выключателем питания. Для включения …Подробнее...
  • Цикл do … while (Arduino)

    Цикл do работает аналогично циклу while, за исключением того, что условие проверяется в конце цикла, таким образом, цикл do будет всегда выполняться хотя бы раз. Пример использования: void setup(){ Serial.begin(9600); pinMode(A1,INPUT); } void loop(){ int a = analogRead(A1); do{ if(a < 500){ Serial.println(a); } delay(100); } while(a < 1000); } Например на аналоговый вход подаем меняющееся напряжение, …Подробнее...
  • Двухобъектный цифровой термометр

    Двухобъектный цифровой термометр

    Для измерения температуры воздуха в помещении и вне его необходимо 2  термометра, данное устройство позволяет измерять температуру двумя датчиками и одним цифровым термометром, причем как в ручном режиме так и автоматическом. Основа прибора АЦП двойного интегрирования на КР572ПВ5 и интегральных датчиков К1019ЕМ1. Питание АЦП осуществляется от биполярного источника. Положительное напряжение …Подробнее...
  • wi-fi модуль NodeMcu v3 с чипом ESP8266 (ESP-12e)(Удаленное управление нагрузкой)

    wi-fi модуль NodeMcu v3 с чипом ESP8266 (ESP-12e)(Удаленное управление нагрузкой)

    Используя модуль NodeMcu v3 с чипом ESP8266 можно управлять устройствами из Интернета (так же локально), а точнее подключить к выходам модуля несколько реле которые будут включать или отключать нагрузку. Если Вы не знаете как прошить модуль NodeMcu v3, то ознакомьтесь со следующей статьей wi-fi модуль NodeMcu v3 с чипом ESP8266 (ESP-12e)(Arduino IDE). Загрузите …Подробнее...
  • Стерео усилитель 2*12Вт на TDA7263М

    Стерео усилитель 2*12Вт на TDA7263М

    Стерео усилитель на базе микросхемы TDA7263М  относится к классу АВ и используется в основном в бытовой HI-FI технике. Микросхема имеет защиту от КЗ по переменному току, снабжена тепловой защитой: температура срабатывания тепловой защиты 145°С. TDA7263M имеет в своем составе систему MUTE которая позволяет избежать шумов и щелчков громкоговорителей в момент …Подробнее...