#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
// Konfigurasi LCD 19x2
LiquidCrystal_I2C lcd(0x27, 19, 2); // Set LCD ke 19 kolom dan 2 baris
// Konfigurasi DHT22
#define DHTPIN 15 // Pin DATA DHT22
#define DHTTYPE DHT22 // Jenis sensor DHT
DHT dht(DHTPIN, DHTTYPE);
// Konfigurasi LED (Kipas)
#define FAN_LED_PIN 16 // Pin GPIO untuk mengendalikan LED (Kipas)
// Konfigurasi LDR
#define LDR_PIN 34 // Pin LDR pada GPIO 34 (pin analog)
// Pin untuk Lampu
#define LIGHT_PIN 0 // Pin GPIO untuk Lampu (LED)
void setup() {
// Inisialisasi komunikasi Serial
Serial.begin(115200);
Serial.println("Menghubungkan DHT22, LDR, dan Kipas");
// Inisialisasi LCD 19x2
Wire.begin(19, 2); // I2C dengan SDA = GPIO 22, SCL = GPIO 2
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Menyalakan lampu latar
lcd.setCursor(0, 0); // Posisi kursor awal
lcd.print("Mengukur...");
// Inisialisasi DHT22
dht.begin();
// Inisialisasi LED (Kipas)
pinMode(FAN_LED_PIN, OUTPUT); // Set GPIO untuk LED (Kipas) sebagai output
// Inisialisasi LDR (sebagai input)
pinMode(LDR_PIN, INPUT);
// Inisialisasi Lampu (LED)
pinMode(LIGHT_PIN, OUTPUT); // Set GPIO untuk Lampu sebagai output
delay(2000); // Tunggu beberapa detik
}
int ldr;
void loop() {
delay(10);
// Baca suhu dan kelembaban
float suhu = dht.readTemperature(); // Membaca suhu dalam Celsius
float kelembaban = dht.readHumidity(); // Membaca kelembaban dalam %
// Periksa apakah pembacaan berhasil
if (isnan(suhu) || isnan(kelembaban)) {
Serial.println("Gagal membaca DHT22!");
lcd.setCursor(0, 0);
lcd.print("Error membaca DHT");
} else {
// Tampilkan data di Serial Monitor
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" C, Kelembaban: ");
Serial.print(kelembaban);
Serial.println(" %");
// Tampilkan data di LCD
lcd.clear();
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(" %");
// Kendalikan kipas (LED) berdasarkan suhu
if (suhu > 30.0) { // Jika suhu lebih dari 30°C
digitalWrite(FAN_LED_PIN, HIGH); // Nyalakan kipas (LED)
Serial.println("Kipas ON");
} else {
digitalWrite(FAN_LED_PIN, LOW); // Matikan kipas (LED)
Serial.println("Kipas OFF");
}
}
// Baca nilai LDR untuk mendeteksi cahaya
ldr = analogRead(LDR_PIN); // Membaca nilai dari LDR
// Tampilkan nilai LDR di Serial Monitor
Serial.print("Nilai LDR: ");
Serial.println(ldr);
delay(250);
// Kendalikan lampu (LED) berdasarkan cahaya dari LDR
if (ldr < 2000) { // Jika nilai LDR rendah (malam hari)
digitalWrite(LIGHT_PIN, HIGH); // Nyalakan lampu (LED)
Serial.println("Lampu ON (Malam)");
} else {
digitalWrite(LIGHT_PIN, LOW); // Matikan lampu (LED)
Serial.println("Lampu OFF (Pagi)");
}
delay(2000);
}