#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ACS712.h>
#include <LM35.h>
#define TEMP_SENSOR_PIN 36 // Pin untuk sensor suhu (LM35)
#define CURRENT_SENSOR_PIN 39 // Pin untuk sensor arus (ACS712)
#define BUZZER_PIN 26 // Pin untuk buzzer
#define INVERTER_LED_PIN 25 // Pin untuk LED inverter
// Konfigurasi ambang batas
const float TEMP_THRESHOLD =60.0; // Ambang batas suhu (°C)
const float CURRENT_THRESHOLD = 5.0; // Ambang batas arus (A)
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(115200);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(INVERTER_LED_PIN, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Inverter System");
delay(2000);
lcd.clear();
}
void loop() {
// Baca suhu dari LM35
int tempValue = analogRead(TEMP_SENSOR_PIN);
float temperature = (tempValue * 3.3 / 4095.0) * 100.0; // Konversi ke °C
// Baca arus dari ACS712
int currentValue = analogRead(CURRENT_SENSOR_PIN);
float current = ((currentValue * 3.3 / 4095.0) - 2.5) / 0.185; // Konversi ke A
// Tampilkan nilai pada Serial Monitor
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Current: ");
Serial.print(current);
Serial.println(" A");
// Tampilkan nilai pada LCD
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Curr: ");
lcd.print(current);
lcd.print(" A");
// Proteksi suhu atau arus
if (temperature > TEMP_THRESHOLD || current > CURRENT_THRESHOLD) {
digitalWrite(BUZZER_PIN, HIGH); // Aktifkan buzzer
digitalWrite(INVERTER_LED_PIN, LOW); // Matikan inverter
lcd.setCursor(10, 1);
lcd.print("OFF ");
Serial.println("WARNING: Threshold exceeded! Inverter OFF");
} else {
digitalWrite(BUZZER_PIN, LOW); // Matikan buzzer
digitalWrite(INVERTER_LED_PIN, HIGH); // Hidupkan inverter
lcd.setCursor(10, 1);
lcd.print("ON ");
Serial.println("Inverter ON");
}
delay(1000); // Delay 1 detik
}