#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// Pin Definitions
#define DHTPIN 2 // Pin data DHT22 ke pin 2 Arduino
#define DHTTYPE DHT22 // Tipe sensor DHT22
#define LED_PIN 7 // Pin untuk LED merah
#define BUZZER_PIN 8 // Pin untuk buzzer
// Batas suhu untuk peringatan (dalam derajat Celsius)
const float WARNING_TEMP = 24.0;
// Inisialisasi sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Inisialisasi LCD I2C (Ubah alamat jika tidak bekerja: 0x27 atau 0x3F)
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
// Inisialisasi pin output
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
// Mulai sensor DHT
dht.begin();
delay(2000); // Waktu stabilisasi sensor
// Mulai LCD
lcd.init();
lcd.backlight(); // Nyalakan backlight LCD
lcd.print("Monitoring Suhu");
delay(2000);
lcd.clear();
// Mulai Serial Monitor untuk debugging
Serial.begin(9600);
Serial.println("Sistem Monitoring Suhu dengan DHT22 dan LCD");
}
void loop() {
// Baca suhu dari sensor DHT22
float temperature = dht.readTemperature(); // Suhu dalam Celsius
// Cek jika pembacaan sensor gagal
if (isnan(temperature)) {
Serial.println("Error: Gagal membaca sensor!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Error: Sensor");
lcd.setCursor(0, 1);
lcd.print("Tidak Terbaca!");
delay(2000);
return; // Lewati loop jika sensor gagal membaca
}
// Tampilkan suhu di Serial Monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.println(" °C");
// Bersihkan LCD sebelum menampilkan data baru
lcd.clear();
// Jika suhu normal, hanya tampilkan suhu
if (temperature < WARNING_TEMP) {
lcd.setCursor(0, 0);
lcd.print("Suhu Normal");
lcd.setCursor(0, 1);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
// Matikan LED & buzzer
digitalWrite(LED_PIN, LOW);
noTone(BUZZER_PIN);
}
// Jika suhu >= 40°C, beri peringatan
else {
lcd.setCursor(0, 0);
lcd.print("Peringatan!");
lcd.setCursor(0, 1);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
// Nyalakan LED & buzzer
digitalWrite(LED_PIN, HIGH);
tone(BUZZER_PIN, 1000); // Buzzer berbunyi 1000 Hz
}
delay(2000); // Jeda 2 detik sebelum membaca data lagi
}