Subscribe
iotles.com
No Result
View All Result
  • Login
  • BERANDA
  • BELAJAR IOT
  • ENERGY METER
  • BERANDA
  • BELAJAR IOT
  • ENERGY METER
No Result
View All Result
iotles.com
No Result
View All Result
Home Energy Meter

Langkah Mudah Membaca Sensor PZEM 016 dengan Arduino ESP12

jimmisitepu by jimmisitepu
January 29, 2022
in Energy Meter
0
wiring pzem 016
0
SHARES
3k
VIEWS
Share on FacebookShare on Twitter

Sensor PZEM 016

Sensor PZEM 016 adalah sensor Listrik AC dengan parameter output, Energy, Power, Tegangan, Arus, Power Factor dan frekuensi dan semua parameter ini bisa di ambil dengan menggunakan Protocol Modbus RTU.

Satu Sensor dengan Output KWH, Voltage, Current, Freq, dan Power Factor

sensor PZEM-16

Sensor ini bisa dikakan sensor yang friendly, mudah di gunakan, karena menggunakan casing yang tertutup rapat. Menggunakan terminal sebagai wiring connector nya kemudian menggunakan protocol modbus.

Karena sensor ini menggunakan protocol Modbus RTU. Maka cukup menggunakan satu controller saja untuk membaca 5 sampai 10 sensor PZEM. Jadi design panel kita untuk monitoring jauh lebih ringkas dan Mudah. Teman-teman bisa menggunakan modul Converter modbus kita. Seperti gambar yang ada di bawah ini.

Related articles

Membaca Listrik 3 Phase dengan Sensor PZEM-016 dengan Arduino ESP12

Tips dan Trik Cara Reset kWh Pada Sensor PZEM 016 dan PZEM 004

modbus converter esp12

Membaca Sensor PZEM-016

Bagaimana kah tahapan membaca Sensor pzem 016 dengan modul converter modbus kita? Cara nya adalah sebagai berikut.

Add Library modbusmaster

Pertama download dulu library modbus master di link github berikut ini, cukup click button di bawah ini.

Download Library modbusmaster

Cara download library nya bisa di lihat pada gambar di bawah ini.

Kemudian add library Arduino nya ke Arduino IDE teman-teman. Saya harap untuk menambah library teman-teman sudah paham cara nya, atau click link di bawah ini.

menambah library pada Arduino

Wiring Modul Modbus dengan Sensor PZEM-016

Setelah di add, maka langkah selanjut nya adalah wiring Sensor PZEM-016 dengan Modul Modbus converter. Cara nya cukup mudah, tinggal sesuaikan dengan gambar yang ada di bawah ini,

wiring pzem 016

Pastikan wiring teman-teman tidak salah, terutama di bagian Wiring Cable Tegangan PLN nya. Dan perhatikan keselamatan kerja untuk instalasi ini.

WARNING INSTALLATION, Perhatikan dengan seksama dan berulang, instalasi Wiring Tegangan PLN

savety first

Pilih Board Generic ESP8266 dev. ( Jika board belum di tambah di Arduino IDE bisa click link ini, menambah board ESP8266 di Arduino IDE ), setelah itu pilih board seperti gambar di bawah ini

board Generic esp8266 Dev

Program Arduino Membaca PZEM

#include <ModbusMaster.h>
ModbusMaster node;
static uint8_t pzemSlaveAddr = 1;

#include <SoftwareSerial.h>
SoftwareSerial pzemSerial(13, 14);

#define MAX485_DE      12
#define MAX485_RE_NEG  12

float voltage,  current, power, energy, freq, pf;

void preTransmission()
{
  digitalWrite(MAX485_RE_NEG, 1);
  digitalWrite(MAX485_DE, 1);
}

void postTransmission()
{
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);
}

void setup() {
  pinMode(MAX485_RE_NEG, OUTPUT);
  pinMode(MAX485_DE, OUTPUT);
  // Init in receive mode
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);

  pzemSerial.begin(9600);
  Serial.begin(115200);

  node.begin(pzemSlaveAddr, pzemSerial);
  node.preTransmission(preTransmission);
  node.postTransmission(postTransmission);

}
void loop() {

  uint8_t result;
  result = node.readInputRegisters(0, 9); //read the 9 registers of the PZEM-014 / 016
  if (result == node.ku8MBSuccess)
  {
    Serial.println("sukses modbus");
    voltage = node.getResponseBuffer(0) / 10.0;

    uint32_t tempdouble = 0x00000000;

    tempdouble = node.getResponseBuffer(1);       //LowByte
    tempdouble |= node.getResponseBuffer(2) << 8;  //highByte
    current = tempdouble / 1000.0;

    tempdouble |= node.getResponseBuffer(3);       //LowByte
    tempdouble |= node.getResponseBuffer(4) << 8;  //highByte
    power = tempdouble / 10.0;

    tempdouble = node.getResponseBuffer(5);       //LowByte
    tempdouble |= node.getResponseBuffer(6) << 8;  //highByte
    energy = tempdouble;

    tempdouble = node.getResponseBuffer(7);
    freq = tempdouble / 10.0;

    tempdouble = node.getResponseBuffer(8);
    pf = tempdouble / 10.0;
    print_data();

  } else {
    Serial.println("Failed to read modbus");
  }
  delay(2000);
}

void print_data() {
  Serial.print(voltage);
  Serial.print("V   ");

  Serial.print(current);
  Serial.print("A   ");

  Serial.print(freq);
  Serial.print("Hz   ");

  Serial.print(pf);
  Serial.print("pf   ");
  Serial.print("   ");

  Serial.print(power);
  Serial.print("W  ");

  Serial.print(energy);
  Serial.print("Wh  ");
  Serial.println();
}

Upload program di atas dan perhatikan di serial monitor.

Penjelasan Program

#include <ModbusMaster.h>
ModbusMaster node;
static uint8_t pzemSlaveAddr = 1;

#include <SoftwareSerial.h>
SoftwareSerial pzemSerial(13, 14);

#define MAX485_DE      12
#define MAX485_RE_NEG  12

Hal yang paling penting ada configurasi di atas. Alamat default sensor PZEM-016 adalah 0x01. Alamat ini bisa di rubah-rubah ( tutorial nya menyusul ). Kemudian GPIO13 dan GPIO14 kita gunakan sebagai pin untuk membaca data out dari sensor PZEM nya. kemudian pin GPIO12 di gunakan sebagai PIN EN control Chip MAX3485 nya.

  1. RXD PIN GPIO13
  2. TXD PIN GPIO14
  3. EN PIN GPIO12
  4. Baud Rate 9600
  5. Default Address, 0x01
 pinMode(MAX485_RE_NEG, OUTPUT);
  pinMode(MAX485_DE, OUTPUT);
  // Init in receive mode
  digitalWrite(MAX485_RE_NEG, 0);
  digitalWrite(MAX485_DE, 0);

  pzemSerial.begin(9600);
  Serial.begin(115200);

GPIO12 di gunakan sebagai Output Untuk Control PIN Enable MAX3485, sementara baudrate Transaksi data ada di 9600

  node.begin(pzemSlaveAddr, pzemSerial);
  node.preTransmission(preTransmission);
  node.postTransmission(postTransmission);

Sebagai fungsi modbus protokol, Fungsi untuk proses request dan proses get data modbus dari sensor nya.

  uint8_t result;
  result = node.readInputRegisters(0, 9); //read the 9 registers of the PZEM-014 / 016

Nah pada fungsi ini adalah untuk membaca panjang register modbus data yang di terima dari sensor PZEM-016. disini kita membaca dari address 0 sampai addres 9.

Menurut datasheet address list sensor PZEM adalah sebagai berikut.

RegAddr Description                 Resolution
  0x0000  Voltage value               1LSB correspond to 0.1V
  0x0001  Current value low 16 bits   1LSB correspond to 0.001A
  0x0002  Current value high 16 bits
  0x0003  Power value low 16 bits     1LSB correspond to 0.1W
  0x0004  Power value high 16 bits
  0x0005  Energy value low 16 bits    1LSB correspond to 1Wh
  0x0006  Energy value high 16 bits
  0x0007  Frequency value             1LSB correspond to 0.1Hz
  0x0008  Power factor value          1LSB correspond to 0.01
  0x0009  Alarm status  0xFFFF is alarm,0x0000is not alarm

voltage Value ada di register 0, Arus ada di address 1, dan seterus nya. Untuk membaca nya dengan program Arduino adalah sebagai berikut

 uint8_t result;
  result = node.readInputRegisters(0, 9); //read the 9 registers of the PZEM-014 / 016
  if (result == node.ku8MBSuccess)
  {
    Serial.println("sukses modbus");
    voltage = node.getResponseBuffer(0) / 10.0;

    uint32_t tempdouble = 0x00000000;

    tempdouble = node.getResponseBuffer(1);       //LowByte
    tempdouble |= node.getResponseBuffer(2) &lt;&lt; 8;  //highByte
    current = tempdouble / 1000.0;

    tempdouble |= node.getResponseBuffer(3);       //LowByte
    tempdouble |= node.getResponseBuffer(4) &lt;&lt; 8;  //highByte
    power = tempdouble / 10.0;

    tempdouble = node.getResponseBuffer(5);       //LowByte
    tempdouble |= node.getResponseBuffer(6) &lt;&lt; 8;  //highByte
    energy = tempdouble;

    tempdouble = node.getResponseBuffer(7);
    freq = tempdouble / 10.0;

    tempdouble = node.getResponseBuffer(8);
    pf = tempdouble / 10.0;
    print_data();

  } else {
    Serial.println("Failed to read modbus");
  }

Semoga teman-teman paham yah? atau jika ada pertanyaan bisa click link button di bawah ini,

whatsapp saya

Sekian dulu tulisan sederhana kita ini, dan akan kita lanjut ke Tutorial berikut nya tentang sensor pzem-016

Sumber: Read sensor PZEM-016 with Arduino

Thanks

Previous Post

Mengenal Modbus RTU Converter To Cloud Support PZEM 004, PZEM 016 dan Power Meter

Next Post

Cara Mudah Merubah Address Sensor PZEM 016 / PZEM004

Related Posts

listrik 3 phase pzem 016
Energy Meter

Membaca Listrik 3 Phase dengan Sensor PZEM-016 dengan Arduino ESP12

January 29, 2022
wiring pzem 016
Energy Meter

Tips dan Trik Cara Reset kWh Pada Sensor PZEM 016 dan PZEM 004

January 29, 2022
merubah address pzem 016
Energy Meter

Cara Mudah Merubah Address Sensor PZEM 016 / PZEM004

January 29, 2022
modbus converter esp12
Energy Meter

Mengenal Modbus RTU Converter To Cloud Support PZEM 004, PZEM 016 dan Power Meter

January 29, 2022

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Monitoring Beberapa Jenis Power Meter Tanpa Koding dengan Modul LTE Modbus ke Blynk Cloud
  • Posting Data Ke blynk Iot dengan Modul GSM SIM7600 ESP32
  • Modul 4G Arduino SIM7600 dengan ESP32
  • Membuat Game Sederhana ESP32 Arduino dengan Random LED dan Button
  • Membuat Counter UP dan Counter Down pada Arduino Dengan Button

Recent Comments

No comments to show.
  • BERANDA
  • BELAJAR IOT
  • ENERGY METER
Call us: +62 851-5941-1861

© 2021 iotles.com - Learning and making iot device iotles.

No Result
View All Result
  • BERANDA
  • BELAJAR IOT
  • ENERGY METER

Welcome Back!

Login to your account below

Forgotten Password?

Retrieve your password

Please enter your username or email address to reset your password.

Log In

Add New Playlist