Arduino Irrigation and Plant Watering using Soil Moisture Sensor
This project is about a moisture-sensing automatic plant watering system using Arduino UNO. The system reads the moisture content of the soil using soil moisture sensor and switches ON the motor when the moisture is below the set limit. When the moisture level rises above the set point, the system switches off the pump. The status of the tank, motor and the moisture level will be displayed on a 16×2 LCD display.
So let’s come to our project!
Objectives of the Project
- Monitor the moisture content of the soil using a soil moisture sensor and the water level of the tank using a float switch.
- Turn the motor ON when the soil moisture falls below a certain reference value and if there is enough water in the tank.
- Display the status of the soil and the tank using a 16×2 LCD.
Let’s begin to build our project – Soil Moisture Based Automatic Irrigation System.
The soil moisture sensor module used here have two output pins ( Digital output and Analog output ). The output from the probe of the moisture sensor is compared with a reference value using a lm393 comparator. The reference value can be changed by turning the potentiometer in the module. The digital pin gives an active low output when the soil is wet. Here we are using the analog output from the module by connecting it to one of the analog pins of Arduino. While using the analog output the wet detection value can be set/adjusted within the program itself.
As shown in the circuit diagram, a float switch is connected to one of the analog pins of Arduino and a 1K Ohm resistor is used to pulled up the line. Analog pins of Arduino can also be used as digital inputs. The status of the tank is identified by checking the output of the float switch. Arduino reads the voltage dropped across the pull up resistor for sensing the level of water in the tank. Two LEDs are connected to the 2nd and 3rd pin of Arduino to show the moisture status and tank status respectively. And the 4th pin links to the base of a BC547 transistor which in turn drives the 12 V DC motor.
A 16×2 LCD is connected with Arduino in 4-bit mode. JHD162A is the LCD module used here. JHD162A is a 16×2 LCD module based on the HD44780 driver from Hitachi. The JHD162A has 16 pins and can be operated in 4-bit mode (using only 4 data lines) or 8-bit mode (using all 8 data lines). Here we are using the LCD module in 4-bit mode. Control pin RS, RW and En are directly connected to arduino pin 13, GND and 12. And data pin D4-D7 is connected to 11, 10, 9 and 8 of arduino.