Skip to main content

Soil Moisture Monitoring using ESP8266 and Soil Moisture Sensor

Hey folks

In this tutorial, we will learn how to interface LM393 module(Soil Moisture Sensor)with NodeMcu(ESP8266). LM393 is a simple water sensor can be used to detect soil moisture when the soil moisture deficit module plant waterer device, so that the plants in our garden without people to manage; Adjustable sensitivity adjust the digital potentiometer (shown in blue) Operating Voltage 3.3V-5V; Module Dual Output mode, a simple.

LM393 Soli Moisture Sensor Module(over view) 


Components Required:
  • LM393 Soil Sensor 
  • NodeMcu(ESP8266) 
  • Connecting wires(male to male) 
  • Breadboard 
Follow the Image below for circuit connection reference:-

(Interfacing all components) 

Here Pin A0 of the moisture sensor module connects to pin A0 on the ESP8266
The GND pin on the moisture sensor module connects to a GND pin on the ESP8266
The VCC pin on the moisture sensor module connects to a 3v3 pin on the ESP8266
D0 pin remain disconnected

After making the circuit dump the code given below:-

#include <ESP8266WiFi.h>
const char* ssid = "Enter SSID";
const char* password = "Enter password";
const int redPin = 4; // ~D2
const int greenPin = 12; // ~D6
const int bluePin = 14; // ~D5
int WiFiStrength = 0;
WiFiServer server(80);
void setup() {
Serial.begin(115200);
delay(1000);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT);
analogWrite(redPin, 280);
analogWrite(greenPin, 300);
analogWrite(bluePin, 300);
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
//WiFi.config(IPAddress(192, 168, 1, 221), IPAddress(192, 168, 1, 1), IPAddress(255, 255, 255, 0));
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
server.begin();
Serial.println("Server started");
Serial.print("Use this URL to connect: ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}

double analogValue = 0.0;
double analogVolts = 0.0;
unsigned long timeHolder = 0;
void loop() {
WiFiStrength = WiFi.RSSI();
analogValue = analogRead(A0);
analogVolts = (analogValue * 3.08) / 1024;
int chartValue = (analogValue * 100) / 400;
chartValue = 100 - chartValue;
if (millis() - 15000 > timeHolder)
{ timeHolder = millis();
if (chartValue <= 25) { // 0-25 is red "dry"
analogWrite(redPin, 1000);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
} else if (chartValue > 25 && chartValue <= 75) // 26-75 is green
analogWrite(redPin, 0);
analogWrite(greenPin, 1000);
analogWrite(bluePin, 0);
}
else if (chartValue > 75 ) // 76-100 is blue
{ analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 1000);
}
delay(1000); // this is the duration the LED will stay ON
analogWrite(redPin, 0);
analogWrite(greenPin, 0);
analogWrite(bluePin, 0);
}
// Serial data
Serial.print("Analog raw: ");
Serial.println(analogValue);
Serial.print("Analog V: ");
Serial.println(analogVolts);
Serial.print("ChartValue: ");
Serial.println(chartValue);
Serial.print("TimeHolder: ");
Serial.println(timeHolder);
Serial.print("millis(): ");
Serial.println(millis());
Serial.print("WiFi Strength: ");
Serial.print(WiFiStrength); Serial.println("dBm");
Serial.println(" ");
delay(1000); // slows amount of data sent via serial
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println("new client");
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // do not forget this one
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println(" <head>");
client.println("<meta http-equiv=\"refresh\" content=\"60\">");
client.println(" <script type=\"text/javascript\" src=\"https://www.gstatic.com/charts/loader.js\"></script>");
client.println(" <script type=\"text/javascript\">");
client.println(" google.charts.load('current', {'packages':['gauge']});");
client.println(" google.charts.setOnLoadCallback(drawChart);");
client.println(" function drawChart() {");
client.println(" var data = google.visualization.arrayToDataTable([ ");
client.println(" ['Label', 'Value'], ");
client.print(" ['Moisture', ");
client.print(chartValue);
client.println(" ], ");
client.println(" ]); ");
// setup the google chart options here
client.println(" var options = {");
client.println(" width: 400, height: 120,");
client.println(" redFrom: 0, redTo: 25,");
client.println(" yellowFrom: 25, yellowTo: 75,");
client.println(" greenFrom: 75, greenTo: 100,");
client.println(" minorTicks: 5");
client.println(" };");
client.println(" var chart = new google.visualization.Gauge(document.getElementById('chart_div'));");
client.println(" chart.draw(data, options);");
client.println(" setInterval(function() {");
client.print(" data.setValue(0, 1, ");
client.print(chartValue);
client.println(" );");
client.println(" chart.draw(data, options);");
client.println(" }, 13000);");
client.println(" }");
client.println(" </script>");
client.println(" </head>");
client.println(" <body>");
client.print("<h1 style=\"size:12px;\">Karkhana Soil Moisture</h1>");
// show some data on the webpage and the guage
client.println("<table><tr><td>");
client.print("WiFi Signal Strength: ");
client.println(WiFiStrength);
client.println("dBm<br>");
client.print("Analog Raw: ");
client.println(analogValue);
client.print("<br>Analog Volts: ");
client.println(analogVolts);
client.println("<br><a href=\"/REFRESH\"\"><button>Refresh</button></a>");
client.println("</td><td>");
client.println("<div id=\"chart_div\" style=\"width: 300px; height: 120px;\"></div>");
client.println("</td></tr></table>");
client.println("<body>");
client.println("</html>");
delay(1);
Serial.println("Client disonnected");
Serial.println("");
}


After dumping the code we can check our output in the serial monitor as well as in the URL shown below:-


Output at the time of working:-

(During circuit is running)
Thinking?

Join our hands-on training courses.
To know more visit us at Karkhana Training Portal.

Comments

Popular posts from this blog

Arduino Based Piano Project

This video will illustrate to you how to make a simple piano by using IR Modules. Based on the frequency of sa, re, ga, ma, pa, dha, ni and sa the tone of the buzzer will change. Video Link Components Required: 1> I.R. Modules 2> Arduino Uno 3> Jumper Wires 4>Small Breadboard Circuit Diagram Arduino Code: int button_C = 2; int button_D = 3; int button_E = 4; int button_F = 5; int button_G = 6; int button_A = 7; int button_B = 8; int button_Cup = 9; int speaker = 10; int buttonstate_C = 0; int buttonstate_D = 0; int buttonstate_E = 0; int buttonstate_F = 0; int buttonstate_G = 0; int buttonstate_A = 0; int buttonstate_B = 0; int buttonstate_Cup = 0; //NOTES         'c'  , 'd',  'e',  'f',  'g', 'a',  'b',  'C' int tones[] = { 240, 254, 285, 320, 359, 280, 427, 956 }; //freq int Cur_tone = 0; void setup() {   pinMode(button_C, OUTPUT);   pinMode(button_D, INPUT);   p...

Getting Started with Arduino

What is Arduino? Arduino is basically an open source electronics platform which is having easy to use hardware and software implementation. It’s a micro-controller interfaced with other vital components like programmer ICs, voltage regulator etc. With the help of this, we can interface various input (sensors) and output (LED's) components. Why Arduino? Arduino is not just a micro-controller it is also interfaced with several other components which make the job of the user very simple. Arduino Uno Pin-Out How Arduino works? An input of 5v is given to the board using a USB cable (not necessary) through a laptop or any other convenient power source. Microcontrollers are usually programmed through a programmer unless we have a firmware in our microcontroller that allows installing new firmware without any external programmer. This is bootloader. All the controllers present in UNO are from ATMEL Semiconductor (Now acquired by Microchip). We hav...

Arduino Based Audio Spectrum Analyzer Project

This Video will illustrate you how to visualize audio left and right signals in bar-graph in 16X2 LCD Display using Arduino. Components Required: 1. Arduino UNO 2. 16X2 LCD Display 3. 3.5mm Audio Jack 4. Jumper Wires   Connection Diagram: Video Link Arduino Code #include <LiquidCrystal.h> #include <fix_fft.h> #define DEBUG 0 #define L_IN 1 // Audio input A0 Arduino #define R_IN 0 // Audio input A1 Arduino const int Yres = 8; const int gain = 3; float peaks[64]; char im[64], data[64]; char Rim[64], Rdata[64]; char data_avgs[64]; int debugLoop; int i; int load; LiquidCrystal lcd(11, 10, 7, 6, 5, 4); // pins to LCD // Custom CHARACTERS byte v1[8] = {   B00000, B00000, B00000, B00000, B00000, B00000, B00000, B11111 }; byte v2[8] = {   B00000, B00000, B00000, B00000, B00000, B00000, B00000, B11111 }; byte v3[8] = {   B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111 }; byte v4[8] = {   B0...