| Ваш IP: 3.233.219.62 | Online(29) - гости: 10, боты: 17 | Загрузка сервера: 1.78 ::::::::::::

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

Комментарии

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

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

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

  • Блоки переключателей

    На рисунке представлена схема блока переключателей с взаимным выключением. При нажатии на кнопку SB1 на выходах 2и 3 появится лог. единица, а на выходе 1 появится логический ноль. И соответственно при нажатии SB2 или SB3 на аналогичном выходе появится лог. ноль. Переключение сигналов происходит без дребезга. При одновременном нажатии 2-х …Подробнее...
  • Автомобильные часы на светодиодах

    Схема часов показана на рисунке, часы собраны на 3-х микросхемах D1-D3. Микросхема К174ИЕ18 — содержит генератор частоты 32768Гц(с внешним кварцем), 2-а делителя на 32768 (сек) и на 60 (мин), счетчик вырабатывающий коммутирующие импульсы для динамической индикации и формирователь звукового сигнала. Цепь кв. резонатора подключена к выводам 13 и 13 D1. …Подробнее...
  • Узел задержки включения громкоговорителей

    Узел задержки включения громкоговорителей

    Эта простая схема узла задержки включения громкоговорителей, позволяет в момент включения питания усилителя мощности ЗЧ избежать щелчков в АС. Время задержки включения 5с, но изменив номинал С2 можно увеличить или уменьшить время задержки включения громкоговорителей. Элементы C1 100 мкФ 50V C2 100 мкФ 500V VD1 1N4007 VD2 1N4148 VT1 BC547 …Подробнее...
  • Моностабильный режим таймера 555

    Моностабильный режим таймера 555

    Основные режимы работы таймера 555 — это моностабильный (одновибраторный) и астабильный (мультивибраторный). Соединение схемы для работы в моностабильном режиме показано на рис.1. В моностабильном режиме для схемы требуются времязадающий резистор, конденсатор и блокировочный конденсатор, соединенный с выводами управления в качестве внешних компонентов. Когда запускающий импульс поступает на вход запуска (вывод 2) …Подробнее...
  • EEPROM.put (Arduino)

    EEPROM.put (Arduino)

    EEPROM.put()  функция записывает данные любого стандартного типа или произвольную структуру в энергонезависимую память EEPROM, иначе говоря если размер данных превышает 1 байт, нужно использовать функцию EEPROM.put(). При записи данных в EEPROM размер которых превышает 1 байт, необходимо корректный расчет адресов по которым будет производится запись, для расчета адресов используется функция sizeof(). Для …Подробнее...