#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD
OneWire oneWire(4); // Pin data DS18B20
DallasTemperature sensors(&oneWire);
DeviceAddress sensorDeviceAddress;
#define RELAY1_PIN 25
#define RELAY2_PIN 26
#define RELAY3_PIN 27
#define RELAY4_PIN 14
#define LED1_PIN 18
#define LED2_PIN 19
void setup() {
Serial.begin(115200);
Wire.begin();
lcd.init();//inisialisasi lcd
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Suhu:");
lcd.setCursor(12, 0);
lcd.print("C");
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(RELAY4_PIN, LOW);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
sensors.begin();
sensors.getAddress(sensorDeviceAddress, 0);
sensors.setResolution(sensorDeviceAddress, 12); // Resolusi suhu 12-bit (maksimum)
}
void loop() {
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
String status = evaluateTemperature(temperature);
updateLCD(temperature, status);
controlRelays(temperature);
controlLEDs();
}
String evaluateTemperature(float temperature) {
if (temperature < 26.0) {
return "SUHU SANGAT BAGUS";
} else if (temperature >= 27.0 && temperature <= 29.0) {
return "SUHU CUKUP BAGUS";
} else if (temperature >= 30.0 && temperature <= 32.0) {
return "SUHU MASIH BAGUS";
} else {
return "SUHU TIDAK BAGUS";
}
}
void updateLCD(float temperature, String status) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature, 1);
lcd.print("C");
lcd.setCursor(0, 1);
lcd.print(status);
}
void controlRelays(float temperature) {
if (temperature < 26.0) {
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(RELAY2_PIN, LOW);
delay(5000);
digitalWrite(RELAY3_PIN, HIGH);
delay(5000);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(RELAY4_PIN, LOW);
} else if (temperature > 32.0) {
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, HIGH);
delay(5000);
digitalWrite(RELAY3_PIN, HIGH);
delay(5000);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(RELAY4_PIN, LOW);
} else {
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(RELAY4_PIN, LOW);
}
}
void controlLEDs() {
digitalWrite(LED1_PIN, HIGH);
digitalWrite(LED2_PIN, HIGH);
}Loading
ds18b20
ds18b20