При помощи этого GSM-реле вы сможете включить любую нагрузку, рассчитанную на 220 В и мощностью не более 2 кВт, в любом уголке Земли, где есть сотовая сеть.

image

Данное устройство управляется arduino nano через gsm модуль SIM800L. Функциональная схема со списком комплектующих приведена ниже. Оно может работать как от встроенных аккумуляторов, так и от сети 220 В. При работе от сети нагрузка может потреблять до 2 кВт электроэнергии. От аккумуляторов, максимальная выходная мощность 300 Вт.

image
Коротко о схеме.

В этом устройстве можно выделить 4 блока:

  • блок инвертора
  • блок контроллера и батарей
  • блок бесперебойника
  • блок управления.

Блок инвертора — это обычный автомобильный инвертор мощностью 500т. Подойдет и с меньшей мощностью, но и максимальная выходная мощность тоже уменьшиться пропорционально мощности инвертора.

Блок контроллера и батарей — это обычный дешевый драйвер BMS S3 рассчитанный на подключение 3х литиий ионных батарей. Батареи стоят высокотоковые. Они могут выдавать ток в 35 ампер. Если у вас меньшая мощность, то можно и купить более дешевые аккумуляторы с меньшим максимальным током.

Блок бесперебойника выполнен на транзисторе VT3, VD4, R4, R5, R3. Катод стабилитрона VD4 подсоединен на прямую к блоку питания и при подаче питания транзистор VT3 открывается. После его открытия на все входы реле приходит отрицательный потенциал и реле переключаются в режим питания схемы от блока питания. Важная особенность готовых релейных сборок: некоторые из них работают, когда на вход приходит поожительный потенциал, а некоторые при отрицательном. Если у вас первый вариант, то вам нужно R3 переставить в разрыв эмитера транзистора VT3 и соеденить вход реле с эмитером этого же транзистора.

Блок управления — собран на модуле SIM800 и arduino nano.



Так выглядит собранная схема


Так выглядит в упакованном состояние






Чтобы устройство начало принимать смс с вашего телефона нужно в переменную your_phone записать свой номер телефона. Так же к ардуино возможно подключить LCD дисплей, например wh1601 или wh0802, но при этом нужно будет разкоментировать все строчки cнадписью lcd.

Код
char your_phone = "+79148389933";

#include <SoftwareSerial.h>                                          // Подключаем библиотеку SoftwareSerial для общения с модулем по программной шине UART
SoftwareSerial softSerial(8,9);                                      // Создаём объект softSerial указывая выводы RX, TX (можно указывать любые выводы Arduino UNO)
// include the library code:
//#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
//const int rs = 12, en = 11, d4 = 5, d5 = 6, d6 = 7, d7 = 10;
//LiquidCrystal lcd(rs, en, d4, d5, d6, d7);                                                               // В данном случае вывод TX модуля подключается к выводу 2 Arduino, а вывод RX модуля к выводу 3 Arduino.
//  Инициируем работу шин UART с указанием скоростей обеих шин:      //
String buf2,buf3;
int g=0;

    String cmd1;
void setup(){                                                        //
init_port();
      // lcd.begin(16, 2);
  // Print a message to the LCD.
  //lcd.clear();
  //  lcd.setCursor(0, 0);
 /// lcd.print("VKL");
 // lcd.setCursor(0, 1);
 /// lcd.print("ZHDITE");

        /// init_port();// Инициируем передачу данных по аппаратной  шине UART на скорости  9600 (между Arduino и компьютером)
    softSerial.begin(9600);                                         // Инициируем передачу данных по программной шине UART на скорости 38400 (между модулем и Arduino)
        Serial.begin(9600);   
        delay(30000);

  //  cmd1 ="AT+CMGF=1\r\n";
  softSerial.print("AT+CMGF=1\r\n"); 
  ///  print_lcd(cmd1);
delay(1000);
       dellAllSMS();  
//  cmd1 ="AT+CMGDA=\"DEL ALL\"\r\n";
    // print_lcd(cmd1);
//cmd1="AT+CPAS";
  ///   print_lcd(cmd1);
}                                                                    //
      
   
      char c;  
      int m=0;
      int i=0;//
      int n=0;
//  Выполняем ретрансляцию:                                          // Всё что пришло с модуля - отправляем компьютеру, а всё что пришло с компьютера - отправляем модулю

void dellAllSMS(){
  /* This deletes all sms in memory  
  
  */

  softSerial.print("AT+CMGDA=\"DEL ALL\"\r\n"); // set sms to text mode

delay(3000);
}
void pin_on_setb()
{
 digitalWrite(2,1);
  digitalWrite(13,1);
}
void pin_off_setb()
{
 digitalWrite(2,0);
  digitalWrite(13,0);
}
void pin_on_inv()
{
 digitalWrite(3,1);
  //  digitalWrite(13,1);
}
void pin_off_inv()
{
 digitalWrite(3,0);
   // digitalWrite(13,0);
}
void init_port()
{
pinMode(2,1);
pinMode(3,1);
    pinMode(13,1);
}
String readData(){
   // this function just reads the raw data
   uint16_t timeout=0;
   while (!softSerial.available() && timeout<10000)
   {
     delay(10);
     timeout++;
   }
   if(softSerial.available())
   {
     String output = softSerial.readString();
     //if(DEBUG)
    ///   Serial.println(output);
     return output;
   }
 }
String buf, bufferIndex; 
int tempIndex=0;
int messageIndex;
int prev=0;
int power=0;
void loop(){                                                         //
   /* if(softSerial.available()){    Serial.write(softSerial.read());} // Передаём данные из программной шины UART в аппаратную  (от модуля     через Arduino к компьютеру)
    if(    Serial.available()){softSerial.write(    Serial.read());} // Передаём данные из аппаратной  шины UART в программную (от компьютера через Arduino к модулю    )*/

         //   lcd.clear();
     //  lcd.setCursor(0, 0);
     //  lcd.print("Nagruzka");
            //  lcd.setCursor(0, 1);
           //   if (power==1)
          //    {
         //              lcd.print("VKL");
     //         }
         //     else {lcd.print("VIKL");}
      softSerial.print(F("AT+CMGL=\"ALL\",0"));
  softSerial.print("\r");
  buf = readData();
 // Serial.println(buf);
tempIndex = buf.lastIndexOf("+CMGL: ");
tempIndex = tempIndex + 6;
    bufferIndex = buf.substring(tempIndex);
    bufferIndex = bufferIndex.substring(1,(bufferIndex.indexOf(",")));
    messageIndex = bufferIndex.toInt();
    ///Serial.println(messageIndex);
    if(prev!=messageIndex)
    {
      tempIndex = buf.lastIndexOf(your_phone);
     //  lcd.clear();
     //  lcd.setCursor(0, 0);
     //  lcd.print("SMS READ");

     if((digitalRead(4))&&(tempIndex!=-1))
     {
      pin_on_inv();
      delay(2000);
      pin_off_inv();
     // i=1;
   //  power=1;
     }
     else 
     {
     pin_on_setb();
           delay(2000);
     pin_off_setb();
  //   i=1;
 //         power=1;
     }
        //    send_sms(number3);

     
    prev++;
    
    }
if(messageIndex>=2)
{
 dellAllSMS();
// lcd.clear();
     //   lcd.setCursor(0, 0);
     //  lcd.print("SMS READ");
     //   lcd.setCursor(0, 1);
// lcd.print("SMS DEL");
 //  cmd1 ="AT+CMGDA=\"DEL ALL\"\r\n";
   //  print_lcd(cmd1);
prev=0;
}
delay(10000);

}


STL файл для печати коробки можно найти тут.

Видео работы:

Комментарии (21)


  1. lelik363
    18.10.2019 08:34

    Перфорация в корпусе не помешала бы.


  1. KirmiziTas
    18.10.2019 08:48

    Не хочу никого обидеть, но готовое решение на одном известном сайте, название которого начинается на А, стоит до двух тысяч и имеет более широкий функционал и более компактное оформление.


    1. VolodjaT
      18.10.2019 09:30

      Знаете что такое хобби?


  1. infund
    18.10.2019 09:06

    В этом устройстве можно выделить 3 блока:
    — блок инвертора
    — блок контроллера и батарей
    — блок бесперебойника
    — блок управления

    Что-то в этом устройстве пошло не так…

    Они могут выдавать ток в 35 ампер и взорваться.

    Хорошая вещь, надо брать…


    1. xo4y_B_BostonDynamics Автор
      18.10.2019 09:21

      исправил


  1. kalapanga
    18.10.2019 10:47

    Сборка ужасная. Про отсутствие вентиляционных отверстий выше уже написали. У Вас же вместо них наоборот, ещё и какая-то резина проложена, чтобы точно тепло никуда не ушло. Далее, Вы же сами печатали коробку — так почему не предусмотрели нормальное крепление Ваших плат в корпусе, под каждую своё посадочное место? Вместо этого распорки из резинок, подсунутые картонки, изолента — страх! Гнездо антенны висит в воздухе, usb-кабель тянется куда-то внутрь.
    Ну и аккАмуляторы на схемах.


    1. xo4y_B_BostonDynamics Автор
      18.10.2019 11:00

      Коробку делал инженер конструктор


      1. kalapanga
        18.10.2019 11:15

        От этого она лучше не стала.

        char your_phone = "+79148389933";
        Ничего не пропущено?


        1. xo4y_B_BostonDynamics Автор
          18.10.2019 16:54

          Вроде нет


          1. tmin10
            18.10.2019 23:30

            Там разве не должно быть массива символов? char это один символ.


  1. REPISOT
    18.10.2019 11:06

    При помощи этого GSM-реле вы сможете включить любую нагрузку, рассчитанную на 220 В и мощностью не более 2 кВт, в любом уголке Земли, где есть сотовая сеть.
    При помощи… ардуино. Удаленная нагрузка 2кВт. А если зависнет и не выключится? Про применение ардуины в пром. автоматике уже сколько раз писали.


  1. peacemakerv
    18.10.2019 18:23

    А как же на Хабре оценить публикацию, чтобы
    1) не обидеть молодого, но малограмотного автора, лишив его «запала» писать статьи
    2) однако дать понять, что публикация чем-то интересна
    3) и не нахватать минусов себе
    ?


  1. teleghost
    18.10.2019 20:29

    Автор, Вы, конечно, молодец, но нагрузка 2кВт — это уже не шутки, а глядя на внутренности девайса, лично мне становится страшно оставлять его без присмотра…
    Подобные приборы пром. автоматики должны иметь гарантированный диапазон рабочих температур -40..+85°C, а также известную вибро- и влагоустойчивость. Надёжность всего прибора == надёжности его самого слабого звена. Плата ардуино (т.е. обвязка атмеги) — это уже какие-нибудь коммерческие 0..70°C (про SIM800L и других не знаю). С учётом токов/мощностей корпус нужен не только с теплоотводом и правильной организацией полостей, но из самозатухающего (не поддерживающего горение) пластика. А код — это вообще отдельная история, там хотя бы сторожевой таймер где-то включается? Я про безопасность аутентификации по номеру телефона даже молчу (погуглите «подделка номера абонента gsm», вводите на сайте номер — и с него же Вам обещают перезвонить).
    Резюме: подобные девайсы потому и стоят дорого, что лучше заплатить за фабричное изделие от какого-нибудь известного производителя и спать, блин, спокойно (или почти).

    Но Вы, главное, того, не бросайте, просто вектор развития скорректируйте, и будет Вам бостон динамикс…


  1. tmin10
    18.10.2019 23:33

    Не совсем понял, зачем для реле нужна автономность? Если оно управляет нагрузкой, то почему бы не взять питание от этого же источника и для себя? А если питания нет, то смысла управлять реле вообще нет.


  1. iig
    19.10.2019 07:20

    Непонятно, какой недеструктивный use case подобного устройства. Деструктивный (где всё горит и взрывается) я уже придумал.


    1. balamutang
      19.10.2019 12:38

      Включать на даче бойлер/обогреватель за полдня до приезда например
      Или полив или перезагрузить по питанию чтото


    1. xo4y_B_BostonDynamics Автор
      19.10.2019 15:43

      ну вообще это прототип устройства для включения/отключения механического переключателя на удаленных трансформаторных подстанциях трансформаторных подстанциях


      1. iig
        19.10.2019 21:57

        То есть от того, зависнет ли бытовой микроконтроллер от электромагнитного импульса, будет зависит, сожжёт ли 6кВ электрика или нет.


        1. xo4y_B_BostonDynamics Автор
          20.10.2019 17:11

          это только прототип. его надо было сделать в короткие сроки, поэтому и была выбрана ардуина.


  1. iig
    19.10.2019 13:49

    "Включать на даче бойлер/обогреватель за полдня до приезда например
    Или полив"


    От аккумулятора, ага ;)


    1. balamutang
      21.10.2019 10:10

      ну в общем встроенный акк конечно такое себе, единственный профит — отправит смс что электричество пропало, если там конечно это мониторится.
      У мегафона были когда-то GSM розетки с подобными функциями + термодатчик, цель у них была именно такая