ELCB Arduino Sensor PZEM-004t IOT Blynk
Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah ELCB dengan arduino dan iot blynk. alat ini menggunakan 2 buah sensor arus tegangan PZEM-004t. dan juga alat ini menggunakan wemos D1 mini esp8266. untuk lebih jelasnya berikut kodingnya.
1. Skema
2. Program Arduino IDE
#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6EN0PXXXX"
#define BLYNK_TEMPLATE_NAME "elcb"
#define BLYNK_AUTH_TOKEN "-defmRxYVYlK5bYKNU8YJ6kLNdkZzXXX"
#include <Wire.h>
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <PZEM004Tv30.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
PZEM004Tv30 pzem(&Serial);
PZEM004Tv30 pzem2(D7,D8);
float voltage;
float current;
float power;
float energy;
float biaya;
float voltage2;
float current2;
float energy2;
int relay = D3;
float selisih;
int btresetx;
int pinValue;
int pinValue2;
int tanda;
BlynkTimer timer;
char ssid[] = "hotspothpku";
char pass[] = "123456789";
BLYNK_WRITE(V4)
{
pinValue = param.asInt();
if((pinValue == 1)&&(tanda == 0)){
digitalWrite(relay, LOW);
}
if((pinValue == 0)&&(tanda == 0)) {
digitalWrite(relay, HIGH);
}
}
BLYNK_WRITE(V5)
{
pinValue2 = param.asInt();
if(pinValue2 == 1){
tanda = 1;
}
if(pinValue2 == 0) {
tanda = 0;
}
}
void kirimdata()
{
Blynk.virtualWrite(V0,voltage);
Blynk.virtualWrite(V1,current);
Blynk.virtualWrite(V2,voltage2);
Blynk.virtualWrite(V3,current2);
}
void setup() {
Serial.begin(9600);
lcd.begin();
lcd.clear();
lcd.noCursor();
pinMode(relay,OUTPUT);
digitalWrite(relay,LOW); //LITRIK AC NYALA
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, kirimdata);
}
void loop() {
voltage = pzem.voltage();
current = pzem.current();
voltage2 = pzem2.voltage();
current2 = pzem2.current();
if((current == current2)&&(tanda == 1)){
digitalWrite(relay,LOW);
}
if((current > current2)&&(tanda == 1)){
selisih = current - current2;
if((selisih >= 0)&&(tanda == 1)){
digitalWrite(relay,HIGH);
lcd.clear();
delay(1000);
arusbocor();
}
}
if((current < current2)&&(tanda == 1)){
selisih = current2 - current;
if((selisih >= 0)&&(tanda == 1)){
digitalWrite(relay,HIGH);
lcd.clear();
delay(1000);
arusbocor();
}
}
lcd.setCursor(0,0);
lcd.print("V:");
lcd.print(voltage);
lcd.print("/");
lcd.print(voltage2);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("I:");
lcd.print(current);
lcd.print("/");
lcd.print(current2);
lcd.print(" ");
Blynk.run();
timer.run(); // Initiates BlynkTimer
delay(200);
}
void arusbocor(){
lcd.setCursor(0,0);
lcd.print("arus bocor ");
lcd.setCursor(0,1);
lcd.print(" > 30mA");
arusbocor();
}
#define BLYNK_TEMPLATE_ID "TMPL6EN0PXXXX"
#define BLYNK_TEMPLATE_NAME "elcb"
#define BLYNK_AUTH_TOKEN "-defmRxYVYlK5bYKNU8YJ6kLNdkZzXXX"
#include <Wire.h>
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <PZEM004Tv30.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
PZEM004Tv30 pzem(&Serial);
PZEM004Tv30 pzem2(D7,D8);
float voltage;
float current;
float power;
float energy;
float biaya;
float voltage2;
float current2;
float energy2;
int relay = D3;
float selisih;
int btresetx;
int pinValue;
int pinValue2;
int tanda;
BlynkTimer timer;
char ssid[] = "hotspothpku";
char pass[] = "123456789";
BLYNK_WRITE(V4)
{
pinValue = param.asInt();
if((pinValue == 1)&&(tanda == 0)){
digitalWrite(relay, LOW);
}
if((pinValue == 0)&&(tanda == 0)) {
digitalWrite(relay, HIGH);
}
}
BLYNK_WRITE(V5)
{
pinValue2 = param.asInt();
if(pinValue2 == 1){
tanda = 1;
}
if(pinValue2 == 0) {
tanda = 0;
}
}
void kirimdata()
{
Blynk.virtualWrite(V0,voltage);
Blynk.virtualWrite(V1,current);
Blynk.virtualWrite(V2,voltage2);
Blynk.virtualWrite(V3,current2);
}
void setup() {
Serial.begin(9600);
lcd.begin();
lcd.clear();
lcd.noCursor();
pinMode(relay,OUTPUT);
digitalWrite(relay,LOW); //LITRIK AC NYALA
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, kirimdata);
}
void loop() {
voltage = pzem.voltage();
current = pzem.current();
voltage2 = pzem2.voltage();
current2 = pzem2.current();
if((current == current2)&&(tanda == 1)){
digitalWrite(relay,LOW);
}
if((current > current2)&&(tanda == 1)){
selisih = current - current2;
if((selisih >= 0)&&(tanda == 1)){
digitalWrite(relay,HIGH);
lcd.clear();
delay(1000);
arusbocor();
}
}
if((current < current2)&&(tanda == 1)){
selisih = current2 - current;
if((selisih >= 0)&&(tanda == 1)){
digitalWrite(relay,HIGH);
lcd.clear();
delay(1000);
arusbocor();
}
}
lcd.setCursor(0,0);
lcd.print("V:");
lcd.print(voltage);
lcd.print("/");
lcd.print(voltage2);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("I:");
lcd.print(current);
lcd.print("/");
lcd.print(current2);
lcd.print(" ");
Blynk.run();
timer.run(); // Initiates BlynkTimer
delay(200);
}
void arusbocor(){
lcd.setCursor(0,0);
lcd.print("arus bocor ");
lcd.setCursor(0,1);
lcd.print(" > 30mA");
arusbocor();
}
3. VIDEO HASILNYA


No comments:
Post a Comment