In this post I will show how to construct a farmer friendly GSM pump motor controller circuit which could
turn on and off the irrigation system remotely from anywhere in the world via cellphone SMS and return you with an acknowledgement message. The idea was requested by Mr. PG Ragavandir.
The Design
Agriculture is one of biggest industry in India which serves food for more than a billion people every year. Producing vast amount of food is never an easy task; irrigation is one of the factor.
Most of the agriculturist’s crop field is situated far from their residence, just turning on the water pump costs huge for their transportation per year.
India is known for IT skills and space programs and reached mars less than cost of movie “Gravity”, this signifies the great potential among Engineers and Scientists. But, the skills are not uniformly distributed across different fields; agriculture is one of the field where technological development is slow.
This SMS based GSM pump motor controller takes a baby step towards agricultural development, this may not be a revolutionary project but, it may bring delight among agriculturists.
Let’s dive into technical part of the project.
The project is designed with minimal hardware components so that a beginner can accomplish it with ease.
The circuit consists of power supply, which powers the whole setup.
The Arduino is the brain of the project which take decisions and GSM modem which sends and receives text SMS and communicate with the user and relay which controls the motor.
How it Works
Note: Please use at least 10K resistor at the base of the BC548 transistor, 330 Ohms is too low.
The transformer step down the 230VAC to 12VAC and bridge rectifier convert AC onto DC current and the current passes through an electrolytic capacitor to smooth the power supply.
A fixed 12V voltage regulator gives power to arduino, GSM modem and relay. The GSM modem is connected to arduino at pin #0 and pin #1, which are RX and TX respectively.
The RX of GSM is connected to TX of arduino and TX of GSM is connected to RX of arduino. If you are confused, just look at the below diagram, misconnection will not send or receive SMS.
ARDUINO TX----------------------RX GSM modem
RX----------------------TX
Ground to ground connection is also established between arduino and GSM modem.
Try to get a male jack power connector for the GSM and arduino, if not just solder the wires directly from power supply to arduino and GSM, which might increase the mess in the project.
The transistor drives the relay and the diode protects the circuit from high voltage spikes while switching the relay ON/OFF.
The LED indicator shows the status of the relay. If the LED glows the relay activated and if the LED is off, the relay is deactivated.
Insert a valid SIM on the GSM modem and try to take advantage of the offers availed by the network provider for SMS such as rate cutters, which will reduce the expenses for SMS.
Program Code:
//----------------Program developed by R.Girish------------//
int LED = 8;
int motor = 9;
int temp=0;
int i=0;
char str[15];
void setup()
{
Serial.begin(9600);
pinMode(motor,OUTPUT);
pinMode(LED,OUTPUT);
digitalWrite(motor,LOW);
digitalWrite(LED,LOW);
delay(20000);
delay(20000);
delay(20000);
Serial.println("AT+CNMI=2,2,0,0,0");
delay(1000);
Serial.println("AT+CMGF=1");
delay(500);
Serial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile number
delay(1000);
Serial.println("System is ready to receive commands.");// The SMS text you want to send
delay(100);
Serial.println((char)26); // ASCII code of CTRL+Z
delay(1000);
}
void loop()
{
if(temp==1)
{
check();
temp=0;
i=0;
delay(1000);
}
}
void serialEvent()
{
while(Serial.available())
{
if(Serial.find("/"))
{
delay(1000);
while (Serial.available())
{
char inChar=Serial.read();
str[i++]=inChar;
if(inChar=='/')
{
temp=1;
return;
}
}
}
}
}
void check()
{
if(!(strncmp(str,"motor on",8)))
{
digitalWrite(motor,HIGH);
digitalWrite(LED,HIGH);
delay(1000);
Serial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile number
delay(1000);
Serial.println("Motor Activated");// The SMS text you want to send
delay(100);
Serial.println((char)26); // ASCII code of CTRL+Z
delay(1000);
}
else if(!(strncmp(str,"motor off",9)))
{
digitalWrite(motor,LOW);
digitalWrite(LED,LOW);
delay(1000);
Serial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile number
delay(1000);
Serial.println("Motor deactivated");// The SMS text you want to send
delay(100);
Serial.println((char)26); // ASCII code of CTRL+Z
delay(1000);
}
else if(!(strncmp(str,"test",4)))
{
Serial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile number
delay(1000);
Serial.println("The System is Working Fine.");// The SMS text you want to send
delay(100);
Serial.println((char)26); // ASCII code of CTRL+Z
delay(1000);
}
}
//----------------Program developed by R.Girish------------//
NOTE 1: While compiling the program it shows a warning, which you can ignore it. The program is verified and tested.
NOTE 2: Please remove TX and RX connection from arduino while uploading the code.
NOTE 3: Replace “xxxxxxxxxxxxx” with recipient’s phone number in 4 places in the program.
NOTE 4: Please purchase a GSM modem without power button in the module; in case of power failure it won’t latch in into mobile network unless you manually press the button, so avoid such type of GSM modems. The GSM modem one without power button will latch into mobile network directly after power retains.
Author’s Prototype of GSM Pump Motor Controller Circuit:
How to use the above setup:
• Send /motor on/ SMS from your cellphone to activate the relay.
• Send /motor off/ SMS to deactivate the relay.
• Send /test/ SMS for testing the response from the circuit.
Make sure you start the command with”/” and end with “/” otherwise it won’t accept as valid request.
• /motor on/ will turn ON the relay and return with an acknowledgement SMS “Motor Activated.”
• /motor off/ will turn off the relay and return with an acknowledgement SMS “Motor Deactivated.”
• If you send /test/ it will return with an acknowledgement SMS “The System is Working Fine.”
• The above message signifies that your setup is working fine.
• If no acknowledgement is returned to you can assume that no action is preceded on the motor and you may troubleshoot the problems.
• After powering the setup ON wait for 1 minute the system will send an acknowledgement SMS “System is ready to accept commands.” once you receive this SMS your project is ready to serve.
The above commands are fool proof and never trigger the motor falsely, the setup will not respond any SMS other than the above specified commends.\
Improving the above Concept
This above GSM pump application circuit attracted lots of readers and we have received tons of queries and suggestions. One of the avid readers of this website Mr.Gandhi suggested a good improvement to the prior design.
SMS Acknowledgement When Motor is Actually ON
The improvement is all about the revert acknowledgement, where the user will receive a SMS response in his cellphone from the GSM pump controller system when a user sends a valid SMS comment.
The existing design sends an acknowledgement SMS to the user independent of the actual state of the relay i.e. ON/OFF.
The new design change suggested by Mr.Gandhi checks the state of the relay whether the relay is physically switched its state or not.
The change as per this new GSM water pump controller design can be implemented to the previous design without much hassle by adding a feedback system as shown in the schematic and uploading the new code.
Circuit Diagram:
When we send SMS command “/MOTOR ON/” the pin # 9 goes high and trigger the relay ON. If the relay connects the common and N/O pins the pump starts and also turns ON the transformer which will give +5 at the output.
The +5V signal is fed to pin # 7 which will confirm and return with an acknowledgement “Motor activated”.
When we send “/MOTOR OFF/” the pin # 9 turns LOW and relay disconnects the common and N/O pins, this will turn off the pump as well as the connected transformer. The output at pin # 7 goes LOW and returns with an acknowledgement “Motor deactivated”.
If no acknowledgement SMS is received in your cellphone, we can confirm that no action was taken and the pump is at the last requested state, you may go to the site and troubleshoot or no acknowledgement is received due power cut.
Program Code:
//----------------Program developed by R.Girish------------//
int motor = 8;
int LED = 9;
int temp=0;
int i=0;
int ack=7;
char str[15];
void setup()
{
Serial.begin(9600);
pinMode(ack,INPUT);
pinMode(motor,OUTPUT);
pinMode(LED,OUTPUT);
digitalWrite(motor,LOW);
digitalWrite(LED,LOW);
delay(20000);
delay(20000);
delay(20000);
Serial.println("AT+CNMI=2,2,0,0,0");
delay(1000);
Serial.println("AT+CMGF=1");
delay(500);
Serial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile number
delay(1000);
Serial.println("System is ready to receive commands.");// The SMS text you want to send
delay(100);
Serial.println((char)26); // ASCII code of CTRL+Z
delay(1000);
}
void loop()
{
if(temp==1)
{
check();
temp=0;
i=0;
delay(1000);
}
}
void serialEvent()
{
while(Serial.available())
{
if(Serial.find("/"))
{
delay(1000);
while (Serial.available())
{
char inChar=Serial.read();
str[i++]=inChar;
if(inChar=='/')
{
temp=1;
return;
}
}
}
}
}
void check()
{
if(!(strncmp(str,"motor on",8)))
{
digitalWrite(motor,HIGH);
delay(100);
if(digitalRead(ack)==1)
{
digitalWrite(LED,HIGH);
delay(1000);
Serial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile number
delay(1000);
Serial.println("Motor Activated");// The SMS text you want to send
delay(100);
Serial.println((char)26); // ASCII code of CTRL+Z
delay(1000);
}
}
else if(!(strncmp(str,"motor off",9)))
{
digitalWrite(motor,LOW);
delay(5000);
if(digitalRead(ack)==0)
{
digitalWrite(LED,LOW);
delay(1000);
Serial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile number
delay(1000);
Serial.println("Motor deactivated");// The SMS text you want to send
delay(100);
Serial.println((char)26); // ASCII code of CTRL+Z
delay(1000);
}
}
else if(!(strncmp(str,"test",4)))
{
Serial.println("AT+CMGS=\"+91xxxxxxxxxx\"\r"); // Replace x with mobile number
delay(1000);
Serial.println("The System is Working Fine.");// The SMS text you want to send
delay(100);
Serial.println((char)26); // ASCII code of CTRL+Z
delay(1000);
}
}
//----------------Program developed by R.Girish------------//
The above implementation is not practically tested, but the author is cent percent sure that above idea will work. If readers found any issues with the above improvement can express through the comment section.
Part List
1) Transformer step down 12-0V
2) Diodes IN4007 x5
3) LM7812 x1
4) Relay 12V x1
5) BC548 Transistor x1
6) Electrolytic Capacitor 1000uF x1
7) GSM module: SIM 800 or SIM 900 model
8) 330 Ohm Resistor x2
9) LED RED/GREEN x1
10) Arduino Uno or Arduino nano or Arduino Mega
11) DC male jack x2
Video Clip:
Integrating with 3 Phase Motors
I have been receiving many requests to upgrade the relay stage for the above design so that it becomes compatible for operating 3 phase motors using GSM cell phone commands.
Therefore I decided to design the required circuit which will hopefully be able to switch ON and switch OFF a given 3 phase motors having the typical start and stop contactor mechanism.
The following figure shows how to configure the design using an IC 4017 circuit.
NOTE: The 100uF /10K and 220uF and 47K values may need some adjustments in order ensure the correct amount of delay for the respective transistors and relay stages.