Software, Código Arduino, Eficiencia Energética

Buenas! Soy alumna del grado superior de Automatización y Robótica Industrial. Intento hacer para clase un proyecto de Eficiencia Energética con Arduino, el cual trata de la medida de la potencia (y con ello el consumo de un taller). Mi proyecto tiene un Arduino UNO R3 (marca ELEGOO), un nodemcu v2 (para enviar el dato de la potencia al móvil hasta la aplicación Blynk y por último de una placa bredboard. Ésta placa tiene unos dispositivos los cuales me permiten modificar las ondas de entrada para que al conectarlas al Arduino vaya todo bien y se encuentren entre el rango 0 - 5VDC permitidos.
Para poder obtener la potencia (Potencia = Intensidad * Tensión) tengo un sensor de intensidad SCT 013 030 (que a la entrada detecta 30 A y a la salida me devuelve 0 - 1 VAC pero al Arduino (pin analógico 0) me llegan entre 0 - 5 VDC gracias a la bredboard (cuando tengo 1VAC, a mi me llegan 5VDC, si me llegan 0.5VAC a mi me llegan 2.5VDC y así sucesivamente). Y la tensión la obtengo desde la red (con un enchufe) que de 0 - 240VAC me llega 0 - 5 VDC nuevamente gracias a la bredboard.
Pues bien, para poder realizar el código del Arduino me he fijado de dos páginas web, de las cuales de la primera obtengo la parte de la intensidad (Control de consumo eléctrico con Arduino (1)) y de la segunda la tensión (Electgpl Electrónica: Medición de Tensión Alterna TrueRMS v1).
Pero, como era de esperar, al no tener muchas nociones de Arduino, los resultados son extraños ya que la tensión me da 0V y a veces 8V y la intensidad (para medirla con el sensor de intensidad SCT uso de consumo una lampara de escritorio) me da 1 - 2 mV los cuales no cambian aunque haya consumo (lámpara encendida) o no (lámpara apagada).
Espero que me puedan ayudar y agradezco cualquier pista que me puedan dar.

int analogInPin_0 = A0;   // Pin Intensidad 
int analogInPin_1 = A1;   // Pin Tensión
// Variables Intensidad
int retardo = 2 ;    // Tiempo (s.) entre visionados
float lectura;
float ff;            // Factor de frecuencia (50Hz -> 5 / 60Hz -> 4.15)
float pKW;           // Potencia
float iA;            // Intensidad
float vS;            // Sensor de intensidad (mV)
float S_Ratio;       // Sensor/ratio (mV/mA)
float fc;            // Factor corrector
float ni;            // Nº de iteraciónes
// Variables Tensión
float vV;            // Tensión
float valorMax=0;    //
float smoothread (float fc);
float retorno;
int x;
int i;

// -- initialización serial comm & parametros ------------
void setup() {
  Serial.begin(9600); 
  S_Ratio = 0.55;      // Sensor/ratio (mV/mA ) : 36.5
  ff = 5; // freq. factor / (50Hz -> 5 / 60Hz -> 4.15) 
  int ni=35;
  float retorno=0.0; 
  int x;
  int i;     
}

// -- smooth read routine ----------------------------
float smoothread(float fc){   // fc (factor corrector)
  int ni=35;          // n. de iteraciones => smooth
  //  (ni) => rango 10 a 50 mejor promedio [smoothing]
  float retorno = 0.0;
  for (int x=0;x<ni;x++){
  do {                         // espero paso por cero  
      delayMicroseconds(100); 
      } while (analogRead(analogInPin_0)!= 0) ;
      delay (ff);            // espera centro de ciclo
      delay (10);            // estabilizacion CAD
      retorno = retorno +(analogRead(analogInPin_0)*fc); 
    }
  return retorno / ni; 
  
 while (true){
  do {
    vV=analogRead(analogInPin_1);
    delay(20);
    }
 while (vV!=0);
    for (i=0;i<300;i++){
      vV=analogRead(analogInPin_1);
      delay(60);
      valorMax=vV*vV;
    }
 }
}

// -- main loop --------------------------------------
void loop() { 
  lectura = (smoothread(1)/1.41);    // lectura (rms)   
  vS = (lectura*0.0048);          // valor de C.A.D.
  iA = (lectura*S_Ratio)/1000;     // Intensidad (A)
  pKW = (vV*iA)/1000;               // Potencia (kW)
  vV = (valorMax/300);
  
  Serial.print("\n" );
  Serial.print("\n- Tension [V] --> " );
  Serial.print(vV,0);    
  Serial.print("\n- Lectura del sensor  [mV] --> " );
  Serial.print(vS,3);    
  Serial.print("\n- Intensidad calculada [A] --> " );
  Serial.print(iA,3);  
  Serial.print("\n- Potencia calculada  [kW] --> " );
  Serial.print(pKW,3);  
  Serial.print("\n-------------------------------\n" );
  delay(retardo * 1000);                     
}

Haz mezclado cosas. Primero un circuito de valor pico para corriente y luego una lectura forzada de 300 muestras que toman tensión y si, calculan Vrms.
El tema es que deberias tomar ambos valores y medirlos simultaneamente sino corriente y tensión diran cosas diferentes.

Mira la pagina de Emonlib y usa su librería para medir Tension Corriente y potencias.

Hilo tal vez similar al tuyo que te puede servir de guía link en ingles.

Con EMONLIB adaptando ambos valores entre 0-5V con 2.5V como valor medio o 0 de la AC de corriente y tensión tienes que leerlos bien.

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