Standalone GSM relay with inverter from pre-made components

With the help of this GSM relay you can turn on any load rated for 220 V and with a capacity of no more than 2 kW, in any corner of the Earth where there is a cellular network.



image






This device is controlled by arduino nano via the SIM800L gsm module. A functional diagram with a list of accessories is given below. It can operate both from built-in batteries and from a 220 V network. When operating from a network, the load can consume up to 2 kW of electricity. From batteries, maximum output power of 300 watts.



image

Briefly about the scheme.



In this device, you can select 4 blocks:





The inverter unit is a regular 500t car inverter. Suitable with less power, but the maximum output power also decrease in proportion to the power of the inverter.



The controller and battery pack is the usual cheap BMS S3 driver for connecting 3 lithium-ion batteries. The batteries are high current. They can give out current in 35 amperes. If you have less power, then you can buy cheaper batteries with lower maximum current.



The uninterruptible unit is made on the transistor VT3, VD4, R4, R5, R3. The cathode of the Zener diode VD4 is connected directly to the power supply and when the power is applied, the VT3 transistor opens. After it is opened, a negative potential comes to all the relay inputs and the relays switch to the power mode of the circuit from the power supply. An important feature of ready-made relay assemblies: some of them work when the advancing potential comes to the input, and some when negative. If you have the first option, then you need to rearrange R3 to the emitter gap of the VT3 transistor and connect the relay input to the emitter of the same transistor.



Control unit - assembled on the SIM800 and arduino nano module.







This is how the assembled circuit looks like




It looks like in packaged condition












In order for the device to start receiving SMS from your phone, you need to write down your phone number in the variable your_phone. It is also possible to connect an LCD display to an arduino, for example, wh1601 or wh0802, but at the same time you will need to uncomment all the lines with the inscription lcd.



The code
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 file for printing boxes can be found here .



Video of work:






All Articles