#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define BUZZER 8
// Potensiometer
#define POT_IAC A0
#define POT_VAC A1
#define POT_IDC A2
#define POT_VDC A3
#define POT_COS A6
LiquidCrystal_I2C lcd(0x27, 20, 4);
DHT dht(DHTPIN, DHTTYPE);
void setup() {
lcd.init();
lcd.backlight();
dht.begin();
pinMode(BUZZER, OUTPUT);
lcd.setCursor(0, 1);
lcd.print(" Inverter Monitor ");
delay(2000);
lcd.clear();
}
void loop() {
// === BACA POTENSIOMETER ===
float Iac = map(analogRead(POT_IAC), 0, 1023, 0, 1000) / 100.0; // 0–10 A
float Vac = map(analogRead(POT_VAC), 0, 1023, 0, 2500) / 10.0; // 0–250 V
float Idc = map(analogRead(POT_IDC), 0, 1023, 0, 500) / 10.0; // 0–50 A
float Vdc = map(analogRead(POT_VDC), 0, 1023, 0, 6000) / 10.0; // 0–600 V
float cosphi = map(analogRead(POT_COS), 0, 1023, 0, 100) / 100.0;
// === HITUNG DAYA ===
float Pac = Vac * Iac * cosphi;
float Pdc = Vdc * Idc;
// === SUHU ===
float suhu = dht.readTemperature();
// === TAMPIL LCD ===
lcd.setCursor(0, 0);
lcd.print("AC:");
lcd.print(Vac,1); lcd.print("V ");
lcd.print(Iac,1); lcd.print("A");
lcd.setCursor(0, 1);
lcd.print("P_AC:");
lcd.print(Pac,0); lcd.print("W ");
lcd.print("PF:");
lcd.print(cosphi,2);
lcd.setCursor(0, 2);
lcd.print("DC:");
lcd.print(Vdc,1); lcd.print("V ");
lcd.print(Idc,1); lcd.print("A");
lcd.setCursor(0, 3);
lcd.print("P_DC:");
lcd.print(Pdc,0); lcd.print("W ");
lcd.print("T:");
lcd.print(suhu,1); lcd.print("C");
// === ALARM ===
if (Vac > 240 || Iac > 10 || suhu > 50) {
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(BUZZER, LOW);
}
delay(800);
}