PZEM004 V3

Post Reply
User avatar
QLQ
Posts: 533
Joined: Sun Sep 03, 2017 9:13 am
Location: Koszalin

Wed Jun 12, 2019 8:50 pm

Tak jak pisałem . Zakładam nowy temat dotyczący licznika energii z Ali PZEM004t.
https://pl.aliexpress.com/item/PZEM-004 ... 2e0ednKqk9
Obecna wersja obsługuje odczyt parametrów:
- napięcia
- prądu
-mocy
-energii (zapisuje je w swojej pamięci - w przypadku zaniku zasilania)
-częstotliwości
-współczynnika mocy.

PZEM004 V3 dotarł w pń do mnie i został przeze mnie przetestowany za pomocą programu pod niego dedykowanego przez producenta oraz pod arduino sprzęgnięty z WEMos D1 mini.
Wszystko co mam do tego modułu razem z gerberami, opisem komunikacji zawieram poniżej.
Na Githubie użytkownik brunohorta82 udostępnił gerbery pod płytki 1faz i 3faz wraz z licencją MIT.
https://github.com/brunohorta82/BH_PZEM_ESP8266 - GERBERY

PROGRAM POD ARDUINO, program producenta, opis komunikacjiw PDF
V3_PZEM004.rar
(1.22 MiB) Downloaded 13 times


Nadmieniam że pliki powyższe są znalezione w sieci i nie jestem ich autorem, chcę tylko Was zainteresować tematem , który od czasu do czasu przypominam gdyż uważam, że PZEM004 jest fajną alternatywą licznika energii dla chcących coś pomajsterkować. Nie chcę tu robić żadnej konkurencji innych modułów.

Tak wygląda odczyt z Arduino przy pomocy WeMos (RX, TX, GND, 5V):
Przepraszam że wartości zerowe ale młodzież śpi a nie chcę hałasować i podłączać coś energożarłocznego :) musicie mi uwierzyć że działa
Clip_3.jpg
Clip_3.jpg (11.78 KiB) Viewed 315 times
V3_PZEM004.rar
(1.22 MiB) Downloaded 13 times
Programik Arduino bardzo prosty - wyczytanie wartości śmiesznie proste -TYLKO JAK TO WYSŁAĆ DO ENERGYMETER ?!

Code: Select all

    /*
    An Arduino Sketch for reading data from a PZEM-014 or PZEM-016
    Uses this library: http://4-20ma.io/ModbusMaster/
    */
     
     
    #include <ModbusMaster.h>
    #include <SoftwareSerial.h> 
     
    SoftwareSerial pzemSerial(4,5); //rx, tx
    ModbusMaster node;
    static uint8_t pzemSlaveAddr = 0x01;
    #define LEDPIN 13 
     
    void setup() {
      pzemSerial.begin(9600); 
      Serial.begin(9600);
    // resetEnergy(pzemSlaveAddr);
      node.begin(pzemSlaveAddr, pzemSerial);
      pinMode(13, OUTPUT);
      digitalWrite(LEDPIN,0);
    }
     
    /* 
    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
    */
     
    void loop() {
      uint8_t result;
      digitalWrite(LEDPIN,1);
      result = node.readInputRegisters(0x0000, 9); //read the 9 registers of the PZEM-014 / 016
      digitalWrite(LEDPIN,0);
      if (result == node.ku8MBSuccess)
      {
        float voltage = node.getResponseBuffer(0x0000) / 10.0;
     
        uint16_t tempWord;
     
        float current;
        tempWord = 0x0000;
        tempWord |= node.getResponseBuffer(0x0002);       //LowByte
        tempWord |= node.getResponseBuffer(0x0001) << 8;  //highByte
        current = tempWord;

        float power;
        tempWord = 0x0000;
        tempWord |= node.getResponseBuffer(0x0004);       //LowByte
        tempWord |= node.getResponseBuffer(0x0003) << 8;  //highByte
        power = tempWord;
        
        uint16_t energy;
        tempWord = 0x0000;
        tempWord |= node.getResponseBuffer(0x0006);       //LowByte
        tempWord |= node.getResponseBuffer(0x0005) << 8;  //highByte
        energy = tempWord;
     
        Serial.print(voltage);
        Serial.print("V   ");
     
        Serial.print(current);
        Serial.print("A   ");
       
        Serial.print(power);    
        Serial.print("W  ");
        
        Serial.print((node.getResponseBuffer(0x0008))/100.0);
        Serial.print("PowFac   ");
		
		    Serial.print((node.getResponseBuffer(0x0007))/10.0);
        Serial.print("Hz   ");
     
        Serial.print(energy);
        Serial.print("Wh  ");
        Serial.println();
     
      } else {
        Serial.println("Failed to read modbus");  
      }
      delay(2000);
    }
     
    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");
      pzemSerial.write(slaveAddr);
      pzemSerial.write(resetCommand);
      pzemSerial.write(lowByte(u16CRC));
      pzemSerial.write(highByte(u16CRC));
      delay(1000);
    }
pz.jpg
pz.jpg (225.6 KiB) Viewed 312 times

POWIĄZANE ABY NIE DUBLOWAĆ:
viewtopic.php?f=17&t=3981&start=340
User avatar
dawidd
Posts: 382
Joined: Tue Dec 19, 2017 12:45 pm

Thu Jun 13, 2019 5:06 am

QLQ chyba powinieneś dostać medal za samozaparcie :) brawo
Czekam teraz na suple i tez sobie takie coś poskładam
User avatar
QLQ
Posts: 533
Joined: Sun Sep 03, 2017 9:13 am
Location: Koszalin

Fri Jun 14, 2019 10:52 pm

Hmmm...może jakiś konkurs...9 płytek pod PZEM004_V2 lub V3 do rozdania.
Muszę coś wymyślić z tym licznikem..
20190615_004845.jpg
20190615_004845.jpg (336.15 KiB) Viewed 183 times
User avatar
QLQ
Posts: 533
Joined: Sun Sep 03, 2017 9:13 am
Location: Koszalin

Tue Jun 18, 2019 6:44 pm

Mam już płytki pod 1 i 3 razy pod pzem
IMG_20190618_204322.jpg
IMG_20190618_204322.jpg (147.05 KiB) Viewed 90 times
User avatar
lesny8
Posts: 546
Joined: Mon Dec 11, 2017 9:43 pm

Tue Jun 18, 2019 9:35 pm

Myślałem, że ta płytka na 3 fazy będzie rozmiarowo 3x większa :shock: Jak się to tam ma zmieścić, chyba że jedno na drugie i podłączone przewodami?
Do mnie PZEM-004 jeszcze nie dopłynęły :?
User avatar
QLQ
Posts: 533
Joined: Sun Sep 03, 2017 9:13 am
Location: Koszalin

Tue Jun 18, 2019 9:45 pm

Pzem'y podlaczamy 3 szt pzem x4 kablami w złącza pzem1,2,3. Masz wszystko łacznie z jpg w tym rar co Tobie wcxesniej wyslałem.
Soft tak czy inaczej można pisać pod wemos nie mając płytek bo i tak rx tx podłączonamy np pod d1 i d2. Pakuje i wysyłam. Napisz ile chcesz płytek. Mogę wysłać też tego uszkodzonego aczkolwiek dzialajacego.oraz sprawną nową wersję v3 pzem zgodnie z opisem w zrób sam w sprzęcie. Kupiłem Jeszce 2 sieci tak będę miał. Daj znać adres mam to.jutro mogę wysłać.
User avatar
lesny8
Posts: 546
Joined: Mon Dec 11, 2017 9:43 pm

Tue Jun 18, 2019 10:21 pm

To jak podłączyć to wiem, tylko myślałem, że trójka będzie większa od jedyki :)
Po sztuce płytek wystarczy.
Post Reply