Problema con codificación para SCT-013-00 y ZMPT101B

Con Arduino uno estoy implementando el sensor SCT-013-00 y ZMPT101B, para medir corriente, voltaje y obtener la potencia de cada ciclo. He conseguido un funcionamiento muy preciso de ambos sensores por separado. El tema, que no soy capaz de implementar ambos códigos en uno solo. Siempre me acaba saliendo un error o no me mide adecuadamente. Dejo los códigos por aquí por si podéis ayudarme. Gracias.

#include <Filters.h>
float testFrequency = 50; // Frecuencia (Hz)
float windowLength = 40.0/testFrequency; // promedio de la señal
int Sensor = 0; //A0
float intercept = -0.04; // to be adjusted based on calibration testing
float slope = 0.0405; // to be adjusted based on calibration testing
float volts; // Voltage
unsigned long periodo = 1000;
unsigned long tiempoAnterior = 0;
#include "EmonLib.h";
EnergyMonitor energyMonitor;
void setup() {
Serial.begin(9600);
delay(5000);
energyMonitor.current(1, 1.6);
RunningStatistics inputStats;
inputStats.setWindowSecs(windowLength);
}
void loop() {
Sensor = analogRead(A0); //Leer pin Analógico
inputStats.input(Sensor);
if((unsigned long)(millis() - tiempoAnterior) >= periodo) {
volts = intercept + slope * inputStats.sigma(); //offset y amplitud
volts = volts*(40.3231); //calibración
Serial.print("\tVoltage: ");
Serial.println(volts);
tiempoAnterior = millis();
// Obtenemos el valor de la corriente eficaz
// Pasamos el número de muestras que queremos tomar
double Irms = energyMonitor.calcIrms(1484);
// Calculamos la potencia aparente
double potencia = Irms * volts;
// Mostramos la información por el monitor serie
Serial.print("Potencia = ");
Serial.print(potencia);
Serial.print(" Irms = ");
Serial.println(Irms);
}
}

El error que me sale tras implementarlos es In function 'void loop()':
error: 'inputStats' was not declared in this scope

Adjunto los códigos por separado

Codigo SCT-013-00
#include "EmonLib.h"
// Crear una instancia EnergyMonitor
EnergyMonitor energyMonitor;
// Voltaje de nuestra red eléctrica
float voltajeRed = 230.0;
void setup()
{
Serial.begin(9600);
// Iniciamos la clase indicando
// Número de pin: donde tenemos conectado el SCT-013
// Valor de calibración: valor obtenido de la calibración teórica
energyMonitor.current(0, 1.6);
}
void loop()
{
// Obtenemos el valor de la corriente eficaz
// Pasamos el número de muestras que queremos tomar
double Irms = energyMonitor.calcIrms(1484);
// Calculamos la potencia aparente
double potencia = Irms * voltajeRed;
// Mostramos la información por el monitor serie
Serial.print("Potencia = ");
Serial.print(potencia);
Serial.print(" Irms = ");
Serial.println(Irms);
}
Código ZMPT101B
<
#include <Filters.h>
float testFrequency = 50; // Frecuencia (Hz)
float windowLength = 40.0/testFrequency; // promedio de la señal
int Sensor = 0; //A0
float intercept = -0.04; // to be adjusted based on calibration testing
float slope = 0.0405; // to be adjusted based on calibration testing
float volts; // Voltage
unsigned long periodo = 1000;
unsigned long tiempoAnterior = 0;
void setup() {
Serial.begin(9600);
delay(5000);
}
void loop() {
RunningStatistics inputStats;
inputStats.setWindowSecs(windowLength);
while(true) {
Sensor = analogRead(A1); //Leer pin Analógico
inputStats.input(Sensor);
if((unsigned long)(millis() - tiempoAnterior) >= periodo) {
volts = intercept + slope * inputStats.sigma(); //offset y amplitud
volts = volts*(40.3231); //calibración
Serial.print("\tVoltage: ");
Serial.println(volts);
tiempoAnterior = millis();
}
}
}

Moderador:
Por favor, lee las Normas del foro y edita tu código/error usando etiquetas de código.
Ve a edición, luego selecciona todo el código que has publicado, lo cortas y click en </>



Te respondo pero edita el código.
La secuencia para unir dos códigos es fácil.

De ambos códigos toma las librerías sin repetir, y las variables globales y objetos necesarios.
En el setup usa lo que haga falta sin repetir
Lo mismo en el loop
Si en un código hay delay() en el código unido es muy seguro que no funcione algo.
Los delay() detienen el código y lo que antes funcionaba generará problemas en el nuevo código unido.
Un código tiene un delay(5000) pero como esta en el setup, evalúa si lo necsitas. En el setup no importa.
En el loop si.

1 Like

Hola, gracias por la corrección. Adjunto los códigos y el error que me da.

Y donde estan los códigos y el error?

He modificado la publicación inicial

No. Nunca modifiques la publicaición original porque ahora la conversación no tiene coherencia.
Solo poner las etiquetas, modificar titulos o alguna cosa mas.
Luego modificarla cambia el hilo de la conversación.
Intenta volver a lo que estaba.

EDITO:
Y esto que tienes ahora ponerlo como un nuevo post.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.