Cómo utilizar sensores de corriente alterna no invasivo con Arduino

Posted on by
Sensor de corriente alterna no invasivo SCT-013-000.

Sensor de corriente alterna no invasivo SCT-013-000.

Los sensores de corriente alterna no invasivo son una buena forma de medir el consumo real sin alterar la composición eléctrica de los elementos a analizar. Funcionan mediante inducción magnética, de manera que el campo generado en el cable que se usa para alimentar el dispositivo a analizar induce una corriente en el transformador integrado en el sensor. De esta manera podemos saber cual es la corriente que hay en el cable de alimentación y por lo tanto el consumo real del dispositivo que queremos medir.

Especificaciones de SCT-013.

Especificaciones de SCT-013.

Entre la variedad de sensores que hay en la serie SCT-013 utilizaremos el modelo STC-013-000 ya que es el único que no tiene una resistencia integrada, lo que nos permitirá ajustar el rango de medida en el que queremos trabajar, además como puedes ver en la tabla puede medir corrientes de hasta 100A.

Para conectarlo a Arduino tendremos que utilizar un circuito muy sencillo, en el que los valores de sus componentes determinarán el rango de medida. El propio Arduino también nos impondrá sus limitaciones, como el valor máximo del voltaje de entrada en el conversor analógico digital y su número de bits (10bits) que hará que tengamos una resolución de medida limitada.

Circuito de Arduino para SCT-013-000.

Circuito de Arduino para SCT-013-000.

Al tratarse de una medición de corriente alterna para poder hacerla con Arduino tendremos que crear una masa virtual mediante un divisor de tensión ya que solo podemos medir valores positivos, por lo que el valor intermedio será 2.5V. Esto hace que la amplitud máxima de la tensión sea 2.5V.

Para asignar los valores del circuito tomamos como modelo el sistema de alimentación europeo (220V y 50Hz). El sensor SCT-013-000 nos entregará la corriente que hay en el cable de alimentación en el que esta midiendo entre 2000 (ya que el transformador integrado esta formado por 2000 vueltas). Teniendo todo esto en cuenta debemos decidir o bien qué corriente máxima queremos medir o la corriente mínima que queremos detectar. Al tener 10 bits de conversión nuestro LSB será 5V/1024 por lo que el salto mínimo entre valores digitales, es decir nuestra resolución será 4,882mV. En este caso voy a definir que la precisión sea de aproximadamente 0,5Watts, el valor comercial de resistencia que más se aproxima para conseguir esta precisión es de 3300 ohms. Con este valor de Rburden la potencia máxima que podremos medir será de 235,7 Watts y una precisión de 0,46 Watts.

Las resistencias R1 del divisor de tensión deben tener una valor muy por encima del valor de la Rburden para que el divisor no se vea afectado. En este caso con 100Kohms será suficiente. En cuanto al condensador, con un valor de 10µF nos servirá.

Para tener la mayor precisión dentro de lo posible también mediremos la masa virtual para poder ajustar al máximo las medidas mediante software. A continuación tenéis un código de ejemplo para Arduino.

 

const unsigned int numReadings = 200; //muestras para calcular Vrms.

int readingsVClamp[numReadings];    // lecturas del sensor SCT-013-000
int readingsGND[numReadings];      // lecturas de la masa virtual
float SumSqGND = 0;            
float SumSqVClamp = 0;
float total = 0; 


int PinVClamp = A0;    // Entrada del sensor SCT-013-000
int PinVirtGND = A1;   // Entrada de la masa virtual

void setup() {
  Serial.begin(9600);
  // initialize all the readings to 0:
  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readingsVClamp[thisReading] = 0;
    readingsGND[thisReading] = 0;
  }
}

void loop() {
  unsigned int i=0;
  SumSqGND = 0;
  SumSqVClamp = 0;
  total = 0; 
  
  for (unsigned int i=0; i<numReadings; i++)
  {
    readingsVClamp[i] = analogRead(PinVClamp) - analogRead(PinVirtGND);
    delay(1); // 
  }

  //Calculate Vrms
  for (unsigned int i=0; i<numReadings; i++)
  {
    SumSqVClamp = SumSqVClamp + sq((float)readingsVClamp[i]);

  }
  
  total = sqrt(SumSqVClamp/numReadings);
  total= (total*(float)2/3); // Rburden=3300 ohms, LBS= 0,004882 V (5/1024)
                             // Transformador de 2000 vueltas (SCT-013-000).
                             // Siendo 5*220*2000/(3300*1024)= 2/3 (aprox)
  
  Serial.println(total);
  delay(1500);  
}
Comments are disabled