Problema al usar juntos los sensores

ffffffffff

Moderador
Por favor dos cosas:

  1. edita tu post usando etiquetas de código.
  2. Intenta formatear el código usando identación o sangría.

Normas del foro

hola leandro_ar prueba así a ver si tu código funciona como tu quieres

saludos.

#include <Filters.h>
float testFrequency = 50;                     // Frecuencia (Hz)
float windowLength = 40.0 / testFrequency;   // promedio de la señal

int Sensor = 1; //A1

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;
//------------ACS--------------
float sensibilidad = 0.066;         //para el sensor de 30 amper
float ruido = 0.068;               // filtro para eliminar ruido
const int sensorIntensidad = A0;   // pin donde conectamos sensor
float valorReposo = 2.50;
float intensidadPico = 0;
float tensionDeRed = 230.0;



void setup() {
  Serial.begin(9600);

  delay(5000);
}

void loop() {
  sensor_acs();
  RunningStatistics inputStats; //svStats
  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();
    }
  }
}



///--------------------ACS----------

void sensor_acs() {
  intensidadPico = leerCorriente(); // Leemos corriente.
  mostrarValores();

}
float leerCorriente()
{
  float valorVoltajeSensor;
  float corriente = 0;
  long tiempo = millis();
  float intensidadMaxima = 0;
  float intensidadMinima = 0;
  while (millis() - tiempo < 20) //realizamos mediciones durante 0.5 segundos
  {
    valorVoltajeSensor = analogRead(sensorIntensidad) * (5.0 / 1023.0);//lectura del sensor en voltios
    corriente = 0.9 * corriente + 0.1 * ((valorVoltajeSensor - valorReposo) / sensibilidad); //Ecuacion para obtener la corriente
    if (corriente > intensidadMaxima)intensidadMaxima = corriente;
    if (corriente < intensidadMinima)intensidadMinima = corriente;
  }
  return (((intensidadMaxima - intensidadMinima) / 2) - ruido);
}

void mostrarValores() {

  float Irms = intensidadPico * 0.707;
  Serial.print("A0 , Irms: ");
  Serial.print(Irms, 3);
  Serial.println("A0.");
  delay(100);
}

Con este código ya te muestra los 2 valores simultaneo en el monitor serial prueba a ver

#include <Filters.h>
float testFrequency = 50;                     // Frecuencia (Hz)
float windowLength = 40.0 / testFrequency;   // promedio de la señal

int Sensor = 1; //A1

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;

//------------ACS--------------

float sensibilidad = 0.066;         //para el sensor de 30 amper
float ruido = 0.068;               // filtro para eliminar ruido
const int sensorIntensidad = A0;   // pin donde conectamos sensor
float valorReposo = 2.50;
float intensidadPico = 0;
float tensionDeRed = 230.0;



void setup() {
  Serial.begin(9600);

  //  delay(5000);
}

void loop() {
  sensor_acs();

  RunningStatistics inputStats; //svStats
  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);
      Serial.print("\n");
      Serial.print("\tVoltage: ");
      Serial.println(volts);
      mostrarValores();
      tiempoAnterior = millis();
    }
  }
}



///--------------------ACS----------

void sensor_acs() {
  intensidadPico = leerCorriente(); // Leemos corriente.
}
float leerCorriente()
{
  float valorVoltajeSensor;
  float corriente = 0;
  long tiempo = millis();
  float intensidadMaxima = 0;
  float intensidadMinima = 0;
  while (millis() - tiempo < 20) //realizamos mediciones durante 0.5 segundos
  {
    valorVoltajeSensor = analogRead(sensorIntensidad) * (5.0 / 1023.0);//lectura del sensor en voltios
    corriente = 0.9 * corriente + 0.1 * ((valorVoltajeSensor - valorReposo) / sensibilidad); //Ecuacion para obtener la corriente
    if (corriente > intensidadMaxima)intensidadMaxima = corriente;
    if (corriente < intensidadMinima)intensidadMinima = corriente;
  }
  return (((intensidadMaxima - intensidadMinima) / 2) - ruido);
}

void mostrarValores() {

  float Irms = intensidadPico * 0.707;
  //Serial.print("A0 , Irms: ");
  Serial.print("\tIrms: ");
  Serial.print(Irms, 3);
  Serial.println("A0.");
  delay(100);
}

HOLA. saludos…

La parte que se encarga de hacer los calculo " float leerCorriente(); " no estaba dentro de void loop

intenta con este nuevo código

una sugerencia: también tienes que tomar en cuenta calibrar el ZMPT por el monitor serial plotter
(por la forma de onda lo mas parecida a una sinusoidal moviendo su potenciometro , dejarlo así y luego terminar de calibrar por software , con un osciloscopio seria mas rapido y preciso 2.5v ) y el ACS

#include <Filters.h>
float testFrequency = 50;                     // Frecuencia (Hz)
float windowLength = 40.0 / testFrequency;   // promedio de la señal

int Sensor = 1; //A1

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;

//------------ACS--------------

float sensibilidad = 0.066;         //para el sensor de 30 amper
float ruido = 0.068;               // filtro para eliminar ruido
const int sensorIntensidad = A0;   // pin donde conectamos sensor
float valorReposo = 2.50;
float intensidadPico = 0;
float tensionDeRed = 230.0;



void setup() {
  Serial.begin(9600);

  //  delay(5000);
}

void loop() {

  sensor_acs();
  float leerCorriente();

  RunningStatistics inputStats; //svStats
  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);
      Serial.print("\n");
      Serial.print("\tVoltage: ");
      Serial.println(volts);
      mostrarValores();
      tiempoAnterior = millis();
    }
  }
}



///--------------------ACS----------

void sensor_acs() {
  intensidadPico = leerCorriente(); // Leemos corriente.
}
float leerCorriente()            
{
  float valorVoltajeSensor;
  float corriente = 0;
  long tiempo = millis();
  float intensidadMaxima = 0;
  float intensidadMinima = 0;

  while (millis() - tiempo < 20) //realizamos mediciones durante 0.5 segundos
  {
    valorVoltajeSensor = analogRead(sensorIntensidad) * (5.0 / 1023.0);//lectura del sensor en voltios
    corriente = 0.9 * corriente + 0.1 * ((valorVoltajeSensor - valorReposo) / sensibilidad); //Ecuacion para obtener la corriente
    if (corriente > intensidadMaxima)intensidadMaxima = corriente;
    if (corriente < intensidadMinima)intensidadMinima = corriente;

  }
  return (((intensidadMaxima - intensidadMinima) / 2) - ruido);
}

void mostrarValores() {

  float Irms = intensidadPico * 0.707;
  //Serial.print("A0 , Irms: ");
  Serial.print("\tIrms: ");
  Serial.print(Irms, 3);
  Serial.println("A0.");
  delay(100);
}