#include <DHT.h> // Menyertakan pustaka DHT
#define echopin 33 // Mendefinisikan pin echo ultrasonik ke pin D33 di ESP32
#define trigpin 25 // Mendefinisikan pin trigger ultrasonik ke pin D25 di ESP32
const int lampu = 26; // Mendefinisikan pin D26 sebagai variabel lampu
const int ldrPin = 27; // Mendefinisikan pin LDR ke pin D27 di ESP32
const int pirPin = 12; // Mendefinisikan pin PIR ke pin D14 di ESP32
const int jarakMinimal = 50; // Jarak minimal untuk menyalakan lampu (dalam centimeter)
const int ambangLDR = 500; // Ambang nilai sensor LDR untuk menentukan kegelapan atau terang
#define DHTPIN 14 // Mendefinisikan pin D4 untuk sensor DHT
#define DHTTYPE DHT22 // Menggunakan sensor DHT22, ganti dengan DHT11 jika menggunakan sensor DHT11
DHT dht(DHTPIN, DHTTYPE); // Inisialisasi sensor DHT
void setup() {
Serial.begin(115200);
pinMode(trigpin, OUTPUT); // Menset trigpin sebagai output
pinMode(echopin, INPUT); // Menset echopin sebagai input
pinMode(lampu, OUTPUT); // Menset variabel lampu sebagai output
pinMode(pirPin, INPUT); // Menset pin PIR sebagai input
dht.begin(); // Memulai sensor DHT
}
void loop() {
// Membaca nilai dari sensor PIR
int pirValue = digitalRead(pirPin);
// Mengirim sinyal ultrasonik
digitalWrite(trigpin, LOW); // Mengatur pin ultrasonik ke low
delayMicroseconds(2);
digitalWrite(trigpin, HIGH);
delayMicroseconds(10);
digitalWrite(trigpin, LOW);
long duration = pulseIn(echopin, HIGH); // Menerima waktu pantulan gelombang ultrasonik
int jarak = duration * 0.034 / 2; // Membuat rumus untuk menghitung jarak dari hasil pantulan ultrasonik
// Membaca nilai dari sensor LDR
int nilaiLDR = analogRead(ldrPin);
// Membaca suhu dan kelembaban dari sensor DHT
float suhu = dht.readTemperature(); // Membaca suhu dalam derajat Celsius
// Membuat keputusan berdasarkan nilai sensor LDR, jarak ultrasonik, suhu, kelembaban, dan sensor PIR
if (nilaiLDR < ambangLDR && jarak > jarakMinimal && suhu > 30 && pirValue == HIGH) {
digitalWrite(lampu, HIGH); // Menyala jika gelap, jarak cukup, suhu tinggi, dan sensor PIR mendeteksi gerakan
} else {
digitalWrite(lampu, LOW); // Mati jika terang, jarak kurang, suhu rendah, atau sensor PIR tidak mendeteksi gerakan
}
// Menampilkan hasil ke Serial Monitor
Serial.print("Jarak: ");
Serial.print(jarak);
Serial.print(" cm, Nilai LDR: ");
Serial.print(nilaiLDR);
Serial.print(", Suhu: ");
Serial.print(suhu);
Serial.print(", PIR: ");
Serial.println(pirValue);
delay(1000); // Tunggu 1 detik sebelum membaca kembali data
}