#include "DHT.h"
// Definisikan pin dan tipe sensor DHT22
#define DHTPIN 23 // Pin data DHT22 terhubung ke GPIO 23
#define DHTTYPE DHT22 // Tipe sensor DHT22
DHT dht(DHTPIN, DHTTYPE);
// Definisikan pin untuk photoresistor (LDR)
#define LDR_PIN 34
const float GAMMA = 0.7;
const float RL10 = 50;
// Definisikan pin untuk HC-SR04
#define TRIG_PIN 4 // Pin Trigger HC-SR04 terhubung ke GPIO 4
#define ECHO_PIN 0 // Pin Echo HC-SR04 terhubung ke GPIO 0
// Definisikan pin untuk relay
#define RELAY_PIN 25
void setup() {
// Inisialisasi pin
pinMode(LDR_PIN, INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RELAY_PIN, OUTPUT); // Set pin relay sebagai OUTPUT
// Mulai komunikasi serial
Serial.begin(115200); // Kecepatan serial lebih tinggi untuk ESP32
dht.begin();
Serial.println("DHT22, LDR, HC-SR04 Sensor Test with Relay Control");
}
void loop() {
// Pembacaan DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
// Periksa apakah pembacaan berhasil
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
} else {
// Tampilkan hasil pembacaan DHT22
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
// Pembacaan LDR (Lux)
int analogValue = analogRead(LDR_PIN);
// Konversi nilai analog ke tegangan
float voltage = analogValue / 4095.0 * 3.3; // Tegangan referensi ESP32 adalah 3.3V
// Hitung resistansi LDR
float resistance = 2000 * voltage / (3.3 - voltage);
// Hitung nilai lux
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
// Tampilkan nilai lux pada serial monitor
Serial.print("Lux: ");
Serial.println(lux);
// Kontrol relay berdasarkan nilai lux
if (lux > 1500) {
digitalWrite(RELAY_PIN, LOW); // Hidupkan relay jika lux > 150
Serial.println("Relay ON");
} else {
digitalWrite(RELAY_PIN, HIGH); // Matikan relay jika lux <= 150
Serial.println("Relay OFF");
}
// Pembacaan HC-SR04
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = (duration / 2.0) * 0.0344;
// Tampilkan jarak HC-SR04
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Tunggu sebelum pembacaan berikutnya
delay(1000);
}