| Ваш IP: 3.227.2.246 | Online(33) - гости: 19, боты: 14 | Загрузка сервера: 0.43 ::::::::::::


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

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

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

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

  • 10 полосный графический эквалайзер

    10 полосный графический эквалайзер

    Графический эквалайзер способен избирательно обрезать отдельные частоты акустического спектра. Таким образом мы можем адаптировать музыкальное произведение, характеристики пространства, под окружающую обстановку в которой прослушиваем музыкальное произведение.Схема должна быть на две части, то есть правый и левый канал. С помощью переключателя S1 мы включаем и выключаем эквалайзер, а с помощью регуляторов …Подробнее...
  • Метроном от 40 до 208 ударов в минуту

    Примечания: VT1 и VT2 обеспечивают линейную перестройку частоты таймера NE555 при изменении сопротивления VR1. VT1 обеспечивает мощность звучания похожую на стандартный метроном. Используйте 12В напряжение питания для получения достаточной мощности звучания метронома. Поверните ручку регулятора VR1 в направлении R2, установите R1 в положение соответствующую 40 ударам в минуту (для сравнения …Подробнее...
  • Стабилизатор напряжения 0…25,5 В с регулируемой защитой по току Открыть

    Этот стабилизатор напряжения предназначен для питания радиолюбительских конструкций в процессе их налаживания. Он вырабатывает постоянное стабилизированное напряжение от 0 до 25,5В, которое можно изменять с шагом 0,1В. Ток срабатывания защиты от перегрузки можно плавно менять от 0,2 до 2А. Схема устройства показана на рис 1, счетчики DD2 DD3 формируют цифровой …Подробнее...
  • Простой микрофонный усилитель

    Простой микрофонный усилитель

    Предложенная схема предназначена для конденсаторного микрофона. Ус-во питается от источника питания 9В (крона), сама схема может быть встроена в корпус микрофона, а громкоговоритель должен быть внешним. Схема состоит из каскада предварительного усиления на транзисторе 2N3904 и усилителя мощности на ОУ LM386. Схема проста в изготовлении, в настройке не нуждается.   Источник — http://www.eleccircuit.com/pre-mic-audio-amplifier-with-ic-lm386/Подробнее...
  • Стерео усилитель 2*5.8Вт на TA8208H

    Стерео усилитель 2*5.8Вт на TA8208H

    Микросхема TA8208H предназначена для использования в автомобильных усилителях мощности. В микросхеме имеются тепловая защита, защита от перенапряжения, защита от короткого замыкания выходов на шину питания и на корпус. Усилитель на базе TA8208H имеет следующие технические характеристики: Напряжение питания от +9 до +18В Номинальное напряжение питания 13,2В Ток покоя 80…145 мА …Подробнее...