#define BLYNK_TEMPLATE_ID "TMPL5FphR5uo1"
#define BLYNK_TEMPLATE_NAME "Smart Gardening System"
//Libraries
#include <DHT.h> // for temperature and humidity sensor
#include <WiFi.h> // for connecting wifi
#include <BlynkSimpleEsp32.h> // for sending data to blynk
#include <ESP32Servo.h> /// for servo motor cutting trees
//PINS
#define DHT_PIN 2
#define DHT_TYPE DHT22
#define LDR_PIN 32
#define POT_PIN 33
#define pump 4
#define cuttingMotor 15
#define lightForPlants 14
const int trigPin = 5;
const int echoPin = 18;
const int servoPin = 19;
DHT dht(DHT_PIN, DHT_TYPE);
#define BLYNK_AUTH_TOKEN "ewgRJye8q0Hi3if8VENJgfPj4m3wKEQC"
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASS ""
int pos = 0;
int soilMoisture;
int soilMoisturePercentage;
int value = 1;
#define SOUND_SPEED 0.034
#define CM_TO_INCH 0.393701
long duration;
float distanceCm;
float distanceInch;
Servo servo;
void setup() {
Serial.begin(115200);
dht.begin();
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}Serial.println("Connected to WiFi!!!");
Blynk.begin(BLYNK_AUTH_TOKEN, WIFI_SSID, WIFI_PASS);
servo.attach(servoPin, 500, 2400);
pinMode(pump, OUTPUT);
pinMode(cuttingMotor, OUTPUT);
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
pinMode(lightForPlants, OUTPUT);
}
void loop() {
Blynk.run();
// Read temperature and humidity from DHT sensor
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Read light intensity from LDR
int lightIntensity = analogRead(LDR_PIN);
// Invert the analog reading to represent higher values for higher light intensity
lightIntensity = 2048 - lightIntensity;
int lightIntensityPercent = map(lightIntensity, -2016, 2015, 0, 100);
// Read soil moisture simulation from potentiometer
soilMoisture = analogRead(POT_PIN);
soilMoisturePercentage = map(soilMoisture, 0, 2048, 0, 100);
Serial.print("Light Intensity: ");
Serial.println(lightIntensityPercent);
Serial.println(temperature);
// Send data to Blynk
Blynk.virtualWrite(V1, temperature);
Blynk.virtualWrite(V2, humidity);
Blynk.virtualWrite(V3, lightIntensityPercent);
Blynk.virtualWrite(V4, soilMoisturePercentage);
if (soilMoisturePercentage < value){
digitalWrite(pump,HIGH);
}
else {
digitalWrite(pump,LOW);
}
if (lightIntensityPercent < 25){
digitalWrite(lightForPlants, HIGH);
}
else{
digitalWrite(lightForPlants, LOW);
}
delay(2000);
cuttingTreeFunction();
}
BLYNK_WRITE(V5) {
value = param.asInt(); // Get the value from the Blynk app
Serial.println("Received value from Blynk: " + String(value));
// Do something with the received value
}
void cuttingTreeFunction(){
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculate the distance
distanceCm = duration * SOUND_SPEED/2;
// Convert to inches
distanceInch = distanceCm * CM_TO_INCH;
// Prints the distance in the Serial Monitor
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.print("Distance (inch): ");
Serial.println(distanceInch);
if (distanceInch < 50){
for (pos = 0; pos <= 180; pos += 1) {
servo.write(pos);
delay(15);
}
for (pos = 180; pos >= 0; pos -= 1) {
servo.write(pos);
delay(15);
}
}
else{
// digitalWrite(cuttingMotor, LOW);
}
}