Con questo relè GSM, puoi accendere qualsiasi carico progettato per 220 V e con una potenza massima di 2 kW, in qualsiasi angolo della Terra in cui sia presente una rete mobile.

Questo dispositivo è controllato da un Arduino Nano tramite il modulo GSM SIM800L. Lo schema funzionale con l'elenco dei componenti è riportato di seguito. Può funzionare sia con batterie ricaricabili integrate che con la rete a 220 V. Quando funziona con la rete, il carico può consumare fino a 2 kW di energia elettrica. Con le batterie, la potenza massima in uscita è di 300 W.

Brevemente sullo schema.
In questo dispositivo si possono distinguere 4 blocchi:
- blocco inverter
- blocco controllore e batterie
- blocco dell'interruttore di emergenza
- blocco di controllo.
Il blocco inverter è un normale inverter per auto con una potenza di 500 W. Va bene anche uno con potenza inferiore, ma anche la potenza massima in uscita diminuirà proporzionalmente alla potenza dell'inverter.
Il blocco controllore e batterie è un normale driver BMS S3 economico, progettato per collegare 3 batterie agli ioni di litio. Le batterie devono essere ad alta corrente. Possono fornire una corrente di 35 ampere. Se hai una potenza inferiore, puoi acquistare batterie più economiche con corrente massima inferiore.
Il blocco dell'interruttore di emergenza è realizzato con transistor VT3, VD4, R4, R5, R3. Il catodo del regolatore di tensione VD4 è collegato direttamente all'alimentazione e, quando viene fornita energia, il transistor VT3 si apre. Dopo la sua apertura, a tutti gli ingressi del relè arriva un potenziale negativo e i relè passano alla modalità di alimentazione del circuito dal blocco di alimentazione. Una caratteristica importante dei moduli relè già pronti: alcuni funzionano quando l'ingresso riceve un potenziale positivo, mentre altri quando è negativo. Se hai il primo tipo, devi spostare R3 nel punto di interruzione dell'emettitore del transistor VT3 e collegare l'ingresso del relè all'emettitore dello stesso transistor.
Il blocco di controllo è assemblato su un modulo SIM800 e Arduino Nano.

Ecco come appare lo schema assemblato
Ecco come appare in stato imballato


Per far sì che il dispositivo inizi a ricevere SMS dal tuo telefono, è necessario registrare il proprio numero di telefono nella variabile your_phone. È inoltre possibile collegare un display LCD all'Arduino, ad esempio wh1601 o wh0802, ma sarà necessario decommentare tutte le righe con la scritta lcd.
Codice
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=1rn";
softSerial.print("AT+CMGF=1rn");
/// print_lcd(cmd1);
delay(1000);
dellAllSMS();
// cmd1 ="AT+CMGDA="DEL ALL"rn";
// 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"rn"); // 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"rn";
// print_lcd(cmd1);
prev=0;
}
delay(10000);
}Il file STL per la stampa della scatola può essere trovato .
Video di funzionamento:

Fonte: habr.com
