Nilai kWh pada Sensor PZEM 016 dan PZEM 004 dapat di reset melalui command yang telah tersedia. Ada beberapa alasan kenapa reset kwh menjadi sangat penting, misal nya di buat untuk management kwh online. Setelah pembayaran makan akan di hapus nilai kwh nya dan memulai kwh dari nol kembali.
Reset kwh Satu Channel
Saya harap teman-teman sudah paham cara wiring installasi kwh pada modul converter kita, jika kebetulan teman-teman sampai pada artikel ini tanpa membaca artikel sebelum nya, maka silahkan click tombol di bawah ini, agar tidak salah paham. atau check wiring pada gambar di bawah ini,
Code reset kWh
Di datasheet command reset kwh seperti berikut ini,
Command Reset ini akan kita kirim ke pzem 016 dengan format data seperti di atas, Slave Address, 0x42, CRC high, CRC low, Kemudian tunggu respon dari PZEM-016 atau PZEM 004 nya, sebagai bukti, apakah proses reset kwh done atau tidak. Untuk lebih jelas, bisa lihat code di bawah ini,
#include <ModbusMaster.h>
ModbusMaster node;
static uint8_t pzem_address = 1; //default address 0x01
#include <SoftwareSerial.h>
SoftwareSerial pzemSerial(13, 14);
#define EN 12
unsigned long energy = 0;
void preTransmission()
{
digitalWrite(EN, HIGH);
}
void postTransmission()
{
digitalWrite(EN, LOW);
}
void setup() {
Serial.begin(9600);
pzemSerial.begin(9600);
pinMode(EN, OUTPUT);
node.begin(pzem_address, pzemSerial);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
Serial.println();
delay(1000);
Serial.print("kwh lama: ");
baca_kwh();
for (int i = 0; i < 2; i++) {
resetEnergy(pzem_address);
delay(2000);
}
Serial.print("kwh setelah reset: ");
baca_kwh();
}
void loop() {
delay(100);
}
void resetEnergy(uint8_t slaveAddr) {
//The command to reset the slave's energy is (total 4 bytes):
//Slave address + 0x42 + CRC check high byte + CRC check low byte.
uint16_t u16CRC = 0xFFFF;
static uint8_t resetCommand = 0x42;
u16CRC = crc16_update(u16CRC, slaveAddr);
u16CRC = crc16_update(u16CRC, resetCommand);
Serial.println("Resetting Energy");
digitalWrite(EN, HIGH);//ditambah
delay(10);//ditambah
pzemSerial.write(slaveAddr);
pzemSerial.write(resetCommand);
pzemSerial.write(lowByte(u16CRC));
pzemSerial.write(highByte(u16CRC));
digitalWrite(12, LOW);//ditambah
delay(10);//ditambah
Serial.print("respon: ");
while (pzemSerial.available() > 0) {
Serial.print(pzemSerial.read(), HEX);
Serial.print(",");
}
Serial.println();
delay(1000);
}
void baca_kwh() {
uint8_t result;
uint32_t tempdouble = 0;
result = node.readInputRegisters(0, 9); //read the 9 registers of the PZEM-014 / 016
if (result == node.ku8MBSuccess)
{
tempdouble = node.getResponseBuffer(5); //LowByte
tempdouble |= node.getResponseBuffer(6) << 8; //highByte
energy = tempdouble;
Serial.print(energy);
Serial.println(" Wh");
}
}
Compiling, Upload program ke modul modbus converter, dan lihat di serial monitor. Hasil nya akan seperti gambar di bawah ini,
Perhatikan kesamaan command yang dikirim dan di terima antar datasheet Serial monitor, ada ke samaan
//mengirim command ke pzem sensor
pzemSerial.write(slaveAddr);
pzemSerial.write(resetCommand);
pzemSerial.write(lowByte(u16CRC));
pzemSerial.write(highByte(u16CRC));
Nah sekian dulu tulisan kita cara reset energy pada sensor pzem-016 dan pzem 004, semoga bermanfaat.
Jika tertarik dengan modul modbus converter, whatsapp kami dengan tekan tombol di bawah ini,