#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); //
Servo myservo;
int soilMoisturePin = 2; // Pin analog untuk sensor kelembaban tanah
int ledDryPin = 13; // Pin digital untuk LED kondisi kering
int ledWetPin = 12; // Pin digital untuk LED kondisi sangat lembab
int ledMoistPin = 14; // Pin digital untuk LED kondisi pas
int buzzerPin = 17; //Pin digital untuk Buzzer
int dryThreshold = 20; // Ambang batas kekeringan, sesuaikan dengan kondisi tanah Anda
float moistThreshold = 60; // Ambang batas kelembabaan pas, sesuaikan dengan kondisi tanah Anda
void setup() {
Serial.begin(115200); //Komunikasi serial
lcd.init(); //Mengaktifkan LCD
lcd.backlight(); //Mengaktifkan Background LCD
lcd.setCursor(0,0); //Menggeser Letak Teks (x,y)
lcd.print("KELEMBABAN TANAH"); //Menampilkan Teks
lcd.setCursor(2,1);
lcd.print("KELOMPOK C1");
myservo.attach(26);
pinMode(ledDryPin, OUTPUT);
pinMode(ledMoistPin, OUTPUT);
pinMode(ledWetPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
delay(4000); //Jeda Waktu
lcd.clear(); //Membersihkan Tampilan Teks pada LCD
}
void loop() {
float sensor = analogRead(soilMoisturePin); // Baca nilai kelembaban tanah
int soilMoistureValue = sensor/4095*100;
//Menampilkan hasil kelembaban pada Serial Monitor
Serial.print("Nilai Kelembaban Tanah: ");
Serial.println(soilMoistureValue);
//Menampilkan teks "Status :" pada LCD
lcd.setCursor(0,0);
lcd.print("Nilai :");
lcd.setCursor(8,0);
lcd.print(soilMoistureValue);
lcd.setCursor(0,1);
lcd.print("Status : ");
// Kendalikan LED dan LCD berdasarkan tingkat kelembaban
if (soilMoistureValue < dryThreshold) {
digitalWrite(ledDryPin, HIGH); // Kondisi kering: Hidupkan LED kering
digitalWrite(ledMoistPin, LOW); // Matikan LED pas
digitalWrite(ledWetPin, LOW); // Matikan LED sangat lembab
myservo.write(0); // control servo to go to position in variable 'pos'
lcd.setCursor(9,1);
lcd.print("KERING");
//lcd.clear();
tone(buzzerPin,1000);
}
else if (soilMoistureValue < moistThreshold) {
digitalWrite(ledDryPin, LOW); // Matikan LED kering
digitalWrite(ledMoistPin, HIGH); // Kondisi pas: Hidupkan LED pas
digitalWrite(ledWetPin, LOW); // Matikan LED sangat lembab
myservo.write(180);
lcd.setCursor(9,1);
lcd.print("PAS ");
//lcd.clear();
noTone(buzzerPin);
}
else {
digitalWrite(ledDryPin, LOW); // Matikan LED kering
digitalWrite(ledMoistPin, LOW); // Matikan LED pas
digitalWrite(ledWetPin, HIGH); // Kondisi sangat lembab: Hidupkan LED sangat lembab
myservo.write(180);
lcd.setCursor(9,1);
lcd.print("BASAH ");
//lcd.clear();
noTone(buzzerPin);
}
delay(100); // Tunggu 0.1 detik sebelum membaca ulang
}