#include <DHT.h> // Library untuk sensor DHT22
#include <ESP32Servo.h> // Library untuk mengontrol servo motor pada ESP32
// Definisi pin
#define DHTPIN 33 // Pin ESP32 yang tersambung ke pin Data DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT22
#define TRIG_PIN 27 // Pin Trig sensor ultrasonik HC-SR04
#define ECHO_PIN 25 // Pin Echo sensor ultrasonik HC-SR04
#define SERVO_PIN 4 // Pin untuk kontrol servo
#define DISTANCE_THRESHOLD 10 // Jarak threshold dalam cm untuk membuka pakan
#define SERVO_OPEN_ANGLE 90 // Sudut untuk membuka pakan (servo bergerak ke 90 derajat)
#define SERVO_CLOSE_ANGLE 0 // Sudut untuk menutup pakan (servo bergerak ke 0 derajat)
// Inisialisasi objek
DHT dht(DHTPIN, DHTTYPE); // Membuat objek DHT
Servo servo; // Membuat objek servo
// Deklarasi variabel
long duration_us; // Durasi pulse dari sensor ultrasonik
float distance_cm; // Jarak yang terukur dalam cm
float hum = 0; // Variabel untuk menyimpan nilai kelembaban
float temp = 0; // Variabel untuk menyimpan nilai suhu
void setup() {
Serial.begin(9600); // Inisialisasi komunikasi serial dengan baud rate 9600
pinMode(TRIG_PIN, OUTPUT); // Set pin trigger sebagai OUTPUT
pinMode(ECHO_PIN, INPUT); // Set pin echo sebagai INPUT
servo.attach(SERVO_PIN); // Menghubungkan servo ke pin yang ditentukan
dht.begin(); // Memulai sensor DHT
delay(2000); // Memberi jeda waktu untuk inisialisasi
}
void loop() {
// Membaca kelembaban dan suhu dari sensor DHT22
hum = dht.readHumidity();
temp = dht.readTemperature(); // Membaca suhu dalam Celsius
// Memeriksa apakah pembacaan sensor DHT valid
if (isnan(hum) || isnan(temp)) {
Serial.println("Gagal mendapat data dari sensor DHT!");
delay(2000);
return;
}
// Menampilkan kelembaban dan suhu
Serial.print("Kelembaban: ");
Serial.print(hum);
Serial.print("% Suhu: ");
Serial.print(temp);
Serial.println("°C");
// Mengukur jarak dari sensor ultrasonik
digitalWrite(TRIG_PIN, LOW); // Pastikan trigger LOW
delayMicroseconds(2); // Tunggu 2 microseconds
digitalWrite(TRIG_PIN, HIGH); // Trigger HIGH selama 10 microseconds
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW); // Trigger LOW
duration_us = pulseIn(ECHO_PIN, HIGH); // Mengukur durasi pulse
distance_cm = duration_us * 0.0344 / 2; // Menghitung jarak dalam cm
// Membuka atau menutup servo berdasarkan jarak dari sensor ultrasonik
if (distance_cm < DISTANCE_THRESHOLD) {
Serial.println("Pakan kosong, membuka pakan...");
servo.write(SERVO_OPEN_ANGLE); // Membuka pakan
} else {
Serial.println("Pakan hampir penuh, menutup pakan...");
servo.write(SERVO_CLOSE_ANGLE); // Menutup pakan
}
// Memeriksa suhu dan menampilkan pesan yang sesuai
if (temp > 25) {
Serial.println("Suhu terlalu panas!");
} else if (temp < 15) {
Serial.println("Suhu terlalu dingin!");
}
delay(2000); // Tunggu 2 detik sebelum pembacaan berikutnya
}