Go Down

Topic: Problema con traducir los valores de voltaje del sensor ZMPT101B (Read 2051 times) previous topic - next topic

VictorA

Saludos,

Estoy tratando de usar el sensor de voltaje ZMPT101B (con Arduino Uno) para obtener los valores de voltaje de la red (220 RMS), pero los valores que necesito no son los RMS, sino que son los peak to peak, es ecir de -311 V a 311 V, (los valores dentro de este rango).

El sensor es mostrado en la siguiente imagen:



Pero, el problema es que los valores dados en el monitor serie de mi arduino son muy variables y a causa de eso no he podido hacer una formula para traducir los valores del sensor a valores de voltaje.

El código quen estoy usando es el siguiente:
Code: [Select]
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  int rele = 3; //relé conectao al pin digital 3
int sensorvalue = 0; // variable to store the value read
int sensmax = 0;
int sensmin = 0;
int Rmsmax = 0;
int Rmsmin = 0;
void setup()
{
 
  pinMode(rele, OUTPUT); // inicializar entrada digital 3 como una salida (OUTPUT)
   
  Serial.begin(9600); // initialize serial communication at 9600 bits per second
}

// the loop function runs over and over again forever
void loop()
{
    int sensorvalue = analogRead(A0); // read the input on analog pin 0
    //Serial.println(sensorvalue); // print out the value you read
    digitalWrite(rele, HIGH);
    //int cont = 0; //Inicializa la varieble de contar en cero
    //Serial.println (cont);
    sensmax = max(sensorvalue,600) ;
    sensmin = max(sensorvalue,50);
    Rmsmax= sensmax*1.4142;
    Rmsmin= sensmin*1.4142;
   
    Serial.print(sensmax);
    Serial.print("");
    Serial.print(" SensorMax");
    Serial.print("\t");
    Serial.print(Rmsmax);
    Serial.print("");
    Serial.print(" SensorRMSmax");
    Serial.println("");
    Serial.print(sensmin);
    Serial.print("");
    Serial.print(" SensorMin");
    Serial.print("\t");
    Serial.print(Rmsmin);
    Serial.print("");
    Serial.print(" SensorRMSmin");
    Serial.println("");
    Serial.println("");
    delay (0.000001);
    }


Y estos son los valores que el monitor serie muestra:



Espero me puedan ayudar con este problema.
Gracias.

surbyte

Primer error. No has leido mucho acerca de tu sensor, pero basicamente para medir AC se corre la tensión de salida en 2.5V de modo que un 0 es 512 y si quiere leer 0VAC entonces haces esto

Code: [Select]
int sensorvalue = analogRead(A0)-512; // read the input on analog pin 0

Comienza con esto que es un error importante y luego te daré un método que mejorar las lecturas aún mas.


VictorA

Primer error. No has leido mucho acerca de tu sensor, pero basicamente para medir AC se corre la tensión de salida en 2.5V de modo que un 0 es 512 y si quiere leer 0VAC entonces haces esto

Code: [Select]
int sensorvalue = analogRead(A0)-512; // read the input on analog pin 0

Comienza con esto que es un error importante y luego te daré un método que mejorar las lecturas aún mas.


Estimado,
He realizado lo que me dice. Los valores aún son muy variables:


y la verdad sobre leer acerca del sensor, este venía sin manuales y en internet no he logrado encontrar mucho.

surbyte

Prueba con Emonlib a ver si resuelve tu problema


Code: [Select]
// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3

#include "EmonLib.h"             // Include Emon Library

EnergyMonitor emon1;             // Create an instance

void setup()

  Serial.begin(9600);
 
  emon1.voltage(2, 234.26, 1.7);  // Voltage: input pin, calibration, phase_shift
}

void loop() {
  emon1.calcVI(20,2000);         // Calculate all. No.of half wavelengths (crossings), time-out
  emon1.serialprint();           // Print out all variables (realpower, apparent power, Vrms, Irms, power factor)

  float supplyVoltage   = emon1.Vrms;             //extract Vrms into Variable

}

VictorA


Estimado, gracias por su respuesta, pero no compila, me aparece el siguiente error
Quote
exit status 1
Error compilando para la tarjeta Arduino/Genuino Uno.
No se si usted puede entender ingles, pero en el foro en ingles he avanzado algo creo:

https://forum.arduino.cc/index.php?topic=511707.0

surbyte

Avanzar no han avanzado nada.
Solo te estan diciendo que colocas mal es osciloscopio. Que la señal de salida es una AC sobre un valor medio de 2.5VDC (por eso te hice restar los 512)
Ademas das información alla que aca. Y eso es doble post.

Antes de ver las graficas del osciloscopio yo te he dado una librería que toma muestras y te calcula el Vrms o Vpico, usando la Emonlib.
Te adapté un código que no había compilado pero ahora si y funciona 10 puntos.
Asi que has instalado mal la librería. Ademas tiene ejemplos. Si mi adaptación esta mal los ejemplos deberían funcionar.

Quote
AVR Memory Usage
----------------
Device: atmega328p
Program:    5308 bytes (16.2% Full)
(.text + .data + .bootloader)
Data:        290 bytes (14.2% Full)
(.data + .bss + .noinit)
 [SUCCESS] Took 19.00 seconds
El código funciona bien.


Go Up