#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 2 // Pin DHT22 di Arduino
#define DHTTYPE DHT22 // Tipe sensor DHT22
#define TRIG_PIN 3 // Pin TRIG sensor ultrasonik
#define ECHO_PIN 4 // Pin ECHO sensor ultrasonik
#define LED_PIN 5 // Pin LED indikator suhu
#define BUZZER_PIN 6 // Pin buzzer
DHT dht(DHTPIN, DHTTYPE); // Inisialisasi DHT22
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inisialisasi LCD I2C dengan alamat 0x27 dan ukuran 16x2
void setup() {
Serial.begin(9600); // Mulai komunikasi serial
dht.begin(); // Mulai sensor DHT22
lcd.begin(16, 2); // Mengatur LCD 16x2
lcd.backlight(); // Menyalakan lampu latar LCD
pinMode(TRIG_PIN, OUTPUT); // Set pin TRIG sebagai output
pinMode(ECHO_PIN, INPUT); // Set pin ECHO sebagai input
pinMode(LED_PIN, OUTPUT); // Set pin LED sebagai output
pinMode(BUZZER_PIN, OUTPUT); // Set pin buzzer sebagai output
}
void loop() {
// Membaca data suhu dan kelembaban dari DHT22
float temperature = dht.readTemperature(); // Baca suhu (°C)
float humidity = dht.readHumidity(); // Baca kelembaban (%)
// Mengecek apakah data sensor DHT22 valid
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Gagal membaca data dari DHT22!");
lcd.clear();
lcd.print("Sensor Error");
} else {
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print(" °C, Kelembaban: ");
Serial.print(humidity);
Serial.println(" %");
// Menampilkan suhu dan kelembaban di LCD
lcd.clear();
lcd.setCursor(0, 0); // Baris pertama
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
// Menyalakan LED jika suhu melebihi ambang batas
if (temperature > 30) {
digitalWrite(LED_PIN, LOW); // LED menyala jika suhu > 30°C
} else {
digitalWrite(LED_PIN, HIGH); // LED mati jika suhu <= 30°C
}
}
// Mengukur jarak dengan sensor HC-SR04
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Membaca waktu respons echo
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2; // Menghitung jarak (cm)
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
// Menampilkan jarak di LCD
lcd.setCursor(0, 1); // Baris kedua
lcd.print("Jarak: ");
lcd.print(distance);
lcd.print(" cm "); // Tambahkan spasi untuk menghapus karakter sebelumnya
// Mengaktifkan buzzer jika jarak kurang dari 20 cm
if (distance < 20) {
digitalWrite(BUZZER_PIN, HIGH); // Buzzer aktif
} else {
digitalWrite(BUZZER_PIN, LOW); // Buzzer mati
}
delay(2000); // Tunggu 2 detik sebelum loop berikutnya
}