Introduction: Smart Irrigation Project on Arduino

About: I am an Embedded systems and Electronics Projects Designer ,You can see my projects through www.embeddedstudy.com ,mail me at nithinpradeep786@gmail.com and subscribe on YouTube for more projects.

In this article, we are going to interface a Soil moisture sensor FC-28 with Arduino. This sensor measures the volumetric content of water inside the soil and gives us the moisture level as output. The sensor is equipped with both analog and digital output, so it can be used in both analog and digital mode. In this article, we are going to interface the sensor in both modes. So let’s begin our tutorial on interfacing Arduino and Soil moisture sensor.

Working of Sensor The soil moisture sensor consists of two probes which are used to measure the volumetric content of water. The two probes allow the current to pass through the soil and then it gets the resistance value to measure the moisture value. When there is more water, the soil will conduct more electricity which means that there will be less resistance. Therefore, the moisture level will be higher. Dry soil conducts electricity poorly, so when there will be less water, then the soil will conduct less electricity which means that there will be more resistance. Therefore, the moisture level will be lower.

This sensor can be connected in two modes; Analog mode and digital mode. First, we will connect it in Analog mode and then we will use it in Digital mode. Specifications The specifications of the soil moisture sensor FC-28 are as follows Input Voltage 3.3 – 5V Output Voltage 0 – 4.2V Input Current 35mA Output Signal

Both Analog and Digital Pin Out – Soil Moisture Sensor The soil Moisture sensor FC-28 has four pins VCC: For power A0: Analog output D0: Digital output GND: Ground

The Module also contains a potentiometer which will set the threshold value and then this threshold value will be compared by the LM393 comparator. The output LED will light up and down according to this threshold value.

Step 1: Connecting Sensor in Analog Mode

Analog Mode – Interfacing Soil Moisture Sensor and Arduino

To connect the sensor in the analog mode, we will need to use the analog output of the sensor. When taking the analog output from the soil moisture sensor FC-28, the sensor gives us the value from 0-1023. The moisture is measured in percentage, so we will map these values from 0 -100 and then we will show these values on the serial monitor. You can further set different ranges of the moisture values and turn on or off the water pump according to it. Circuit Diagram The connections for connecting the soil moisture sensor FC-28 to the Arduino are as follows.

VCC of FC-28 to 5V of Arduino

GND of FC-28 to GND of Arduino

A0 of FC-28 to A0 of Arduino

Step 2: Arduino Code

int sensor_pin = A0;


int output_value ;

void setup()

{ Serial.begin(9600); Serial.println("Reading From the Sensor ..."); delay(2000); }

void loop()

{ output_value= analogRead(sensor_pin); output_value = map(output_value,550,0,0,100); Serial.print("Mositure : "); Serial.print(output_value); Serial.println("%"); delay(1000); }

This is a 100% working code guys Copy and Paste this in Arduino IDE and See Soil moisture values on Serial monitor in Arduino.

Please Check My Review VIDEO of this Sensor to learn more about how to do this Project

Step 3: Explaining the Code

First of all, we have defined two variables; one for the soil moisture sensor pin and the other for storing the output of the sensor.

int sensor_pin = A0; // Soil Sensor input at Analog PIN A0

int output_value ; //In the setup function, the “Serial.begin(9600)” command will help in communication between the Arduino and serial monitor. Then, we will print the “Reading From the Sensor …” on the serial monitor.

void setup() {

Serial.begin(9600);

Serial.println("Reading From the Sensor ...");

delay(2000);

}

In the loop function, we will read from the sensor analog pin and will store the values in the “output_ value” variable. Then, we will map the output values to 0-100, because the moisture is measured in percentage. When we took the readings from the dry soil, then the sensor value was 550 and in the wet soil, the sensor value was 10. So, we mapped these values to get the moisture. After that, we printed these values on the serial monitor.

void loop() {

output_value= analogRead(sensor_pin);

output_value = map(output_value,550,10,0,100);

Serial.print("Mositure : ");

Serial.print(output_value);

Serial.println("%");

delay(1000);

}

Step 4: Digital Mode – Interfacing Arduino and Soil Moisture Sensor

To connect the soil moisture sensor FC-28 in the digital mode, we will connect the digital output of the sensor to the digital pin of the Arduino. The Sensor module contains a potentiometer with it, which is used to set the threshold value. This threshold value is then compared with the sensor output value using the LM393 comparator which is placed on the sensor module. The LM393 comparator will compare the sensor output value and the threshold value and then gives us the output through the digital pin. When the sensor value will be greater than the threshold value, then the digital pin will give us 5V and the LED on the sensor will light up and when the sensor value will be less than this threshold value, then the digital pin will give us 0V and the light will go down. Circuit Diagram

The connections for connecting the soil moisture sensor FC-28 to the Arduino in digital mode are as follows.

VCC of FC-28 to 5V of Arduino

GND of FC-28 to GND of Arduino

D0 of FC-28 to pin 12 of Arduino

LED positive to pin 13 of Arduino

LED negative to GND of Arduino

int led_pin =13; int sensor_pin =8;

void setup() {

pinMode(led_pin, OUTPUT);

pinMode(sensor_pin, INPUT);

}

void loop() {

if(digitalRead(sensor_pin) == HIGH){

digitalWrite(led_pin, HIGH);

} else {

digitalWrite(led_pin, LOW);

delay(1000);

}

}

Code Explanation First of all, we have initialized two variable for connecting the LED pin and the Sensor digital pin.

int led_pin =13;

int sensor_pin =8;

In the setup function, we have declared the LED pin as the output pin because; we will power the LED through that pin. Then, we declared the sensor pin as input pin because the Arduino will take the values from the sensor through that pin.

void setup() {

pinMode(led_pin, OUTPUT);

pinMode(sensor_pin, INPUT);

}

In the loop function, we have read from the sensor pin. If the output value of the sensor will be higher than the threshold value, then the digital pin will be high and the LED will light up. If the sensor value will be lower than the threshold value, then the LED will go down.

void loop() {

if(digitalRead(sensor_pin) == HIGH){

digitalWrite(led_pin, HIGH);

} else {

digitalWrite(led_pin, LOW);

delay(1000);

}

}

So that finishes our tutorial on interfacing Arduino and Soil moisture sensor.If you got any doubts, please ask in comments section........