#include <DHT.h>
#include <DHT_U.h>
// Konfigurasi pin
#define DHT_PIN 4 // Pin data DHT22
#define TRIG_PIN 2 // Pin TRIG untuk sensor ultrasonik
#define ECHO_PIN 34 // Pin ECHO untuk sensor ultrasonik
#define RELAY_IN1_PIN 15 // Pin untuk Relay in1 (LED)
#define RELAY_IN2_PIN 16 // Pin untuk Relay in2 (Tandon Air)
DHT_Unified dht(DHT_PIN, DHT22);
// Fungsi untuk membaca suhu dan kelembaban dari sensor DHT22
void baca_sensor_dht22(float &suhu, float &kelembaban) {
sensors_event_t event;
dht.temperature().getEvent(&event);
suhu = event.temperature;
dht.humidity().getEvent(&event);
kelembaban = event.relative_humidity;
}
// Fungsi untuk mengukur jarak dengan sensor ultrasonik
float ukur_jarak_ultrasonik() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
float duration = pulseIn(ECHO_PIN, HIGH);
float jarak = (duration / 2) * 0.0344; // Konversi ke sentimeter
return jarak;
}
void setup() {
Serial.begin(9600);
dht.begin();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(RELAY_IN1_PIN, OUTPUT);
pinMode(RELAY_IN2_PIN, OUTPUT);
}
void loop() {
float suhu, kelembaban;
float jarak;
baca_sensor_dht22(suhu, kelembaban);
jarak = ukur_jarak_ultrasonik();
// Log suhu dan kelembaban
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print("°C, Kelembaban: ");
Serial.print(kelembaban);
Serial.println("%");
Serial.print("Jarak : ");
Serial.println(jarak);
// Kontrol Relay in1 (LED) berdasarkan suhu
if (suhu > 25) {
digitalWrite(RELAY_IN1_PIN, HIGH);
} else {
digitalWrite(RELAY_IN1_PIN, LOW);
}
// Kontrol Relay in2 (Tandon Air) berdasarkan jarak
if (jarak > 130) {
digitalWrite(RELAY_IN2_PIN, HIGH);
} else {
digitalWrite(RELAY_IN2_PIN, LOW);
}
delay(2000);
}