

The circuit in question is designed to control a 4-channel relay module via an Arduino Nano, which is interfaced with a SIM800L GSM module. The SIM800L module allows the Arduino to send and receive SMS messages, enabling remote control of the relay states. An electrolytic capacitor is included in the circuit for power supply stabilization.
5V connected to the VCC of SIM800L, Relay Module, and the positive pin of the Electrolytic Capacitor.GND connected to the GND of SIM800L, Relay Module, and the negative pin of the Electrolytic Capacitor.D2 connected to the TXD of SIM800L.D3 connected to the RXD of SIM800L.D4 connected to IN1 of Relay Module.D5 connected to IN2 of Relay Module.D6 connected to IN3 of Relay Module.D7 connected to IN4 of Relay Module.VCC connected to the 5V supply through the Electrolytic Capacitor.GND connected to the common ground.TXD connected to D2 on the Arduino Nano.RXD connected to D3 on the Arduino Nano.VCC connected to the 5V supply through the Electrolytic Capacitor.GND connected to the common ground.IN1 connected to D4 on the Arduino Nano.IN2 connected to D5 on the Arduino Nano.IN3 connected to D6 on the Arduino Nano.IN4 connected to D7 on the Arduino Nano.+ connected to the 5V supply.- connected to the common ground.#include <EEPROM.h>
#include <SoftwareSerial.h> // Create software serial object to communicate with SIM800L
SoftwareSerial GSM(2, 3); // SIM800L Tx & Rx is connected to Arduino D2 & D3
String phone_no1 = "+919946206378"; // Change this to your first phone number
String phone_no2 = "+918606206385"; // Change this to your second phone number
String RxString = ""; // Will hold the incoming string from the GSM module
char RxChar = ' ';
int Counter = 0;
String GSM_Nr = "";
String GSM_Msg = "";
#define Relay1 4 // Load1 Pin Out (D4)
#define Relay2 5 // Load2 Pin Out (D5)
#define Relay3 6 // Load3 Pin Out (D6)
#define Relay4 7 // Load4 Pin Out (D7)
int load1, load2, load3, load4;
void setup() {
// Set relay pins as outputs and turn them off initially
pinMode(Relay1, OUTPUT); digitalWrite(Relay1, 1);
pinMode(Relay2, OUTPUT); digitalWrite(Relay2, 1);
pinMode(Relay3, OUTPUT); digitalWrite(Relay3, 1);
pinMode(Relay4, OUTPUT); digitalWrite(Relay4, 1);
Serial.begin(9600); // Begin serial communication with Arduino IDE
GSM.begin(9600); // Begin communication with SIM800L
Serial.println("Initializing....");
initModule("AT", "OK", 1000); // Check for GSM module
initModule("AT+CPIN?", "READY", 1000); // Check SIM card status
initModule("AT+CMGF=1", "OK", 1000); // Set SMS mode to ASCII
initModule("AT+CNMI=2,2,0,0,0", "OK", 1000); // Set to read incoming SMS
Serial.println("Initialized Successfully");
// Load the relay states from EEPROM
load1 = EEPROM.read(1);
load2 = EEPROM.read(2);
load3 = EEPROM.read(3);
load4 = EEPROM.read(4);
relays(); // Set relay states based on EEPROM
delay(100);
}
void loop() {
RxString = "";
Counter = 0;
// Read incoming data from the GSM module
while (GSM.available()) {
delay(1);
RxChar = char(GSM.read());
if (Counter < 200) {
RxString.concat(RxChar);
Counter = Counter + 1;
}
}
if (Received(F("CMT:"))) GetSMS();
// Verify the message sender and act accordingly
if (GSM_Nr == phone_no1 || GSM_Nr == phone_no2) {
if (GSM_Msg == "load1on") { load1 = 0; sendSMS(GSM_Nr, "Ok Load 1 is On"); }
if (GSM_Msg == "load1off") { load1 = 1; sendSMS(GSM_Nr, "Ok Load 1 is Off"); }
if (GSM_Msg == "load2on") { load2 = 0; sendSMS(GSM_Nr, "Ok Load 2 is On"); }
if (GSM_Msg == "load2off") { load2 = 1; sendSMS(GSM_Nr, "Ok Load 2 is Off"); }
if (GSM_Msg == "load3on") { load3 = 0; sendSMS(GSM_Nr, "Ok Load 3 is On"); }
if (GSM_Msg == "load3off") { load3 = 1; sendSMS(GSM_Nr, "Ok Load 3 is Off"); }
if (GSM_Msg == "load4on") { load4 = 0; sendSMS(GSM_Nr, "Ok Load 4 is On"); }
if (GSM_Msg == "load4off") { load4 = 1; sendSMS(GSM_Nr, "Ok Load 4 is Off"); }
if (GSM_Msg == "allon") { load1 = 0; load2 = 0; load3 = 0; load4 = 0; sendSMS(GSM_Nr, "Ok All Load is On"); }
if (GSM_Msg == "alloff") { load1 = 1; load2 = 1; load3 = 1; load4 = 1; sendSMS(GSM_Nr, "Ok All Load is Off"); }
if (GSM_Msg == "loadstatus") {
String loadst = "";
loadst += (load1 == 0) ? "Load1 On\r\n" : "Load1 Off\r\n";
loadst += (load2 == 0) ? "Load2 On\r\n" : "Load2 Off\r\n";
loadst += (load3 == 0) ? "Load3 On\r\n" : "Load3 Off\r\n";
loadst += (load4 == 0) ? "Load4 On" : "Load4 Off";
sendSMS(GSM_Nr, loadst);
}
eeprom_write(); // Save the relay states to EEPROM
relays(); // Apply relay states
}
GSM_Nr = "";
GSM_Msg = "";
}
void eeprom_write() {
EEPROM.write(1, load1);
EEPROM.write(2, load2);
EEPROM.write(3, load3);
EEPROM.write(4, load4);
}
void relays() {
digitalWrite(Relay1, load1);
digitalWrite(Relay2, load2);
digitalWrite(Relay3, load3);
digitalWrite(Relay4, load4);
}
// Send SMS
void sendSMS(String number, String msg) {
GSM.print("AT+CMGS=\"");
GSM.print(number);
GSM.println("\"\\r\\n");
delay(500);
GSM.println(msg);
delay(500);