4-х канальное реле времени Arduino + Android HC-06

При помощи Bluetooth модуля HC-06 и платы Arduino можно осуществить управление различными исполнительными механизмами c помощью смартфона. В данной статье речь пойдет об управлении при помощи смартфона 4-я реле. Каждому реле можно задать свое время включения и выключения, вся информация и управление реле времени осуществляется при помощи Android приложения.

Передача информации между Arduino и Android происходит при помощи Bluetooth модуля HC-06, подробнее ознакомится с модулем в статье — Arduino HC-06 (подключение, управление реле)

Пользоваться приложением очень просто, нужно просто выбрать реле и установить кнопками (+-) время включения и выключения. Так как фактически всеми реле управляет плата Arduino, то используются часы реального времени DS3231, по времени этих часов будет осуществляться переключение реле, поэтому на в Android приложении выводится показания часов реального времени.

Управление реле платой Arduino осуществляется автономно от приложения, состояние реле, время включения и выключения постоянно считываются с Arduino и передается в Andrioid приложение. Само Android приложением только показывает все текущие настройки и позволяет менять время включения и выключения реле.

#include <EEPROM.h>
#include <Wire.h>
#include <DS3231.h>//https://github.com/jarzebski/Arduino-DS3231/archive/master.zip // DS3231.zip
  DS3231 clock;
  RTCDateTime DateTime;
 
int buff[2];
int i,w,w0,rele=1;
unsigned long times;
 
int hh,mm,ss;
int sost1,sost2,sost3,sost4;
int reg1_hh,reg1_mm,reg2_hh,reg2_mm;
int reg3_hh,reg3_mm,reg4_hh,reg4_mm;
int reg5_hh,reg5_mm,reg6_hh,reg6_mm;
int reg7_hh,reg7_mm,reg8_hh,reg8_mm;

void setup(){ 
   Serial.begin(9600);
   Serial.setTimeout(10);
   Wire.begin(); clock.begin();
 // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
   pinMode(13, OUTPUT); // выход реле
   pinMode(12, OUTPUT); // выход реле
   pinMode(11, OUTPUT); // выход реле
   pinMode(10, OUTPUT); // выход реле
   reg1_hh = EEPROM.read(0);reg1_mm = EEPROM.read(1);reg2_hh = EEPROM.read(2);reg2_mm = EEPROM.read(3);
   reg3_hh = EEPROM.read(4);reg3_mm = EEPROM.read(5);reg4_hh = EEPROM.read(6);reg4_mm = EEPROM.read(7);
   reg5_hh = EEPROM.read(8);reg5_mm = EEPROM.read(9);reg6_hh = EEPROM.read(10);reg6_mm = EEPROM.read(11);
   reg7_hh = EEPROM.read(12);reg7_mm = EEPROM.read(13);reg8_hh = EEPROM.read(14);reg8_mm = EEPROM.read(15);
   Serial.println();
}
 
void loop() {
  DateTime=clock.getDateTime();
 /////// ПРИЕМ ДАННЫХ С SERIAL PORT /////////////////////////
  while (Serial.available()>0){ 
   for (i=0;i<1;i++) { 
     buff[0] = Serial.parseInt(); 
     buff[1] = Serial.parseInt();}    
     w=1;w0=1;times=millis();}
 
   ///////////// обработка команд /////////////////// 
  if(buff[0]>10&&w==1){ w=0;
  //// реле 1 ///  время вкл
  if(buff[0]==101){w0=1;reg1_hh++;if(reg1_hh>23){reg1_hh=0;}}
  if(buff[0]==102){w0=1;reg1_hh--;if(reg1_hh<0){reg1_hh=23;}}
  if(buff[0]==103){w0=1;reg1_mm++;if(reg1_mm>59){reg1_mm=0;}}
  if(buff[0]==104){w0=1;reg1_mm--;if(reg1_mm<0){reg1_mm=59;}}
  //// реле 1 ///  время выкл
  if(buff[0]==105){w0=1;reg2_hh++;if(reg2_hh>23){reg2_hh=0;}}
  if(buff[0]==106){w0=1;reg2_hh--;if(reg2_hh<0){reg2_hh=23;}}
  if(buff[0]==107){w0=1;reg2_mm++;if(reg2_mm>59){reg2_mm=0;}}
  if(buff[0]==108){w0=1;reg2_mm--;if(reg2_mm<0){reg2_mm=59;}}
 
  //// реле 2 ///  время вкл
  if(buff[0]==109){w0=1;reg3_hh++;if(reg3_hh>23){reg3_hh=0;}}
  if(buff[0]==110){w0=1;reg3_hh--;if(reg3_hh<0){reg3_hh=23;}}
  if(buff[0]==111){w0=1;reg3_mm++;if(reg3_mm>59){reg3_mm=0;}}
  if(buff[0]==112){w0=1;reg3_mm--;if(reg3_mm<0){reg3_mm=59;}}
  //// реле 2 ///  время выкл
  if(buff[0]==113){w0=1;reg4_hh++;if(reg4_hh>23){reg4_hh=0;}}
  if(buff[0]==114){w0=1;reg4_hh--;if(reg4_hh<0){reg4_hh=23;}}
  if(buff[0]==115){w0=1;reg4_mm++;if(reg4_mm>59){reg4_mm=0;}}
  if(buff[0]==116){w0=1;reg4_mm--;if(reg4_mm<0){reg4_mm=59;}}
 
  //// реле 3 ///  время вкл
  if(buff[0]==117){w0=1;reg5_hh++;if(reg5_hh>23){reg5_hh=0;}}
  if(buff[0]==118){w0=1;reg5_hh--;if(reg5_hh<0){reg5_hh=23;}}
  if(buff[0]==119){w0=1;reg5_mm++;if(reg5_mm>59){reg5_mm=0;}}
  if(buff[0]==120){w0=1;reg5_mm--;if(reg5_mm<0){reg5_mm=59;}}
  //// реле 3 ///  время выкл
  if(buff[0]==121){w0=1;reg6_hh++;if(reg6_hh>23){reg6_hh=24;}}
  if(buff[0]==122){w0=1;reg6_hh--;if(reg6_hh<0){reg6_hh=23;}}
  if(buff[0]==123){w0=1;reg6_mm++;if(reg6_mm>59){reg6_mm=0;}}
  if(buff[0]==124){w0=1;reg6_mm--;if(reg6_mm<0){reg6_mm=59;}}
 
  //// реле 4 ///  время вкл
  if(buff[0]==125){w0=1;reg7_hh++;if(reg7_hh>23){reg7_hh=0;}}
  if(buff[0]==126){w0=1;reg7_hh--;if(reg7_hh<0){reg7_hh=23;}}
  if(buff[0]==127){w0=1;reg7_mm++;if(reg7_mm>59){reg7_mm=0;}}
  if(buff[0]==128){w0=1;reg7_mm--;if(reg7_mm<0){reg7_mm=59;}}
  //// реле 4 ///  время выкл
  if(buff[0]==129){w0=1;reg8_hh++;if(reg8_hh>23){reg8_hh=0;}}
  if(buff[0]==130){w0=1;reg8_hh--;if(reg8_hh<0){reg8_hh=23;}}
  if(buff[0]==131){w0=1;reg8_mm++;if(reg8_mm>59){reg8_mm=0;}}
  if(buff[0]==132){w0=1;reg8_mm--;if(reg8_mm<0){reg8_mm=59;}}
 
  if(buff[0]==200){w0=1;rele = 1;}
  if(buff[0]==201){w0=1;rele = 2;}
  if(buff[0]==202){w0=1;rele = 3;}
  if(buff[0]==203){w0=1;rele = 4;}
 
  if(buff[0]==301){w0=1;reg1_hh=0,reg1_mm=0,reg2_hh=0,reg2_mm=0;}
  if(buff[0]==302){w0=1;reg3_hh=0,reg3_mm=0,reg4_hh=0,reg4_mm=0;}
  if(buff[0]==303){w0=1;reg5_hh=0,reg5_mm=0,reg6_hh=0,reg6_mm=0;}
  if(buff[0]==304){w0=1;reg7_hh=0,reg7_mm=0,reg8_hh=0,reg8_mm=0;}
     }   
///////////////////////////////////////////////////////////////////
hh = DateTime.hour;
mm = DateTime.minute;
ss = DateTime.second;
 
   /// отправка днный в android
   Serial.print(hh/10);Serial.print(hh%10);Serial.print(":");Serial.print(mm/10);Serial.print(mm%10);Serial.print(":");Serial.print(ss/10);Serial.print(ss%10);
 
   Serial.print("::");
   Serial.print(reg1_hh/10);Serial.print(reg1_hh%10);
   Serial.print("::");
   Serial.print(reg1_mm/10);Serial.print(reg1_mm%10);
   Serial.print("::");
   Serial.print(reg2_hh/10);Serial.print(reg2_hh%10);
   Serial.print("::");
   Serial.print(reg2_mm/10);Serial.print(reg2_mm%10);
 
   Serial.print("::");
   Serial.print(reg3_hh/10);Serial.print(reg3_hh%10);
   Serial.print("::");
   Serial.print(reg3_mm/10);Serial.print(reg3_mm%10);
   Serial.print("::");
   Serial.print(reg4_hh/10);Serial.print(reg4_hh%10);
   Serial.print("::");
   Serial.print(reg4_mm/10);Serial.print(reg4_mm%10);
 
   Serial.print("::");
   Serial.print(reg5_hh/10);Serial.print(reg5_hh%10);
   Serial.print("::");
   Serial.print(reg5_mm/10);Serial.print(reg5_mm%10);
   Serial.print("::");
   Serial.print(reg6_hh/10);Serial.print(reg6_hh%10);
   Serial.print("::");
   Serial.print(reg6_mm/10);Serial.print(reg6_mm%10);
 
   Serial.print("::");
   Serial.print(reg7_hh/10);Serial.print(reg7_hh%10);
   Serial.print("::");
   Serial.print(reg7_mm/10);Serial.print(reg7_mm%10);
   Serial.print("::");
   Serial.print(reg8_hh/10);Serial.print(reg8_hh%10);
   Serial.print("::");
   Serial.print(reg8_mm/10);Serial.print(reg8_mm%10);
 
   Serial.print("::");
   Serial.print(rele);
   Serial.print("::");
   Serial.print(sost1);
   Serial.print("::");
   Serial.print(sost2);
   Serial.print("::");
   Serial.print(sost3);
   Serial.print("::");
   Serial.println(sost4);
 
    if(w0==1&&millis()-times>10000){w0=0;
    EEPROM.update(0,reg1_hh);EEPROM.update(1,reg1_mm);EEPROM.update(2,reg2_hh);EEPROM.update(3,reg2_mm);
    EEPROM.update(4,reg3_hh);EEPROM.update(5,reg3_mm);EEPROM.update(6,reg4_hh);EEPROM.update(7,reg4_mm);
    EEPROM.update(8,reg5_hh);EEPROM.update(9,reg5_mm);EEPROM.update(10,reg6_hh);EEPROM.update(11,reg6_mm);
    EEPROM.update(12,reg7_hh);EEPROM.update(13,reg7_mm);EEPROM.update(14,reg8_hh);EEPROM.update(15,reg8_mm);
    }
 
    if(hh*100+mm>=reg1_hh*100+reg1_mm&&hh*100+mm<reg2_hh*100+reg2_mm){digitalWrite(13,HIGH);sost1=1;}else{digitalWrite(13,LOW);sost1=0;}
    if(hh*100+mm>=reg3_hh*100+reg3_mm&&hh*100+mm<reg4_hh*100+reg4_mm){digitalWrite(12,HIGH);sost2=1;}else{digitalWrite(12,LOW);sost2=0;}
    if(hh*100+mm>=reg5_hh*100+reg5_mm&&hh*100+mm<reg6_hh*100+reg6_mm){digitalWrite(11,HIGH);sost3=1;}else{digitalWrite(11,LOW);sost3=0;}
    if(hh*100+mm>=reg7_hh*100+reg7_mm&&hh*100+mm<reg8_hh*100+reg8_mm){digitalWrite(10,HIGH);sost4=1;}else{digitalWrite(10,LOW);sost4=0;}
}

Подключение:

  • Плата Arduino Nano часы реального времени DS3213 обмениваются данными на шине I2C по линиям SDA (data — данные) и SCL (clock — синхронизация). A4 = SDA, A5 = SCL
  • В скетче для подключения модулей реле используются цифровые выходы D10…D13, которые могут быть изменены
  • Подключение Bluetooth модуля HC-06 к плате Arduino Nano:
    Arduino HC-06
    RX TXD
    TX RXD
    5V VCC
    GND GND

Приложение — time_rele.apk.zip

Форум  — http://forum.rcl-radio.ru/viewtopic.php?pid=675#p675

Comments

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

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