#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include <ESP32Servo.h>
// Konfigurasi Pin
#define DHTPIN 23
#define DHTTYPE DHT22
#define LED_KIPAS 15 // LED Biru
#define LED_PEMANAS 16 // LED Kuning
#define SERVO_PIN 19
#define BUZZER_PIN 14
// Inisialisasi
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 21, 22); // Alamat I2C LCD
Servo myservo;
const int FINGERPRINT_PIN = 35;
// Rentang suhu dan kelembaban ideal
const float suhuMin = 24.0;
const float suhuMax = 26.0;
const float kelembabanMin = 35.0;
const float kelembabanMax = 55.0;
void setup() {
// Inisialisasi
dht.begin();
lcd.begin(21, 22);
lcd.init();
lcd.backlight();
myservo.attach(SERVO_PIN);
pinMode(LED_KIPAS, OUTPUT);
pinMode(LED_PEMANAS, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(115200);
myservo.write(0); // Servo dalam posisi terkunci
}
void loop() {
// Membaca suhu dan kelembaban
float suhu = dht.readTemperature();
float kelembaban = dht.readHumidity();
// Menampilkan hasil pada LCD
lcd.setCursor(0,0);
lcd.print("Suhu: ");
lcd.print(suhu);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("Kelembaban: ");
lcd.print(kelembaban);
lcd.print(" %");
// Serial Monitor output
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" °C | Kelembaban: ");
Serial.print(kelembaban);
Serial.println(" %");
// Logika Fuzzy untuk kontrol suhu dan kelembaban
if (suhu < suhuMin) {
digitalWrite(LED_PEMANAS, HIGH); // Hidupkan pemanas
digitalWrite(LED_KIPAS, LOW); // Matikan kipas
Serial.println("Pemanas dihidupkan.");
}
else if (suhu > suhuMax) {
digitalWrite(LED_KIPAS, HIGH); // Hidupkan kipas
digitalWrite(LED_PEMANAS, LOW); // Matikan pemanas
Serial.println("Kipas dihidupkan.");
}
else {
digitalWrite(LED_KIPAS, LOW); // Matikan kipas
digitalWrite(LED_PEMANAS, LOW); // Matikan pemanas
Serial.println("Suhu dalam batas normal.");
}
// Kontrol kelembaban
if (kelembaban < kelembabanMin) {
// Logika untuk mengaktifkan dehumidifier, jika ada (implementasi bisa bervariasi)
tone(BUZZER_PIN, 1000); // Buzzer bunyi
Serial.println("Kelembaban rendah, buzzer dihidupkan.");
}
else {
noTone(BUZZER_PIN); // Matikan buzzer
Serial.println("Kelembaban dalam batas normal atau tinggi.");
}
// Mengontrol sistem keamanan dengan fingerprint (pengendalian servo)
if (digitalRead(FINGERPRINT_PIN) == HIGH) { // Misal pin sudah ada
myservo.write(90); // Buka kunci (posisi servo)
Serial.println("Kunci dibuka.");
delay(5000); // Tunggu 5 detik
myservo.write(0); // Kunci kembali
Serial.println("Kunci dikembalikan.");
}
delay(2000); // Interval antar pembacaan
}