При помощи 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
ochen otlichniy proekt. mne ochen ponravilsya . mojno li dobavit sekundi.
day Bog vam udachi,