#include <LiquidCrystal_I2C.h>
#include <DHT.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // GANTI 0x27 kalau LCD ga muncul
DHT dht(2, DHT22); // pin, Jenis DHT
int powerPin; // untuk pengganti VCC/5vOLT
int kipas = 4; // pin untuk kipas
int ledPinHijau = 5; // pin untuk LED hijau
int ledPinKuning = 6; // pin untuk LED kuning
int buzzerPin = 7; // pin untuk buzzer
int potPin = A0; // pin untuk potensiometer
bool buzzerPlayed = false; // status buzzer sudah pernah bunyi
void setup() {
lcd.init();
lcd.backlight();
pinMode(powerPin, OUTPUT); // jadikan pin power sebagai output
digitalWrite(powerPin, LOW);
pinMode(kipas, OUTPUT);
digitalWrite(kipas, LOW);
pinMode(ledPinHijau, OUTPUT); // jadikan pin LED hijau sebagai output
digitalWrite(ledPinHijau, LOW);
pinMode(ledPinKuning, OUTPUT); // jadikan pin LED kuning sebagai output
digitalWrite(ledPinKuning, LOW);
pinMode(buzzerPin, OUTPUT); // jadikan pin buzzer sebagai output
digitalWrite(buzzerPin, LOW);
Serial.begin(9600);
dht.begin();
}
void loop() {
digitalWrite(powerPin, HIGH);
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
int potValue = analogRead(potPin); // Membaca nilai potensiometer (0-1023)
// Menentukan mode kecepatan kipas
int fanSpeed;
int fanMode;
if (potValue < 401) { // Potensiometer 0-401
fanSpeed = 400; // Mode 1
fanMode = 1;
} else if (potValue < 682) { // Potensiometer 400-681
fanSpeed = 680; // Mode 2
fanMode = 2;
} else { // Potensiometer 682-1023
fanSpeed = 1000; // Mode 3
fanMode = 3;
}
Serial.print("Suhu: ");
Serial.println(suhu);
Serial.print("Kelembapan: ");
Serial.println(kelembapan);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
lcd.print(kelembapan);
lcd.print(" %");
// Cek suhu apakah melebihi 35 derajat Celsius
if (suhu > 35.00) {
// Jika buzzer belum pernah bunyi, bunyikan
if (!buzzerPlayed) {
// Pola nada diperpanjang untuk mencapai 7 detik
tone(buzzerPin, 1000);
delay(1000);
noTone(buzzerPin);
delay(500);
tone(buzzerPin, 1000);
delay(1000);
noTone(buzzerPin);
delay(500);
tone(buzzerPin, 1000);
delay(1000);
noTone(buzzerPin);
delay(500);
tone(buzzerPin, 1000);
delay(1000);
noTone(buzzerPin);
buzzerPlayed = true; // Set status buzzer sudah pernah bunyi
}
// Hidupkan kipas dan LED hijau saat suhu tinggi
analogWrite(kipas, fanSpeed); // Atur kecepatan kipas dengan PWM
digitalWrite(ledPinHijau, HIGH); // Hidupkan LED hijau
digitalWrite(ledPinKuning, LOW); // Matikan LED kuning
// Tampilkan mode kecepatan kipas pada Serial Monitor
Serial.print("Kecepatan Kipas: ");
Serial.println(fanSpeed);
Serial.print("Mode Kipas: ");
Serial.println(fanMode);
} else {
// Matikan kipas dan LED saat suhu normal
digitalWrite(kipas, LOW); // Matikan kipas
digitalWrite(ledPinHijau, LOW); // Matikan LED hijau
digitalWrite(ledPinKuning, HIGH); // Hidupkan LED kuning
// Reset status buzzer jika suhu turun di bawah 35 derajat Celsius
if (buzzerPlayed && suhu <= 35.00) {
buzzerPlayed = false; // Reset status buzzer
}
// Tampilkan pesan "Kipas mati" pada Serial Monitor
Serial.println("Kipas mati");
}
delay(2000); // Interval pembacaan suhu
}