Semua Tentang Belajar Teknologi Digital Dalam Kehidupan Sehari - Hari

  • IC Timer 555 yang Multifungsi

    IC timer 555 adalah sirkuit terpadu (chip) yang digunakan dalam berbagai pembangkit timer, pulsa dan aplikasi osilator. Komponen ini digunakan secara luas, berkat kemudahan dalam penggunaan, harga rendah dan stabilitas yang baik

  • Ayo Migrasi TV Digital

    Kami bantu anda untuk memahami lebih jelas mengenai migrasi tv digital, apa sebabnya dan bagaimana efek terhadap kehidupan. Jasa teknisi juga tersedia dan siap membantu instalasi - setting perangkat - pengaturan antena dan distribusi televisi digital ke kamar kos / hotel

  • Bermain DOT Matrix - LOVEHURT

    Project Sederhana dengan Dot Matrix dan Attiny2313. Bisa menjadi hadiah buat teman atau pacarmu yang ulang tahun dengan tulisan dan animasi yang dapat dibuat sendiri.

  • JAM DIGITAL 6 DIGIT TANPA MICRO FULL CMOS

    Jika anda pencinta IC TTL datau CMOS maka project jam digital ini akan menunjukkan bahwa tidak ada salahnya balik kembali ke dasar elektronika digital , sebab semuanya BISA dibuat dengan teknologi jadul

  • Node Red - Kontrol Industri 4.0

    Teknologi kontrol sudah melampaui ekspektasi semua orang dan dengan kemajuan dunia elektronika, kini semakin leluasa berkreasi melalui Node Red

Tampilkan postingan dengan label modbus. Tampilkan semua postingan
Tampilkan postingan dengan label modbus. Tampilkan semua postingan

Minggu, 17 Maret 2024

[Modbus] Membaca Sensor Suhu RS-WD-HW-N01 RS485 - Arduino

 




Sebagai pembuka saya ingin berbagi bahwa sensor suhu inframerah memiliki beberapa kekurangan yang perlu dipertimbangkan:


1. **Akurasi terbatas**: Akurasi sensor suhu inframerah dapat dipengaruhi oleh berbagai faktor seperti emisivitas objek yang diukur, suhu lingkungan, kelembaban, dan jarak sensor dari objek. Hal ini dapat mengakibatkan pembacaan yang kurang tepat dibandingkan dengan sensor suhu kontak.

2. **Efek permukaan**: Sensor suhu inframerah mengukur suhu permukaan objek. Hal ini dapat menjadi kelemahan ketika berurusan dengan material dengan konduktivitas termal rendah atau permukaan yang tidak merata dalam suhu. Misalnya, permukaan yang mengkilap atau reflektif dapat memantulkan radiasi inframerah lingkungan, menyebabkan pembacaan yang tidak akurat.

3. **Rentang terbatas**: Beberapa sensor suhu inframerah memiliki rentang pengukuran yang terbatas, yang mungkin tidak sesuai untuk semua aplikasi. Sebagai contoh, beberapa sensor mungkin tidak dapat mengukur suhu yang sangat tinggi atau rendah dengan akurat.

4. **Waktu respons**: Sensor suhu inframerah mungkin memiliki waktu respons yang lebih lambat dibandingkan dengan sensor suhu kontak, terutama ketika mengukur suhu yang berubah dengan cepat atau objek yang bergerak.

5. **Interferensi lingkungan**: Faktor lingkungan seperti asap, debu, atau partikel lainnya di udara dapat mengganggu pengukuran suhu inframerah, menyebabkan ketidakakuratan.

6. **Biaya**: Sensor suhu inframerah dapat lebih mahal dibandingkan dengan sensor suhu kontak, terutama untuk model presisi tinggi atau yang memiliki fitur canggih.

7. **Kalibrasi**: Kalibrasi berkala diperlukan untuk menjaga akurasi sensor suhu inframerah. Hal ini membutuhkan peralatan dan keahlian khusus, menambah biaya dan kompleksitas penggunaan sensor tersebut.

8. **Kedalaman penetrasi terbatas**: Radiasi inframerah hanya dapat menembus permukaan objek yang diukur sampai kedalaman tertentu. Hal ini dapat menjadi keterbatasan ketika mengukur suhu material tebal atau tidak tembus pandang.


Meskipun memiliki kelemahan-kelemahan ini, sensor suhu inframerah tetap banyak digunakan dalam berbagai industri karena sifat non-kontaknya, kemudahan penggunaan, dan kecocokannya untuk beberapa aplikasi tertentu.




Praktek kita kali ini menggunakan TTL to RS485 agar data modbus dari sensor suhu infra red (bisa baca dulu disini untuk belajar cara akses sensor ini), dapat diubah level tegangan nya. Dan beberapa tulisan saya mengenai Modbus telah membahas juga namun kebetulan sekali ini adalah kali pertama saya membaca alat modbus menggunakan arduino uno sebagai master. Sebelumnya saya menggunakan esp8266 sebagai master modbus IOT dan arduino micro sebagai slave modbus, bisa dibaca disini dan disini .

Prinsip parsing data modbus pada pembahasan saya terdahulu tahun 2020 (jaman pandemi) seperti script berikut ini :


void loop()
{

unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= 5000) {
    // timer baca dht11 tiap 5 detik 
    previousMillis = currentMillis;   
    //kirim perintah ke modbus baca dht 11
   mod.write(humitemp, sizeof(humitemp));
    
    }

  //check modbus timeout
  long millisResponModbus = millis() + 1000;
  while (!mod.available())
  {
    if (millisResponModbus < millis())
    {
      break;//timeout
    }
  }
 
 // baca data serial yang masuk dari modbus lalu simpan pada pointer
  while (mod.available())
  {
    byte b = mod.read();
    *ptr++ = b;
    Serial.print("0x");
    Serial.print(String(b, HEX));
    Serial.print(" ");
    delay(2);

  }

  //proses komparasi data yg masuk (DHT11) dengan array jawaban lalu parsing
  if (memcmp(bufferDataModbus, dhtOK, sizeof(dhtOK)) == 0) {
  ptr = bufferDataModbus;
  Serial.println("");
  Serial.print(F("SUHU :"));
  Serial.print(ptr[4]); //alamat byte ke 4
  Serial.print(F(","));
  Serial.print(ptr[6]); //alamat byte ke 6
  Serial.print(F(" C HUMI :"));
  Serial.print(ptr[8]); //alamat byte ke 8
  Serial.println(" %");
  memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus));
 }


}


Jadi script diatas dulu itu akan menunggu membaca data OK berdasarkan Check Sum / CRC  modbus 16bit. Namun sepertinya itu bisa diabaikan karena hampir error jarang sekali terjadi. Jadi untuk membaca sensor suhu RS-WD-HW-N01 RS485, kira kira scriptnya seperti berikut :


/* Cara baca Sensor Suhu Infra merah
    type : RS-WD-HW-N01 RS485
	www.aisi555.com
	ahocool@gmail.com
*/

#include <SoftwareSerial.h>

SoftwareSerial mod(12, 10); // RX, TX ke rs485

//perintah baca suhu, baca penjelasan di blog
byte baca[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x84, 0x0A};


byte bufferDataModbus[10];
byte *ptr;

int incomingByte ;

int suhune, puluhan, satuan;

bool terima = false;
unsigned long previousMillis = 0;

void setup() {
  Serial.begin(9600);
  Serial.println(F("Testing Sensor Infra Ke Serial"));
  Serial.println(F("http://www.aisi555.com"));
  Serial.println();
  
  //baud rate default 4800
  mod.begin(4800);
  ptr = bufferDataModbus;
 
}

void loop() {
 unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= 5000) {
    // timer baca sensor tiap 5 detik 
    previousMillis = currentMillis;   
    //kirim perintah ke modbus baca sensor
   mod.write(baca, sizeof(baca));
    
    }

  //check modbus timeout
  long millisResponModbus = millis() + 1000;
  while (!mod.available())
  {
    if (millisResponModbus < millis())
    {
      break;//timeout
    }
  }
 
 // baca data serial yang masuk dari modbus lalu simpan pada pointer
  while (mod.available())
  {
    byte b = mod.read();
    *ptr++ = b;
    Serial.print("0x");
    Serial.print(String(b, HEX));
    Serial.print(" ");
    delay(1);
    terima = true;
  }

//parsing data suhu dan tampilkan di serial debug

	if (terima){
		ptr = bufferDataModbus;

		suhune = (ptr[3] *256) + ptr[4];
		puluhan = suhune / 10;
		satuan = suhune % 10;

		Serial.print("Suhu = ");
		Serial.print(puluhan);
		Serial.print(",");
		Serial.print(satuan);
		Serial.println(" Celcius");

		memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus));
		terima =false;
		}


}

Hasil dari tangkapan layar debug seperti ini :




Data suhu yang akan dibaca adalah data ke-4 (0x1) dan data ke-5 (0x3E). Data lainnya bisa diabaikan, sehingga rumus parsing saya dilakukan dengan script berikut:


	if (terima){
		ptr = bufferDataModbus; // pindahkan data
                //ini rumus sederhana untuk merubah 2byte modbus jadi desimal
		suhune = (ptr[3] *256) + ptr[4]; //pointer memori mulai dari nol
		puluhan = suhune / 10;
		satuan = suhune % 10;

		Serial.print("Suhu = ");
		Serial.print(puluhan);
		Serial.print(",");
		Serial.print(satuan);
		Serial.println(" Celcius");
               //bersihkan memori
		memset(bufferDataModbus, 0x00, sizeof(bufferDataModbus));
		terima =false;
		}


Sehingga secara gampangannya , 0x01 merupakan  High Byte sehingga dapat dikalikan 256 (desimal) untuk mendapatkan nilai desimal High Byte, sedangkan 0x3E (Low Byte) bernilai  desimal 62, dan selanjutnya tinggal ditambahkan saja yaitu 256 + 62 =  318. Ini cocok hasilnya dengan hexa 0x13E. Sebenernya ada cara lebih "elegan" yaitu dengan geser byte ke kiri, namun saya yakin pembaca akan tambah bingung.



Share:

[Modbus] Cara Membaca Sensor Suhu RS-WD-HW-N01 RS485 - PC

 


Sensor yang saya dapat kali ini merupakan request dari salah satu pembaca blog ini, yang secara kebetulan memang sangat jarang resource nya di internet. Datasheet pun didapatkan di scribd dengan beberapa kerancuan settingan dan parameter, dimana pembaca sempat beberapa kali kesal dan mengira alat converter RS-485 to USB/PC nya error. Namun saya berhasil menemukan datasheet dari alat yang sejenis (walau beda versi) berbahasa mandarin dan sukses melakukan pembacaan datanya melalui PC.



Alat ini dari produsennya shandong renke sebenarnya diharapkan dihubungkan dengan display, plc dan alarm buatan internal mereka semuanya. Sehingga ini yang menyebabkan sedikitnya resource internet yang membahas sensor ini.


Berikut ini adalah parameter yang benar dari alat ini :

  • Kabel Coklat : VCC 10-30 volt (typical 24 volt)
  • Kabel Hitam : GND
  • Kabel Kuning : RS485 A
  • Kabel Biru : RS485 B
  • Baud Rate : 4800 bps (awas salah)
  • Protokol : Modbus RTU
  • Default ID : 1
  • Range suhu :  0 -200 Celcius


Untuk melakukan pembacaan melaui PC maka perlu disiapkan berupa converter RS485 to USB dan software pembaca data modbus seperti radzio atau serial terminal yang pernah saya bahas disini




Untuk melakukan pembacaan data suhu, maka perintah yang diberikan adalah function code 03 (read holding register), dengan alamat memory 0000h atau 0001h. Jadi rincian kode modbusnya seperti berikut :


01 03 00 00 00 01 84 0A

01     =  Alamat device id sensor
03     =  Perintah baca holding register / function 03
00 00  = 2 byte alamat address memori (0)
00 01  = 2 byte panjang data yg diharapkan ( 1 data saja)
84 0A  = Checksum / CRC 16 modbus


Sedangkan jika data dikirmkan dengan benar, maka reply yang didapat seperti  berikut :


01 03 02 01 16 38 1A

01     =  Alamat device id sensor
03     =  Reply holding register / function 03
02     = Data suhu ber-format 2 byte 
01 16  = 2 byte data suhu
38 1A  = Checksum / CRC 16 modbus


Data yang diberikan oleh sensor suhu ini berupa hexa 2 byte yang diterjemahkan menjadi 0x116 atau desimal 278. Artinya suhu yang diukur adalah 27.8 Celcius. Dapat dilihat dari hasil capture radzio dibawah ini.





Di tulisan selanjutnya saya akan mencoba melakukan pembacaan sensor  Suhu RS-WD-HW-N01 menggunakan arduino.
Share:

Selasa, 06 Juni 2023

[ Node - RED ] Menghubungkan Relay Modbus Ke Dalam Node-Red Web UI


 

Untuk melanjutkan praktek berikut ini, disarankan terlebih dahulu membaca penjelasan mengenai Relay Modbus 4 channel disini dan persiapkan bahan-bahan nya yang masih sama. Kali ini akan saya jelaskan langkah menghubungkan Modul Relay Modbus-Rs485 ke node red, sehingga untuk pembaca yang belum mengenal node red dapat memulai perkenalannya dari tulisan saya sebelumnya disini.

Pada beberapa tulisan node-red sebelumnya saya hampir selalu menggunakan perangkat input / sensor modbus sehingga hanya terbatas pada function modbus 01, 03 dan 04 (read coil, input and read register) seperti pada praktek pembacaan pzem disini.  Kali ini saya bahas alat sebagai output yg cocok untuk membahas function 05 (write single coil). Perhatikan perintah serial modbus rtu untuk menghidupkan relay 1 berikut ini ( asumsi id device = 01):


01 05 00 01 FF 00 DD FA


Kode diatas berupa Hexa jadi kalau dipisah-pisah berdasarkan standar modbus adalah seperti berikut:

01     =  Alamat device id slave
05     =  Perintah Kontrol Single Relay/ function 05
00 01  = 2 byte alamat relay 0x0001
FF 00  = 2 byte yang menyatakan logic TRUE 
DD FA  = Checksum / CRC 16 modbus



Sedangkan untuk melepas / open  relay 3 kode modbus rtu nya seperti berikut ini :


01 05 00 03 00 00 3D CA


Kode diatas berupa Hexa jadi kalau dipisah-pisah berdasarkan standar modbus adalah seperti berikut:

01     =  Alamat device id slave
05     =  Perintah Kontrol Single Relay/ function 05
00 03  = 2 byte alamat relay 0x0001
00 00  = 2 byte yang menyatakan logic FALSE
3D CA  = Checksum / CRC 16 modbus


Sedangkan pada node red flow,  palete yg kita pilih adalah Modbus Write :




Penjelasan :

  1. Function yang dipilih 05 (Force Single Coil)
  2. Alamat dari relay (dimulai dari 0 untuk modul relay rs485 yg dipakai)
  3. Komunikasi yang dipakai, seting lanjutannya dibawah ini.




Jadi untuk meng-"CLOSE" dan "OPEN" relay sesuai address nya, maka cukup di inject nilai logika boolean True dan False ke Node Modbus Write.



Dari flow diatas maka ketika tombol inject ditekan akan mengirim logika true dan false langsung ke perangkat relay. Sesimpel itu kok ! Lalu bagaimana jika mengaktifkan dan mematikan semua relay? Kita akan gunakan perintah / function 15 (0F).



01 0F 00 00 00 08 01 FF BE D5


Kode diatas berupa Hexa jadi kalau dipisah-pisah berdasarkan standar modbus adalah seperti berikut:

01     =  Alamat device id slave
0F     =  Perintah Kontrol Multiple Relay/ function 15
00 00  = 2 byte alamat awal relay start 0x0000
00 08  = 2 byte alamat terakhir relay 0x0008 (kenapa 8 ? karena modul yg paling banyak 8 relay)
01     = 1 byte yang akan ditulis ke relay
FF     = 1 byte yang mewakili relay 8 s/d 0  sesuai bit nya, jadi bisa kombinasi bit

BE D5    = checksum

*) Keterangan FF berarti semua relay (8 buah ) mendapat logika 1 ( 1 1 1 1 1 1 1 1 ) alias nyala semua, jadi kalau 00 berarti mati semua relaynya




Pada flow node red kita akan gunakan function 15 dan kita inject berupa array / json yang berisi 8 buah logika true dan false. Contoh flownya bisa dilihat dibawah.








Sehingga akan sangat mudah merubah node inject menjadi node web ui berupa "switch" seperti pada gambar flow dibawah. Namun jika masih awam dengan web UI nya node red bisa membaca disini dan disini.






Outputnya menjadi lumayan menarik, bisa mengontrol modul relay modbus-rs485 melalui web browser.







Share:

Senin, 05 Juni 2023

Cara Mengontrol Modul Relay Modbus - RS485 Melalui PC

 



Setelah beberapa kali membahas mengenai cara akses perangkat sensor ber-protokol Modbus RTU, maka kali ini akan dipraktekkan bagaimana cara mengontrol relay yang modulnya banyak beredar di marketplace yaitu bertipe 485 relay 2 ch / 4 ch / 8 ch  V1.1 . Modul ini banyak dibahas di berbagai blog, bagaimana secara gamblang sekali mengirim datanya menggunakan arduino, dimana kebanyakan menggunakan perintah serial langsung jadi (berupa sequence modbus) beserta dengan ceksum CRC mod16 di belakangnya.


Sebelumnya bisa dibaca seri tulisan mengenai modbus disini dan praktek pzem disini


Namun seperti  biasa bukan blog aisi555 kalau hanya berbagi script langsung pakai tanpa membuat bingung pembaca. Eeiittt....kali ini gampang kok, cukup sediakan modul relay nya seperti diatas beserta power suply 12 volt dan jangan sampai ketinggalan perangkat USB to RS485 yang akan menghubungkan PC ke perangkat relay secara RS485. Setelah menghubungkan 2 kabel A+ dan B-  antara USB to RS485 vs Modul Relay, maka dari berbagai sumber di internet ( disini dan disini ) saya pilihkan beberapa perintah serial siap pakai yg bisa dicoba melalui terminal/putty/realterm. Ingat bahwa perangkat yang baru datang secara default /awal memiliki address 1 dengan BaudRate 9600.




Cara Mengetahui Address :

00 03 00 00 00 01 85 DB

Return:

00 03 02 00 01 44 44  ==> 01 itu address (warna merah)


Kita asumsikan address dari modul adalah 01 ( 1 byte paling depan adalah address)


Relay 0 ON  : 01 05 00 00 FF 00 8C 3A

Relay 0 OFF: 01 05 00 00 00 00 CD CA


Relay 1 ON : 01 05 00 01 FF 00 DD FA 

Relay 1 OFF: 01 05 00 01 00 00 9C 0A 


Relay 2 ON : 01 05 00 02 FF 00 2D FA

Relay 2 OFF : 01 05 00 02 00 00 6C 0A 


Relay 3 ON : 01 05 00 03 FF 00 7C 3A

Relay 3 OFF : 01 05 00 03 00 00 3D CA


*) Warna orange / 2 byte di belakang adalah CRC Modbus 16


Saya sih lebih senang menggunakan Real Term sebagai serial terminal untuk mengetestnya seperti yang saya lakukan sebelumnya ( klik disini untuk mengetahui seting nya) , dan hasil capture saya dibawah ini :



CRC Modbus 16 di bagian belakang (2 byte terakhir) dapat di masukkan langsung atau membiarkannya dibuatkan langsung oleh RealTerm. Jangan lupa menambahkan 0x sebelum hexanya agar tidak terjadi error (khusus realterm)


Perintah lainnya yang mungkin berguna :


SEMUA ON : 01 0F 00 00 00 08 01 FF BE D5

SEMUA OFF : 01 0F 00 00 00 08 01 00 FE 95


Membalik posisi relay / Flip / Toggle

Relay 0 Flip / Toggle : 01 05 00 00 55 00 F2 9A

Relay 1 Flip / Toggle : 01 05 00 01 55 00 A3 5A

Relay 2 Flip  / Toggle : 01 05 00 02 55 00 53 5A

Relay 3 Flip  / Toggle : 01 05 00 03 55 00 02 9A

 

Merubah address (contoh dari 01 ke 09 ) :  01 10 00 00 00 01 02 00 09 66 56

Merubah address (contoh dari 09 ke 01 ) : 09 10 00 00 00 01 02 00 01 00 50




Lalu animasi paling atas gimana ya ? Saya gunakan python untuk merubah relay secara berurutan:


import serial
from time import sleep

ser = serial.Serial("COM25", baudrate=9600, timeout=3.0)

tog1 =b'\x01\x05\x00\x00\x55\x00\xF2\x9A'
tog2 =b'\x01\x05\x00\x01\x55\x00\xA3\x5A'
tog3 =b'\x01\x05\x00\x02\x55\x00\x53\x5A'
tog4 =b'\x01\x05\x00\x03\x55\x00\x02\x9A'


while (True):
    print("Merubah relay secara berurutan ..")
    ser.write(tog1)
    sleep(0.5)
    ser.write(tog2)
    sleep(0.5)
    ser.write(tog3)
    sleep(0.5)
    ser.write(tog4)
    sleep(0.5)

Pada kesempatan selanjutnya saya akan mengakses modul relay modbus RS 485 ini melalui node red baca disini.
Share:

Jumat, 03 Maret 2023

PZEM-004T : Terhubung ke Internet melalui Node Red, apakah aman ?

 



Node red pada dasarnya ditujukan pada penggunaan kontrol internal dari suatu sistem dimana jaringan komputernya cukup berupa intranet saja. Ini mungkin terlihat tidak menarik dijaman serba IOT namun dari banyak kejadian penyusupan hacker ke dalam kontrol berbasis internet akan sangat berbahaya. Ingat kejadian ini ?




Wah berbahaya juga ya? Jadi yang aman apa ya ? Security dan kecepatan serta kenyamanan akses juga menjadi pertimbangan dimana keduanya saling berbanding terbalik, mau cepat ya ujungnya tidak bisa terlalu ketat tingkat keamanannya. 


Namun kali ini saya tidak akan terlalu jauh membahas keamanan dari node-red karena mungkin akan melenceng jauh dari pembahasan saya di elektronika. Jadi saya akan membahas 2 cara membawa pengukuran pzem-004t  berbasis node red ( bisa dibaca sebelumnya disini ) menuju ke luar internet.


Menggunakan MQTT


Cara ini sudah pernah saya tulis beberapa tahun lalu, jadi jika ingin mempelajarinya secara mendasar dapat dibaca kembali disini. Setupnya pada node-red cukup sederhana namun hasilnya dapat dihandalkan.







Menggunakan VPN  ZeroTier One


Cara ini cukup beresiko karena meminjam jaringan orang lain sebagai VPN nya walau dari iklannya ZeroTier dibilang akan aman-aman saja. Namun untuk skala belajar di sekolah atau kampus mungkin ini menjadi solusinya. Jadi setelah kamu mendaftarkan akun di Zerotier.com dan membuat networknya, maka dapat menginstall softwarenya di node manapun dan yg terpenting pada PC tempat menginstall Node Red. Jadi semua PC, smartphone android dan linux sekalipun dapat dibuat menjadi 1 jaringan VPN, walau menggunakan jaringan seluler atau dibelakang wifi sekalipun.










Setelah terkoneksi antar network zerotier dengan node PC dan Smartphone android seperti contoh gambar diatas, maka dapat dilakukan pengetesan dengan ping antara node yang terhubung.





Nah jika sudah terhubung antar node ini maka resmilah hubungan yang  "terlarang" antara pzem-nodered-internet dalam melakukan penghitungan daya pada suatu sistem kelistrikan arus AC. Alamat web UI node red yg biasanya http://localhost:1880/ui kini dapat diakses dari jaringan vpn zero tier one dengan alamat http://ip pc node red :1880/ui







Share:

Kamis, 02 Maret 2023

PZEM-004T : Menghubungkan ke grafik PC melalui Node-Red

 


Sebelum melanjutkan praktek pzem ke pc dibawah ini, ada baiknya membaca terlebih dahulu tulisan saya terdahulu mengenai node-red dan modbus, sehingga lebih mudah memahaminya. Saya tidak akan mengulang kembali cara instalasi node red pada pc berbasis windows maupun linux, namun langsung mengingatkan agar jangan lupa menginstall package pada palletes atau npm node js yang berhubungan dengan komunikasi modbus.




Seperti pada pembahasan pzem-004T sebelumnya pada bagian 1 dan bagian 2, untuk membaca tegangan pada pengukuran energi menggunakan pzem-004T adalah dengan akses pembacaan pada alamat 0x0000. Dan dengan menggunakan node-red ini menjadi cukup mudah dilakukan, yaitu menggunakan console debug seperti gambar dibawah ini :




Dan jika perkabelan pada pzem vs usb to serial benar maka pada console debug akan muncul output tegangan.



 

Selanjutnya kita pun dapat merubah parameter pembacaan dengan menampilkan ke semua data yang bisa diperoleh pada Pzem-004T.




Pada gambar diatas dapat dilihat dengan mudahnya dapat mengambil data pengukuran pzem dan kesemuanya dalam satu array yang urut. Jadi jika disandingkan dengan pengukuran dari software bawaan pzem, maka gambarnya sperti ini.




Selanjutnya dengan sedikit pemrograman maka array tadi bisa dipecah dan ditampilkan pada grafik html atau web. Untuk memulainya ada baiknya dibaca dulu pembahas penulisan grafik web UI disini.

Dan hasilnya bisa dilihat seperti berikut  pada alamat browser http://localhost:1880/ui .








Script pada function  untuk merubah array modbus menjadi nilai tegangan seperti ini :



Jadi dengan kreatifitas yang tidak terbatas pada node-red maka akan sangat mudah membuat Man Machine Interface berbasis web ke perangkat sensor maupun aktuator berbasis modbus.

 

Share:

PZEM-004T : Membedah modbus sensor daya serbaguna [part2]

 


Pada bagian sebelumnya telah dijelaskan standar modbus untuk melakukan pembacaan pada sensor daya Pzem-004T. Contoh kasus yang diberikan adalah untuk membaca input register pada alamat tunggal yaitu tegangan dan frekuensi. Bagaimana jika memanggil pembacaan data dengan 16 byte seperti pengukuran arus ? Mari kita baca datasheet dibawah ini :



Terlihat alamat untuk melihat pengukuran arusnya adalah 0x0001 s/d 0x0002 dimana dipecah menjadi 2 bagian 16 bits / 2 byte. Hasil pada real term seperti ini :




01 04 00 01 00 02 20 0B


Kode diatas berupa Hexa jadi kalau dipisah-pisah berdasarkan standar modbus adalah seperti berikut:

01     =  Alamat device id slave
04     =  Perintah membaca input register/ function 04
00 01  = 2 byte alamat address memori  untuk  arus pada 0x0001
00 02  = 2 byte jumlah data yang diminta berupa 2 alamat 
20 0B  = Checksum / CRC 16 modbus


Dan replynya seperti berikut  :


01 04 04 00 26 00 00 1A 4F

01     =  Alamat device id slave
04     =  Perintah membaca input register/ function 04
04     =  jumlah byte data yg di response berjumlah 4 byte
00 26  = 2 byte data arus LSB ( digit belakang)
00 00  = 2 byte data arus MSB ( digit depan)
1A 4F  = Checksum / CRC 16 modbus


Jadi dari data diatas  didapatkan reply 2 byte hexa  0x00 (depan) dan 0x26 (belakang) sehingga angka desimalnya adalah 0 dan 38. Jadi berdasarkan datasheet angka pengukuran arusnya adalah 0,038 ampere atau 38 mA.


Jika ingin merubah ID dari modbus Pzem maka kita harus kembali ke datasheet dimana perintah command yg diberikan adalah 0x06 pada address memori 0x0002.



Slave Address + 0x06 + Register Address High Byte + Register Address Low Byte + Register
Value High Byte + Register Value Low Byte + CRC Check High Byte + CRC Check Low Byte.


Sehingga jika ingin merubah ID pzem menjadi 100 (desimal) atau hexa 0x64 perintahnya seperti berikut :






01 06 00 02 00 64 29 E1


Kode diatas berupa Hexa jadi kalau dipisah-pisah berdasarkan standar modbus adalah seperti berikut:

01     =  Alamat device id slave
06     =  Perintah ubah register/ function 06
00 02  = 2 byte alamat address memori  untuk ID modbus 0x002
00 64  = 2 byte alamat baru 100 ( 0x64)
29 E1  = Checksum / CRC 16 modbus


Reply yg diberikan jika perubahan benar terjadi dan disimpan adalah sama dengan hexa yg dikirim seperti gambar diatas. Dan kini perangkat Pzem nya sudah memiliki ID baru yaitu 100 seperti yg terlihat pada gambar berikut :




 
Sedangkan hal yg perlu diperhatikan selanjutnya adalah perintah untuk mereset jumlah pemakaian energi watt hour menjadi nol dimana pada data sheet diberikan petunjuk dengan menggunakan perintah  ID  + 0x42 + CRC , dimana jika pada alamat 100 seperti gambar dibawah :




 

Pada software pzem PC juga bisa dilihat hasil resetnya :




Lalu sempat terpikir, bagaimana jika tidak mengetahui alamat slave ID dari Pzem ? Ada kok caranya mereset menurut datasheet ...



0xF8 + 0x41 + 0x37 + 0x21 + CRC check high byte + CRC check low byte.   ( 3721 adalah password default ).


Mari kita coba ...



Ternyata response nya gagal.....0xF8 0xC1 artinya gagal melakukan kalibrasi awal....lain kali kita coba lagi

Share:

Kontak Penulis



12179018.png (60×60)
+628155737755

Mail : ahocool@gmail.com

Site View

Categories

555 (8) 7 segmen (3) adc (4) amplifier (2) analog (19) android (12) antares (11) arduino (27) artikel (11) attiny (3) attiny2313 (19) audio (5) baterai (5) blog (1) bluetooth (1) chatgpt (2) cmos (2) crypto (2) dasar (46) digital (11) dimmer (5) display (3) esp8266 (26) euro2020 (13) gcc (1) gsm (1) iklan (1) infrared (2) Input Output (3) iot (74) jam (7) jualan (12) kereta api (1) keyboard (1) keypad (3) kios pulsa (2) kit (6) komponen (17) komputer (3) komunikasi (1) kontrol (8) lain-lain (8) lcd (2) led (14) led matrix (6) line tracer (1) lm35 (1) lora (11) lorawan (2) MATV (1) memory (1) metal detector (4) microcontroller (70) micropython (6) mikrokontroler (1) mikrokontroller (14) mikrotik (5) modbus (9) mqtt (3) ninmedia (5) ntp (1) paket belajar (19) palang pintu otomatis (1) parabola (88) pcb (2) power (1) praktek (2) project (33) proyek (1) python (8) radio (28) raspberry pi (9) remote (1) revisi (1) rfid (1) robot (1) rpm (2) rs232 (1) script break down (3) sdcard (3) sensor (2) sharing (3) signage (1) sinyal (1) sms (6) software (18) solar (1) solusi (1) tachometer (2) technology (1) teknologi (2) telegram (2) telepon (9) televisi (167) television (28) telkomiot (5) transistor (2) troubleshoot (3) tulisan (94) tutorial (108) tv digital (6) tvri (2) vu meter (2) vumeter (2) wav player (3) wayang (1) wifi (3) yolo (7)

Arsip Blog

Diskusi


kaskus
Forum Hobby Elektronika