top of page

Measuring soil moisture using Soil Moisture Sensor with Arduino (Y-38)

What is a Soil Moisture Sensor?


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. So let’s begin our tutorial on interfacing Arduino and Soil moisture sensor.



Specifications:

Input Voltage : 3.3– 5V

Output Voltage : 4.2V

Input Current : 35mA

Output Signal : Both Analog and Digital


Material Required:


Material Quantity

Arduino Uno 1

Soil Moisture Sensor 1

Jumper cables 5


Pinout Diagram:

The soil Moisture sensor YL-38has 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.




Working:


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.


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 -to 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 sensoYL-38 to the Arduino are as follows.


VCC of YL-38 to 5V of Arduino

GND of YL-38 to GND of Arduino

A0 of YL-38 to A0 of Arduino



Tested Programming Code:

const int soil_sensor = A0;

sensor is attached to int sensorValue = 0;


void setup() {

Serial.begin(9600);


}

void loop() {



sensorValue = analogRead(soil_sensor);


serial monitor: Serial.print("Moisture Value = " ); Serial.println(sensorValue);



delay(1000);


}

Digital Mode – Interfacing Arduino and Soil Moisture Sensor


To connect the soil moisture sensor YL-38 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 YL-38 to the Arduino in digital mode are as follows.


· VCC of YL-38 to 5V of Arduino


· GND of YL-38 to GND of Arduino


· D0 of YL-38 to pin 12 of Arduino


· LED positive to pin 13 of Arduino


· LED negative to GND of Arduino





Tested Programming Code

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);

}

}


Precautions:


1. Double check the connections before powering on the circuit.

2. Don’t use loose jumper cables.

3. Check whether the proper board is selected from Arduino IDE.

4. Ensure proper placement of sensor for correct working.

5. Please keep your hardware away from water except, the sensing probe.


Conclusion:


You can successfully measure the moisture percentage in the soil and control the appropriate flow of water.


This sensor can be deployed in many ways like auto irrigation systems, automatic plant watering systems etc.


Output:


Situation Screenshot: Serial Monitor (Ctrl+Shift+M)






GET IN TOUCH

We'd love to hear from you

bottom of page