Arduino Soil Moisture Sensor
Intro: Arduino Soil Moisture Sensor
***Edit***
Please use resistors when connecting the LEDs to your Arduino!
This Instructable is old. I have not had the time to update any of the information. You will find a lot of GREAT information in the comments please read them after reading the instructions.
Intro
In this instructable I will show you how to connect the an Arduino Nano and a moisture sensor. The information will then be displayed with 5 LEDs. This is very easy build and I would class it as a beginner project.
STEP 1: Things You Will Need
1 - Breadboard (http://www.ebay.com/itm/171705651308?ssPageName=ST...
5 - LEDs
5 - 1k resistors
1 - Soil Moisture sensor kit (http://www.ebay.com/itm/171705525756?ssPageName=ST...
1 - Arduino Nano (http://www.ebay.com/itm/171728876932?ssPageName=ST...
~8 - Assortment of jumpers.
STEP 2: Arduino
The Code:
<p>/* </p><p>Innovativetom.com Flower Pot Soil Mosture Sensor</p><p>A0 - Soil Mosture Sensor D2:D6 - LEDS 1,2,3,4,5</p><p>LED1 - Green LED2 - Green LED3 - Green LED4 - YELLOW LED5 - RED</p><p>Connect the Soil Mosture Sensor to anolog input pin 0, and your 5 led to digital out 2-6</p><p>*/ int led1 = 2; int led2 = 3; int led3 = 4; int led4 = 5; int led5 = 6;</p><p>int mostureSensor = 0;</p><p>void setup() { // Serial Begin so we can see the data from the mosture sensor in our serial input window. Serial.begin(9600); // setting the led pins to outputs pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); }</p><p>// the loop routine runs over and over again forever: void loop() { // read the input on analog pin 0: int sensorValue = analogRead(mostureSensor); // print out the value you read:</p><p> Serial.println(sensorValue); if (sensorValue >= 820) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, HIGH); digitalWrite(led5, LOW); } else if (sensorValue >= 615 && sensorValue < 820) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, HIGH); digitalWrite(led4, LOW); digitalWrite(led5, LOW); } else if (sensorValue >= 410 && sensorValue < 615) { digitalWrite(led1, HIGH); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); } else if (sensorValue >= 250 && sensorValue < 410) { digitalWrite(led1, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); } else if (sensorValue >= 0 && sensorValue < 250) { digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); } delay(1000); // delay 1 second between reads }</p>
STEP 3: LEDs
***Edit***
Please use resistors when connecting the LEDs to your Arduino!
***Edit***
Connecting the LEDs;
Digital Pin 2 Green.
Digital Pin 3 Green.
Digital Pin 4 Green.
Digital Pin 5 Yellow.
Digital Pin 6 Red.
Connect the cathode or (-) lead from the LED to the Arduino.
**Here you must put a 1k resistor between anode (+) and the positive rail.
Connect the anode or (+) lead from the LED to the + positive rail of the beadboard. **
STEP 4: Wiring
In this step we connect the power and ground rails.
From the arduino ground pin connect a short jumper to the blue rail on the breadboard.
From the arduino 5v Pin we connect a short jumper to the red rail on the breadboard.
Bond both rails together.
STEP 5: The Moisture Sensor
The moisture has very well defined pin out.
Connect the ground to the ground rail, power to the power rail.
Connect the "AC" Labeled pin on the moisture sensor to analog input 0 pin on the Arduino.
*note, the moisture sensor I have has two outs one labeled "AC" and one labeled "DC". The "AC", is a serial signal 0-5 volts that when fully dry it outputs 5 volts, when fully wet, 0 volts. The "DC", is configured with the trim pot and is brought high when the moisture level reaches a desired point.
66 Comments
krishla.jayavarapu1 2 years ago
ilyricsofficials 4 years ago
ShekharB10 5 years ago
SrikarD1 6 years ago
I am getting different values while I am using Arduino Uno and Arduino Nano for the same water content and level. Can anybody plz tell me why? and also how could I fix it? For example when its dry I am getting a value of 400 in Arduino Uno and 0 in Arduino nano through soil moisture sensor. When its wet, its almost the same(~850)
tinus26 6 years ago
Hi,
I was wondering - can I use a moisture sensor like this in a setup powered by a CR2032 or 9V battery?
puffykarl99 6 years ago
AniqaE 6 years ago
What are the units of output readings ? Help please
joyang 8 years ago
AniqaE 6 years ago
Did you find your answer ?
amit_123456 6 years ago
can anyone help me in uploading this program in arduino as this is showing some error
WirelessGuyN 6 years ago
Trying to lean on the experience of others who've been through this before...
Does anyone know if there are samples outthere for interfacing the TE215 sensor with the analog input of something like the NodeMCU?
I'd like ot take continual readings and ship it up to a server for collection.
I have somehting of a sample for doing this with a temp sensor but not something like this one. I'll include the temp info below. I guress I'm kind of lost with the mV value to temp conversion, although I guess I could just pick somehting random for dry versus wet.
Any thoughts for a beginner here?
Sample:
const int ANALOG_INPUT = A0; const int LED_PIN = D1;
void setup() { // Configure ADC pin as input pinMode(ANALOG_INPUT, INPUT);
// The pin our LED is connected to is a digital output pinMode(LED_PIN, OUTPUT);
// Turn the LED off digitalWrite(LED_PIN, HIGH);
// Open serial line Serial.begin(115200);
}
void loop() { // Read the analog input int value = analogRead(ANALOG_INPUT); // Convert the value into a temperature T = (value/1023) * 3300mV / 10(mV/degF) float temperature = ((float)value / 1023.0) * 3300 / 10; // Blink the LED digitalWrite(LED_PIN, LOW); delay(100); digitalWrite(LED_PIN, HIGH);
// Write temperature to the Serial line Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" degrees F.");
// Wait 3 seconds before starting over delay(3000);
}
DougL56 6 years ago
> Does anyone know if there are samples outthere for interfacing the TE215 sensor with the analog input of something like the NodeMCU?
Sort of. I'm using a similar sensor attached to A0 on a NodeMCU board.
Sensor: https://www.banggood.com/Soil-Hygrometer-Humidity-...
The analog output from this particular sensor only varies from about 4.5v dry to 2.5v immersed in a glass of water, so the corresponding analogRead values from A0 have a more limited range than 0..1024.
The only change in your code would be to include the NodeMCU pin definitions:
#ifndef D1
#define D0 16
#define D1 5
#define D2 4
#define D3 0
#define D4 2
#define D5 14
#define D6 12
#define D7 13
#define D8 15
#define D9 3
#define D10 1
#endif
nk23 6 years ago
Just want to know ,how can we transmit this data from the sensor ?what are the communication options available?
Thanks in advance.
NK
karpada 6 years ago
// Simpler led control
digitalWrite(led1, sensorValue >= 0 ? HIGH : LOW); // Always high
digitalWrite(led2, sensorValue >= 250 ? HIGH : LOW);
digitalWrite(led3, sensorValue >= 410 ? HIGH : LOW);
digitalWrite(led4, sensorValue >= 615 ? HIGH : LOW);
digitalWrite(led5, sensorValue >= 820 ? HIGH : LOW);
SteveB15 9 years ago
Nice job but it does need a few simple refinements to make it practical...
Add 1K resistors to the LEDs and correct the code so that the red LED will light.
The probe only needs to be on while a reading is taken, so poll the probe for one second every half hour by driving it from a digital pin. In my example code I used D7. This greatly improves power consumption and extends the life of the probe by several orders of magnitude since damage by electrolysis will be insignificant. If you want to check after watering, just press reset for a new reading.
Here's my modified code with probe polling:
/*
Innovativetom.com
stevebrace.co.uk
Flower Pot Soil Mosture Sensor
A0 - Soil Mosture Sensor
D2:D6 - LEDS 1,2,3,4,5
LED1 - Green
LED2 - Green
LED3 - Green
LED4 - YELLOW
LED5 - RED
Connect the Soil Mosture Sensor to anolog input pin 0,
and your 5 led to digital out 2-6
*/
int led1 = 2;
int led2 = 3;
int led3 = 4;
int led4 = 5;
int led5 = 6;
int probe = 7;
int mostureSensor = 0;
void setup() {
// Serial Begin so we can see the data from the mosture sensor in our serial input window.
Serial.begin(9600);
// setting the led pins to outputs
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(probe, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
// Power-up the probe and pause for the driver
digitalWrite(probe, HIGH);
delay(1000);
// read the input on analog pin 0:
int sensorValue = analogRead(mostureSensor);
// print out the value you read:
Serial.println(sensorValue);
if (sensorValue >= 820)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, HIGH);
}
else if (sensorValue >= 615 && sensorValue < 820)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led5, LOW);
}
else if (sensorValue >= 410 && sensorValue < 615)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
else if (sensorValue >= 250 && sensorValue < 410)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
else if (sensorValue >= 0 && sensorValue < 250)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
}
// Power-down the probe
digitalWrite(probe, LOW);
delay(1800000); // wait half an hour
}
MaddisonA1 7 years ago
COULD YOU PLEASE SEND ANY PHOTOS YOU HAVE OF THIS SETUP. thanks
ABHINAV REDDY 8 years ago
SteveB15 8 years ago
ABHINAV REDDY 8 years ago
//power the probe etc
Is that the part of code,which transistor should I use
JasonEdinburgh 8 years ago
if you use a relay module like this then it has the transistor and diode already
http://img.dxcdn.com/productimages/sku_319093_1.jp...
I found with mine that it was a LOW signal that caused the relay to engage. (not a high signal as I expected). It also needed just under 5v to work. Read the datasheet info on whichever module you use.