#include <LiquidCrystal.h>
#include "DHT.h"
#include <Buzzer.h>
#include <ESP32Servo.h>
#define DHTPIN 15 // Pin yang terhubung ke sensor DHT22
#define DHTTYPE DHT22 // Menggunakan DHT22
#define BUZZER_PIN 23 // Pin untuk buzzer
#define SERVO_PIN 16 // Pin untuk servo (coba pin PWM lain jika tidak berfungsi)
DHT dht(DHTPIN, DHTTYPE);
Servo myServo;
int pos = 0;
// Inisialisasi LCD
LiquidCrystal lcd(4, 5, 18, 19, 21, 22);
void setup() {
Serial.begin(115200);
dht.begin();
lcd.begin(16, 2); // Inisialisasi LCD 16x2
pinMode(BUZZER_PIN, OUTPUT); // Set pin buzzer sebagai output
myServo.attach(SERVO_PIN, 1000, 2000); // Set servo dengan sinyal PWM (1000us hingga 2000us)
myServo.write(pos); // Set posisi awal servo ke 0 derajat
delay(1000); // Tunggu 1 detik untuk inisialisasi
}
void loop() {
// Membaca suhu dan kelembaban dari sensor DHT
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Memastikan pembacaan sensor tidak gagal
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Error: Gagal membaca dari sensor DHT!");
return;
}
// Menampilkan hasil di Serial Monitor
Serial.print("Kelembaban: ");
Serial.print(humidity);
Serial.print("% Suhu: ");
Serial.print(temperature);
Serial.println("°C");
// Menampilkan suhu dan kelembaban di LCD
lcd.clear(); // Bersihkan layar
lcd.setCursor(0, 0); // Set cursor ke baris pertama
lcd.print("T: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1); // Set cursor ke baris kedua
// Cek kondisi suhu untuk menampilkan pesan yang sesuai
if ((temperature < 15.0 || temperature > 30.0) || (humidity > 60)) {
tone(BUZZER_PIN, 1000); // Buzzer aktif
delay(1000);
noTone(BUZZER_PIN);
lcd.print("Suhu tidak opt.");
} else {
lcd.print("Suhu optimal");
noTone(BUZZER_PIN);
}
// Debugging untuk pergerakan servo
if (temperature > 30.0) {
pos = 180; // Buka servo
Serial.println("Suhu di atas 30°C. Servo terbuka.");
} else {
pos = 0; // Tutup servo
Serial.println("Suhu di bawah atau sama dengan 30°C. Servo tertutup.");
}
Serial.print("Posisi servo: ");
Serial.println(pos); // Debug posisi servo
myServo.write(pos); // Menggerakkan servo ke posisi yang ditentukan
delay(2000); // Tunggu 2 detik sebelum pembacaan berikutnya
}