#include <ESP32Servo.h>
#include <DHT.h>
#define DHTPIN 5
#define DHTTYPE DHT22
#define TRIG_PIN 2
#define ECHO_PIN 4
#define SERVO_PIN 22
#define DISTANCE_THRESHOLD 10 // threshold jarak dalam cm
DHT dht(DHTPIN, DHTTYPE);
Servo servo;
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
servo.attach(SERVO_PIN);
servo.write(90); // Set awal servo ke posisi tengah (90 derajat)
dht.begin(); // Mulai sensor DHT
}
void loop() {
// Baca suhu dan kelembaban dari sensor DHT
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Trigger sensor ultrasonik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Mengukur durasi pulsa
float duration_us = pulseIn(ECHO_PIN, HIGH);
// Menghitung jarak berdasarkan durasi pulsa
float distance_cm = duration_us * 0.034 / 2;
// Mengatur posisi servo berdasarkan jarak
if (distance_cm < DISTANCE_THRESHOLD) {
servo.write(0); // Posisi servo ke bawah (0 derajat) saat objek terdeteksi dalam jarak threshold
} else {
servo.write(90); // Posisi servo ke tengah (90 derajat) saat tidak ada objek dalam jarak threshold
}
// Menampilkan data ke serial monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.println(" C");
Serial.print("Kelembaban: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Jarak: ");
Serial.print(distance_cm);
Serial.println(" cm");
delay(1000); // Tunggu 1 detik sebelum mengulangi loop
}