Avec ce relais GSM, vous pourrez activer n'importe quelle charge, conçue pour 220 V et d'une puissance ne dépassant pas 2 kW, depuis n'importe quel coin de la Terre où il y a un réseau mobile.

Cet appareil est contrôlé par un arduino nano via un module gsm SIM800L. Le schéma fonctionnel avec la liste des composants est présenté ci-dessous. Il peut fonctionner à la fois avec des batteries intégrées et sur le réseau de 220 V. Lorsque l'appareil fonctionne sur le réseau, la charge peut consommer jusqu'à 2 kW d'énergie. Sur batteries, la puissance de sortie maximale est de 300 W.

Un bref aperçu du schéma.
Dans cet appareil, on peut distinguer 4 blocs :
- bloc inverseur
- bloc contrôleur et batteries
- bloc onduleur
- bloc de commande.
Le bloc inverseur est un inverseur automobile standard d'une puissance de 500 W. Un modèle avec une puissance inférieure peut convenir, mais la puissance de sortie maximale diminuera également proportionnellement à la puissance de l'inverseur.
Le bloc contrôleur et batteries est un driver BMS S3 basique, conçu pour connecter 3 batteries lithium-ion. Les batteries sont à haut courant. Elles peuvent fournir un courant de 35 ampères. Si vous avez une puissance inférieure, vous pouvez acheter des batteries moins chères avec un courant maximal plus bas.
Le bloc onduleur est réalisé avec les transistors VT3, VD4, R4, R5, R3. Le cathode du stabilisateur VD4 est directement connecté à l'alimentation et lors de l'alimentation, le transistor VT3 s'ouvre. Après son ouverture, un potentiel négatif arrive à toutes les entrées du relais, et les relais passent en mode d'alimentation à partir de l'alimentation. Une caractéristique importante des ensembles de relais prêts à l'emploi : certains d'entre eux fonctionnent lorsque le positif est présent à l'entrée, et d'autres avec un potentiel négatif. Si vous avez le premier cas, vous devez déplacer R3 dans la rupture de l'émetteur du transistor VT3 et connecter l'entrée du relais à l'émetteur de ce même transistor.
Le bloc de commande est assemblé sur le module SIM800 et l'arduino nano.

Voici à quoi ressemble le schéma assemblé
Voici à quoi il ressemble en état emballé


Pour que l'appareil commence à recevoir des SMS de votre téléphone, vous devez enregistrer votre numéro de téléphone dans la variable your_phone. Un écran LCD, comme le wh1601 ou wh0802, peut également être connecté à l'arduino, mais il faudra décommenter toutes les lignes avec le label lcd.
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=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);
}Le fichier STL pour imprimer la boîte peut être trouvé .
Vidéo de fonctionnement :

Source : habr.com
