#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Pin sensor dan buzzer
#define DHTPIN 5 // Pin data sensor DHT22 terhubung ke GPIO 5
#define DHTTYPE DHT22 // Tipe sensor DHT yang digunakan
#define BUZZER_PIN 13 // Pin untuk menghubungkan buzzer
// Inisialisasi DHT22
DHT dht(DHTPIN, DHTTYPE);
// Inisialisasi LCD I2C dengan alamat 0x27, ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
Serial.println(F("DHT22 Sensor with Buzzer and LCD"));
// Inisialisasi sensor DHT, buzzer, dan LCD
dht.begin();
pinMode(BUZZER_PIN, OUTPUT);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
}
void loop() {
// Menunggu pembacaan sensor siap
delay(2000);
// Membaca kelembapan
float humidity = dht.readHumidity();
// Membaca suhu dalam Celcius
float temperature = dht.readTemperature();
// Periksa apakah pembacaan gagal
if (isnan(humidity) || isnan(temperature)) {
Serial.println(F("Gagal membaca data dari sensor DHT22!"));
lcd.setCursor(0, 0);
lcd.print("Sensor Error ");
return;
}
// Menampilkan hasil ke Serial Monitor
Serial.print(F("Kelembapan: "));
Serial.print(humidity);
Serial.print(F("% Suhu: "));
Serial.print(temperature);
Serial.println(F("°C"));
// Menampilkan hasil pada LCD
lcd.setCursor(6, 0);
lcd.print(temperature);
lcd.print(" C ");
lcd.setCursor(12, 1);
lcd.print(humidity);
lcd.print("% ");
// Kondisi ketika suhu atau kelembapan melebihi batas
if (temperature > 30 || humidity > 70) {
digitalWrite(BUZZER_PIN, HIGH); // Nyalakan buzzer
Serial.println(F("Peringatan: Suhu atau Kelembapan tinggi!"));
lcd.setCursor(0, 0);
lcd.print("WARNING! Suhu: ");
} else {
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer
}
}