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.
Briefly about the scheme.
In this device, you can select 4 blocks:
- inverter unit
- controller and battery unit
- uninterruptible block
- Control block.
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: