PZEM004T delais entre 2 lectures

Bonjour à tous,

J’utilise un PZEM-004 pour analyser le courant d’une prise.
Mais la lecture n’est pas “rapide”; elle se fait à 1 seconde puis 2 secondes.
Je ne cherche pas plus rapide mais au moins toutes les secondes.

Je post le code si qqu’un à déjà eu ce problème

#include <PZEM004T.h> 
#include <Wire.h> 
#include <DS1302.h>
DS1302 rtc(19, 20, 21); 
Time t; 


PZEM004T pzem(10, 11); 
IPAddress ip(192, 168, 1, 1); //PZEM


void setup() {


  rtc.halt(false);  
  rtc.writeProtect(false); 
  pzem.setAddress(ip); 

  Serial.begin (9600);
  Serial.println ("ok");
  
}

void loop() {
  
  float v = pzem.voltage(ip);
  float i = pzem.current(ip);
  float p = pzem.power(ip);
  
  t = rtc.getTime();
  
  Serial.print("seconde : ");
  Serial.print(t.sec / 10, DEC); 
  Serial.print(t.sec % 10, DEC);
  Serial.print("  Volt: ");
  Serial.print(v);
  Serial.print(" Amp : ");
  Serial.print(i);
  Serial.print("  Watt : ");
  Serial.println(p);


}

Et ici le résultat du moniteur série :

seconde : 27  Volt: 226.60 Amp : 0.28  Watt : 32.00
seconde : 28  Volt: 226.70 Amp : 0.28  Watt : 32.00
seconde : 30  Volt: 226.70 Amp : 0.26  Watt : 31.00
seconde : 31  Volt: 226.70 Amp : 0.26  Watt : 34.00
seconde : 33  Volt: 226.20 Amp : 0.26  Watt : 45.00
seconde : 34  Volt: 226.20 Amp : 0.28  Watt : 32.00
seconde : 36  Volt: 226.20 Amp : 0.28  Watt : 34.00
seconde : 37  Volt: 226.50 Amp : 0.28  Watt : 33.00
seconde : 39  Volt: 226.50 Amp : 0.27  Watt : 31.00
seconde : 40  Volt: 226.30 Amp : 0.27  Watt : 31.00
seconde : 42  Volt: 226.30 Amp : 0.33  Watt : 44.00
seconde : 43  Volt: 226.30 Amp : 0.33  Watt : 45.00
seconde : 45  Volt: 226.40 Amp : 0.33  Watt : 45.00

Par avance merci

Bonjour

Merci d’attirer l’attention sur ce module !

le module est peut être lui même relativement lent à répondre
La cadence augmente-t-elle en commentant 2 les lignes suivantes pour n’interroger le module que pour la puissance ?

  float v = pzem.voltage(ip);
 float i = pzem.current(ip);

Trouvé un site russe avec quelques infos sur le module PZEM004T
(belle application sur ce site avec un ESP8266 et un afficheur TFT)

Le circuit intégré principal du module est un SD3004 de la société chinoise SDIC apparement spécialisée en ASICS mixtes

  • je joins la notice technique du CI SD3004 D’après le brochage on dirait un CI conçu pour gérer directement un afficheur LCD mais doté d’un UART pour être éventuellement ‘communiquant’.

Noter que le circuit imprimé du PZEM004 est critiqué içi sur le forum Arduino pour sécurité insuffisante

SD3004 datasheet v0.2c.pdf (206 KB)

Bonjour al1fch,

Oui j'avais remarqué qu'en commentant les 2 lignes suivantes le module est plus réactif.

 float v = pzem.voltage(ip);
 float i = pzem.current(ip);

Mais je suis sur la réalisation d'un datalogger et j'aurais bien aimé qu'il écrive d'une façon régulière sur la SD (toutes les 1 secondes ) mais l'Arduino est bloqué pendant la phase d'interrogation.

Cordialement

J4l13n: Bonjour al1fch,

Oui j'avais remarqué qu'en commentant les 2 lignes suivantes le module est plus réactif.

 float v = pzem.voltage(ip);
 float i = pzem.current(ip);

Mais je suis sur la réalisation d'un datalogger et j'aurais bien aimé qu'il écrive d'une façon régulière sur la SD (toutes les 1 secondes ) mais l'Arduino est bloqué pendant la phase d'interrogation.

Cordialement

Bonjour çà donne quoi en diminuant le delay de timout dans PZEM004T.h par exemple en passant

#define PZEM_DEFAULT_READ_TIMEOUT 1000

à

#define PZEM_DEFAULT_READ_TIMEOUT 750

Bonjour

En le diminuant à 750 il n'y a plus le temps au module de répondre.

seconde : 49  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 50  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 51  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 52  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 53  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 54  Volt: -1.00 Amp : -1.00  Watt : -1.00

J'ai relever jusqu'a 950 qui elle donne :

seconde : 09  Volt: 229.70 Amp : 0.39  Watt : -1.00
seconde : 11  Volt: 229.70 Amp : -1.00  Watt : -1.00
seconde : 12  Volt: 229.80 Amp : 0.39  Watt : 50.00
seconde : 14  Volt: -1.00 Amp : 0.39  Watt : -1.00
seconde : 15  Volt: 229.80 Amp : -1.00  Watt : 51.00
seconde : 17  Volt: 229.70 Amp : 0.39  Watt : -1.00
seconde : 19  Volt: 229.70 Amp : -1.00  Watt : -1.00
seconde : 19  Volt: 229.70 Amp : 0.39  Watt : 51.00
seconde : 21  Volt: -1.00 Amp : -1.00  Watt : 51.00
seconde : 23  Volt: 229.40 Amp : 0.39  Watt : -1.00

Le module ne semble pas être prévu pour des lectures aussi rapproché.

J4l13n: Bonjour

En le diminuant à 750 il n'y a plus le temps au module de répondre.

seconde : 49  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 50  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 51  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 52  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 53  Volt: -1.00 Amp : -1.00  Watt : -1.00
seconde : 54  Volt: -1.00 Amp : -1.00  Watt : -1.00

J'ai relever jusqu'a 950 qui elle donne :

seconde : 09  Volt: 229.70 Amp : 0.39  Watt : -1.00
seconde : 11  Volt: 229.70 Amp : -1.00  Watt : -1.00
seconde : 12  Volt: 229.80 Amp : 0.39  Watt : 50.00
seconde : 14  Volt: -1.00 Amp : 0.39  Watt : -1.00
seconde : 15  Volt: 229.80 Amp : -1.00  Watt : 51.00
seconde : 17  Volt: 229.70 Amp : 0.39  Watt : -1.00
seconde : 19  Volt: 229.70 Amp : -1.00  Watt : -1.00
seconde : 19  Volt: 229.70 Amp : 0.39  Watt : 51.00
seconde : 21  Volt: -1.00 Amp : -1.00  Watt : 51.00
seconde : 23  Volt: 229.40 Amp : 0.39  Watt : -1.00

Le module ne semble pas être prévu pour des lectures aussi rapproché.

OK l'hypothese premiere d'Al1 était la bonne Le module est du genre "lent à la détente" :grin:

Bonjour,

pas la peine de modifier la librairie. Il y a une méthode void setReadTimeout(unsigned long msec) prévue pour changer le timeout depuis l'application.

Y-a-t-il réellement besoin de logger tension , courant et puissance active ?

al1fch: Y-a-t-il réellement besoin de logger tension , courant et puissance active ?

J'ai essayer juste d'interroger l'intensité et la tension et dans déduire la puissance par calule mais c'est le même problème...

Du coup j'ai poster ma question en espérant résoudre le problème dans son intégralité.

Cordialement

En l'absence d'information du fabriquant du CI SD300 sur le timing des acquisition il faudrait faire des essais pour connaitre son 'temps d'acquisition de calcul et de réponse' et donc la cadence maximale. Par ailleurs la notice ne montre pas de possibilité d'augmenter le débit de l'UART interne.

Est-il réellement nécessaire pour l'application de mesurer la tension chaque seconde ? C'est ce besoin d'acquisition à 1 Hz qui intrigue un peu.

al1fch: Est-il réellement nécessaire pour l'application de mesurer la tension chaque seconde ? C'est ce besoin d'acquisition à 1 Hz qui intrigue un peu.

Bonsoir al1fch,

Je voulais enregistré d'une façon constante, je vais donc modifier le code pour qu'il l'interroge toute les 2 secondes.