#define BLYNK_TEMPLATE_ID "TMPL67BudExxx"
#define BLYNK_TEMPLATE_NAME "monitor arus tegangan"
#define BLYNK_AUTH_TOKEN "a4sgOvXoyxVJ1LmTqXdl_oSL0WrZSXXX"
#define BLYNK_PRINT Serial
#include <Wire.h>
#include <HardwareSerial.h>
#include <BlynkSimpleEsp32.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <PZEM004Tv30.h>
#include <LiquidCrystal_I2C.h>
#define RXD2 16
#define TXD2 17
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 20 chars and 4 line display
PZEM004Tv30 pzem(&Serial); //(RX,TX) connect to TX,RX of PZEM
PZEM004Tv30 pzem2(&Serial2); //(RX,TX) connect to TX,RX of PZEM
float voltage1;
float current1;
float power1;
int freq1;
int tanda;
float voltage2;
float current2;
float power2;
int freq2;
int relay1 = 33; //relay interlok
int relay2 = 32; //relay genset
int relay3 = 34; //relay interlok
int relay4 = 35; //relay genset
int buzzer = 14;
int led1 = 25;
int led2 = 26;
int led3 = 27;
BlynkTimer timer;
char ssid[] = "hotspothpku";
char pass[] = "123456789";
void sendSensor()
{
Blynk.virtualWrite(V0, voltage1);
Blynk.virtualWrite(V1, current1);
Blynk.virtualWrite(V2, power1);
Blynk.virtualWrite(V3, freq1);
Blynk.virtualWrite(V4, voltage2);
Blynk.virtualWrite(V5, current2);
Blynk.virtualWrite(V6, power2);
Blynk.virtualWrite(V7, freq2);
delay(1000);
}
void setup() {
Serial.begin(9600);
Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
lcd.begin();
lcd.clear();
lcd.noCursor();
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(buzzer,OUTPUT);
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(relay3,OUTPUT);
pinMode(relay4,OUTPUT);
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay3,HIGH);
digitalWrite(relay4,HIGH);
digitalWrite(led1,HIGH);
digitalWrite(buzzer,LOW);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, sendSensor);
}
void loop() {
voltage1 = pzem.voltage();
current1 = pzem.current();
power1 = pzem.power();
freq1 = pzem.frequency();
voltage2 = pzem2.voltage();
current2 = pzem2.current();
power2 = pzem2.power();
freq2 = pzem2.frequency();
lcd.setCursor(0,0);
lcd.print(voltage1);
lcd.print("/");
lcd.print(voltage2);
lcd.print(" ");
//jika pln on awal
if((voltage1 > 100)&&(tanda == 0)){
lcd.setCursor(0,1);
lcd.print("PLN ON ");
digitalWrite(relay1,HIGH); // interlok off
digitalWrite(relay2,HIGH); // genset off
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
}
//jika pln on kedua
if((voltage1 > 100)&&(tanda == 1)){
tanda = 0;
digitalWrite(led2,LOW);
digitalWrite(led3,LOW);
lcd.setCursor(0,1);
lcd.print("PLN ON ");
digitalWrite(relay1,HIGH); // interlok off
delay(15000);
digitalWrite(relay2,HIGH); // genset off
}
//jika pln padam maka genset on
if((voltage1 < 100)&&(tanda == 0)){
lcd.setCursor(0,1);
lcd.print("PLN OFF");
digitalWrite(relay1,HIGH); // interlok off
digitalWrite(relay2,LOW); // genset on
digitalWrite(led2,LOW); //indikator interlok
//digitalWrite(buzzer,HIGH);
tanda = 1;
digitalWrite(led2,HIGH);
delay(10000);
}
//jika genset udah siap maka interlok on
if(voltage2 > 200){
lcd.setCursor(8,1);
lcd.print(" GEN ON ");
digitalWrite(relay1,LOW); // interlok on
digitalWrite(relay2,LOW); // genset on
digitalWrite(led3,HIGH);
}
if(voltage2 < 100){
lcd.setCursor(8,1);
lcd.print(" GEN OFF");
digitalWrite(relay1,HIGH); // interlok off
digitalWrite(relay2,LOW); // genset on
digitalWrite(led3,LOW);
}
Blynk.run();
timer.run();
delay(100);
}
No comments:
Post a Comment