Automatic Plant watering System.

In this project, you will learn how to water the plants automatically whenever the moisture level in the soil is less than the required level.


We most probably see a lot of indoor plants die due to lack of water.  This happens so because we humans can’t notice the amount of moisture present in the soil.


Here we come up with a simple solution. We monitor the presence of moisture levels in the soil and temperature in the air to and control the motor pump accordingly.

When the moisture is low and if the temperature is higher than the normal (33 in my case) then we water the plant for 3 mins else we just water the plant for 1 min. (change these setting as per your plants’ position, no.of  plants and requirement of water for them)


5v-2A power adapter
arduino nano or Arduino Uno
connecting wires/jumper wires
TIP120 Transistor
LM35 Temperature Sensor
Soil Moisture Sensor
1N4001 diode
5v DC motor pump  click here



Here we are using a soil moisture sensor to measure the amount of moisture present in the soil and at the same time, we also measure the temperature in the atmosphere using the LM35 sensor.  When the moisture reduced to below the setpoint value and if the temperature is above the setpoint value then we water the plant for 3 min else we water the plant for 1 min.



int moisture_sensor = A0;
int Temperature_sensor = A1;
int temperature_setpoint = 33; // in celcius
int moisture_setpoint = 50; // in 0- 100%
int Pump = 3;
void setup() {
Serial.println("Reading From the Sensor ...");
pinMode(moisture_sensor, INPUT); 
pinMode(Temperature_sensor, INPUT);
pinMode(Pump, OUTPUT);
void loop() {
int moisture = analogRead(moisture_sensor);
moisture = map(moisture,1024,10,0,100);
Serial.print("moisture : ");
int temperature = analogRead(Temperature_sensor);
float volts=(temperature/1024.0)*5.0; //conversion to volts
temperature = volts*100.0; //conversion to temp Celsius
Serial.print("Temperature : ");
Serial.println(" C");
if (moisture < moisture_setpoint)
if (temperature > temperature_setpoint)
digitalWrite(Pump, HIGH);
delay(30000); // water the plant for 3 min
delay(10000); // water the plant for 1 min
digitalWrite(Pump, LOW);
delay(50000); // monitor every 5 mins 



Share this post

Share on facebook
Share on twitter
Share on linkedin
Share on email
Share on whatsapp