Remote Agriculture Solution
Blog Links:
#02: Components and Design Structure
#04: Setting up Arduino Nano 33 IOT
#08: Linking Everything to Arduino Nano 33 IOT
#09: Time to See the Work in Action
In this blog, we will complete the setup of the farm monitoring system using Arduino Nano 33 IOT and various sensors.
This part of the project includes:
1. Measuring intensity of light using LDR
2. Measuring Temperature and Humidity using DHT 11
3. Measuring Soil Moisture using soil sensor
Finally, we need to graph these results using Blynk App by sending data over WiFi.
Measuring intensity of light using LDR:
We read analog value given by LDR using A0 pin. It gives a value between 0 - 1023.
The resistance of the Light Dependent Resistor (LDR) varies according to the amount of light that falls on it. The relationship between the resistance RL and light intensity Lux for a typical LDR is
Therefore, to calculate the intensity in lux, we use this formula
lux = (500*1024 / LDRvalue) - 500;
Measuring Temperature and Humidity using DHT 11:
For using DHT 11, we use EduIntro.h library.
I simply defined the DHT 11 pin as D7
DHT11 dht11(D7); // creating the object sensor on pin 'D7'
Then, we can simply call these functions to get temperature and humidity
dht11.update(); //this meant to start the sensor
dht11.readCelsius();
dht11.readHumidity();
Measuring Soil Moisture using soil sensor:
Using the soil sensor works in a similar way like the LDR. It measures resistance to calculate moisture content. Higher resistance means less moisture.
So, we need to convert the analog value given by sensor(in between 0 - 1023) to moisture percentage.
I wrote this snippet of the code to do this.
I added 35 to account for resistance which was there even in 100% water.
//calculating moisture percentage using analog value of the sensor
moisture_value = analogRead(soil_pin);
//converting to percentage
moisture_value = (moisture_value * 100) / 1023;
//using formula to account for resistance
moisture_value = 35 + (100 - moisture_value);
Communicating to Blynk App:
We can simply define Virtual Pins to send data to Blynk App and use these lines of code. The rest of the setup needs to be done in the App.
//sending all values to the Blynk App using Virtual Pins
Blynk.virtualWrite(V5, lux);
Blynk.virtualWrite(V6, dht11.readCelsius());
Blynk.virtualWrite(V7, dht11.readHumidity());
Blynk.virtualWrite(V8, moisture_value);
Blynk App:
I used SuperChart widget for the monitoring system. It can plot data for 4 data streams which was enough for this task.
Remember to setup in the Super Chart widget:
- V5 - Intensity
- V6 - Temperature
- V7 - Humidity
- V8 - Moisture
Rest of the work is done automatically by Blynk. We just need to upload the code and wire the connections. Power up the Arduino Nano 33 IOT and run the App to see the charts.
Wiring:
Breadboard:
Schematic:
Code:
You can download the code from this link
https://github.com/aaryan2134/Remote-Agriculture-Solution/tree/main/Monitoring_system_code
//Remote Agriculture Solution //Monitoring System /* Using Arduino Nano 33 IOT to monitor farm conditions using IOT Dev: Aaryan Arora For Design For A Cause 2021 */ //libraries #define BLYNK_PRINT SerialUSB #include <SPI.h> #include <WiFiNINA.h> #include <BlynkSimpleWiFiNINA.h> #include <EduIntro.h> /* Used this library for getting temperature reading from DHT 11 Can be downloaded from here or arduino library manager https://github.com/arduino/EduIntro */ DHT11 dht11(D7); // creating the object sensor on pin 'D7' //Use your authorization token after creating new project in Blynk App char auth[] = "authorization token"; // Your WiFi credentials. // Set password to "" for open networks. char ssid[] = "your ssid"; char pass[] = "your password"; //constants int LDRpin = A0; // select the input pin for LDR int LDRvalue = 0; // variable to store the value coming from the LDR int lux = 0; //to store the intensity of light in lux int soil_pin = A2; //soil sensor pin int moisture_value ; //storing result from soil sensor BlynkTimer timer; // This function sends Arduino's up time every second to Virtual Pin (5). // In the app, Widget's reading frequency should be set to PUSH. This means // that you define how often to send data to Blynk App. void myTimerEvent() { //starting the DHT 11 sensor dht11.update(); //Getting the LDR analog value LDRvalue = analogRead(LDRpin); //Using the formula for conversion from analog value to lux lux = (512000 / LDRvalue) - 500; //calculating moisture percentage using analog value of the sensor moisture_value = analogRead(soil_pin); //converting to percentage moisture_value = (moisture_value * 100) / 1023; //using formula to account for resistance moisture_value = 35 + (100 - moisture_value); //sending all values to the Blynk App using Virtual Pins Blynk.virtualWrite(V5, lux); Blynk.virtualWrite(V6, dht11.readCelsius()); Blynk.virtualWrite(V7, dht11.readHumidity()); Blynk.virtualWrite(V8, moisture_value); } void setup() { SerialUSB.begin(9600); Blynk.begin(auth, ssid, pass); // Setup a function to be called every second timer.setInterval(1000L, myTimerEvent); } void loop() { Blynk.run(); timer.run(); // Initiates BlynkTimer }
Hardware Setup:
Software Setup:
Blynk App
Humidity Graph
Temperature Graph
Soil Moisture Graph
Light Intensity Graph
Connect with Me:
Github - aaryan2134