#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Konstanta pin
#define DHT_PIN 13
#define DHT_TYPE DHT22
#define LDR_PIN 12
#define SOIL_PIN 14
#define RELAY_PIN 16
#define LED_PIN 21
#define BUZZER_PIN 22
// Objek
LiquidCrystal_I2C lcd(0x27, 20, 4);
DHT dht(DHT_PIN, DHT_TYPE);
// Ambang batas
const int cahayaAmbang = 2000;
const int kelembabanTanahAmbang = 1500;
void setup() {
Serial.begin(115200);
dht.begin();
// Inisialisasi I2C ESP32 (SDA = 19, SCL = 18)
Wire.begin(19, 18);
lcd.begin(20, 4);
lcd.backlight();
// Pin output
pinMode(RELAY_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Matikan semua aktuator
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
}
void loop() {
// Baca semua sensor
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
int nilaiLDR = analogRead(LDR_PIN);
int nilaiSoil = analogRead(SOIL_PIN);
// Penanda kondisi
String kondisiCahaya = (nilaiLDR > cahayaAmbang) ? "Siang" : "Malam";
String kondisiTanah = (nilaiSoil < kelembabanTanahAmbang) ? "Kering" : "Basah";
String statusPompa = "Off";
// Logika pompa
if (kondisiCahaya == "Siang" && kondisiTanah == "Kering") {
digitalWrite(RELAY_PIN, HIGH);
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
statusPompa = "On";
} else {
digitalWrite(RELAY_PIN, LOW);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
statusPompa = "Off";
}
// Tampilkan ke Serial Monitor
Serial.println("====== DATA SENSOR ======");
Serial.print("Suhu: "); Serial.println(suhu);
Serial.print("Kelembaban: "); Serial.println(kelembaban);
Serial.print("Cahaya: "); Serial.print(nilaiLDR); Serial.print(" ("); Serial.print(kondisiCahaya); Serial.println(")");
Serial.print("Soil: "); Serial.print(nilaiSoil); Serial.print(" ("); Serial.print(kondisiTanah); Serial.println(")");
Serial.print("Pompa: "); Serial.println(statusPompa);
Serial.println("==========================");
// Tampilkan ke LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: "); lcd.print(suhu, 1); lcd.print("C");
lcd.setCursor(0, 1);
lcd.print("Humidity: "); lcd.print(kelembaban, 1); lcd.print("%");
lcd.setCursor(0, 2);
lcd.print("Cahaya: "); lcd.print(nilaiLDR); lcd.print(" "); lcd.print(kondisiCahaya);
lcd.setCursor(0, 3);
lcd.print("Soil: "); lcd.print(nilaiSoil);
lcd.print(" "); lcd.print(kondisiTanah);
lcd.print(" "); lcd.print(statusPompa);
delay(3000); // Delay 3 detik
}