#include <Servo.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
Servo myServo;
DHT myDHT(7, DHT22);
LiquidCrystal_I2C lcdScreen(0x27, 16, 2);
const int soilMoisturePin = A0; // Pin untuk sensor kelembapan tanah
int previousSoilMoisture = 0; // Variabel untuk menyimpan kelembapan tanah sebelumnya
void setup() {
myServo.attach(9);
myServo.write(0);
myDHT.begin();
lcdScreen.init();
lcdScreen.backlight();
Serial.begin(9600);
}
void loop() {
float humidity = myDHT.readHumidity();
float temperature = myDHT.readTemperature();
// Membaca nilai kelembapan tanah
int soilMoisture = analogRead(soilMoisturePin);
Serial.println(soilMoisture);
if (soilMoisture < 500) {
Serial.println("Siram tanaman karena kelembaban tanah rendah.");
irrigatePlant();
}
// Menghitung perubahan kelembapan tanah per derajat atau per interval waktu
int soilMoistureChange = soilMoisture - previousSoilMoisture;
previousSoilMoisture = soilMoisture;
// Mengatur interval waktu penyiraman berdasarkan suhu
int wateringInterval = 1000; // Default: 10 detik
if (temperature > 30) {
wateringInterval = 1000; // Jika suhu di atas 30 derajat Celsius, disiram setiap 5 detik
}
if (humidity >= 0 && temperature >= 0) {
myServo.write(180);
Serial.println("Siram tanaman.");
lcdScreen.setCursor(0, 0);
lcdScreen.print("Humidity: ");
lcdScreen.print(humidity);
lcdScreen.print(" %");
lcdScreen.setCursor(0, 1);
lcdScreen.print("Temperature: ");
lcdScreen.print(temperature);
lcdScreen.print(" C");
delay(1000);
myServo.write(0);
lcdScreen.clear();
}
// Menampilkan perubahan kelembapan tanah per derajat ke Serial Monitor
Serial.print("Soil Moisture Change: ");
Serial.println(soilMoistureChange);
// Delay sesuai dengan interval waktu penyiraman
delay(wateringInterval);
}
void irrigatePlant() {
myServo.write(180);
Serial.println("Siram tanaman.");
delay(1000);
myServo.write(0);
}