#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
// Inisialisasi LCD I2C (0x27 alamat LCD, 16x2 ukuran LCD)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Inisialisasi sensor DS18B20
#define ONE_WIRE_BUS 3 // Pin sensor suhu DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// Inisialisasi Relay
#define RELAY_HEATER 4 // Relay pemanas
#define RELAY_FAN 5 // Relay pendingin
void setup() {
lcd.begin(16, 2); // Menentukan ukuran LCD 16x2
lcd.backlight();
pinMode(RELAY_HEATER, OUTPUT);
pinMode(RELAY_FAN, OUTPUT);
digitalWrite(RELAY_HEATER, LOW); // Awalnya mati
digitalWrite(RELAY_FAN, LOW); // Awalnya mati
sensors.begin(); // Memulai sensor DS18B20
}
void loop() {
sensors.requestTemperatures(); // Mengambil data suhu
float suhu = sensors.getTempCByIndex(0); // Membaca suhu dalam Celcius
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(suhu);
lcd.print(" C ");
if (suhu > 30) {
digitalWrite(RELAY_FAN, HIGH); // Kipas pendingin ON
digitalWrite(RELAY_HEATER, LOW); // Pemanas OFF
lcd.setCursor(0, 1);
lcd.print("Pendingin Aktif ");
}
else if (suhu < 20) {
digitalWrite(RELAY_FAN, LOW); // Kipas pendingin OFF
digitalWrite(RELAY_HEATER, HIGH); // Pemanas ON
lcd.setCursor(0, 1);
lcd.print("Pemanas Aktif ");
}
else {
digitalWrite(RELAY_FAN, LOW); // Kipas pendingin OFF
digitalWrite(RELAY_HEATER, LOW); // Pemanas OFF
lcd.setCursor(0, 1);
lcd.print("Stabil ");
}
delay(2000); // Tunggu 2 detik sebelum membaca ulang suhu
}