Sie sind auf Seite 1von 17

SENSOR DE CORRIENTE

ELÉCTRICA NO INVASIVO CON


ARDUINO Y SCT-013

¿QUÉ ES UN SENSOR SCT-013?


La familia SCT-013 son sensores de corrientes no invasivos que permiten
medir la intensidad que atraviesa un conductor sin necesidad de cortar o
modificar el conductor. Podemos emplear estos sensores con un procesador
como Arduino para medir la intensidad o potencia consumida por una carga

Los sensores SCT-013 son transformadores de corriente, dispositivos de


instrumentación que proporcionan una medición proporcional a la intensidad
que atraviesa un circuito. La medición se realiza por inducción electromagnética.

Los sensores SCT-013 disponen de un núcleo ferromagnético partido (como


une pinza) que permite abrirlo para arrollar un conductor de una instalación
eléctrica sin necesidad de cortarlo.
Dentro de la familia SCT-013 existen modelos que proporcionan la medición
como una salida de intensidad o de tensión. Dentro de lo posible, lo normal es
que prefiramos salida por tensión porque la conexión es más sencilla.

Anuncio:

La precisión del sensor puede ser de 1-2%, pero para ello es muy importante
que el núcleo ferromagnético se cierre adecuadamente. Hasta un pequeño hueco
de aire puede introducir desviaciones del 10%.

Como desventaja, al ser una carga inductiva, el SCT-013 introduce una


variación del ángulo de fase cuyo valor es función de la carga que lo atraviesa,
pudiendo llegar a ser de hasta 3º.

Los transformadores de intensidad son componentes frecuentes en el


mundo industrial y en distribución eléctrica, permitiendo monitorizar el consumo
de puntos de consumo donde sería imposible otro tipo de medición. También
forman parte de múltiples instrumentos de medición, incluso en equipos
portátiles como en pinzas perimétricas o analizadores de red.

En nuestros proyectos de electrónica y domótica podemos emplear los


sensores de corriente SCT-013, por ejemplo, para medir el consumo eléctrico de
aparato, comprobar el estado de una instalación eléctrica, y son componentes
frecuentes en monitores de energía caseros para registrar el consumo de una
instalación o incluso acceder a través de internet en tiempo real.
PRECIO
Existen diversos modelos dentro de la familia SCT-013, que varían el rango
de medición y en la forma de la salida. Físicamente son idénticos, aunque es
posible identificarlos por el texto escrito en la carcasa.

El precio de todos ellos es similar, podemos encontrarlos por 4-4.50€,


buscando en vendedores internacionales de eBay o AliExpress.
Los más frecuentes son el SCT-013-000 para una corriente máxima de 100A
y salida de intensidad de 50mA (100A:50mA), y el SCT-013-030 para corrientes
máximas de 30A (30A/1V) y salida en tensión de 1V.

No obstante aunque el SCT-013-000 sea muy frecuente en las tiendas online,


como hemos dicho, normalmente vamos a preferir los modelos con salida en
tensión.

Por último, es importante disponer un rango amplio de medición pero hay


que tener en cuenta que un modelo de mayor intensidad máxima se traducirá en
una menor precisión. Una intensidad de 30A a 230V corresponde con una carga
de 6.900W, lo cuál es suficiente para la mayoría de usuarios domésticos.

¿CÓMO FUNCIONA UN SCT-013?


La familia de sensores SCT-013 son pequeños transformadores de corriente
o CT (Current transformartor). Los transformadores de corriente son instrumentos
ampliamente empleados como elementos de medición.

Un transformador de corriente es similar a un transformador de tensión y


está basado en los mismos principios de funcionamiento (de hecho, formalmente
es idéntico). Sin embargo persiguen objetivos diferentes y, en consecuencia,
están diseñados y construidos de forma distinta.

Un transformador de corriente busca generar una intensidad en el


secundario que sea proporcional a la intensidad que atraviesa el primario. Para
ello se desea que el primario esté formado un un número de espiras reducido.

Podemos emplear esto para construir un sensor de corriente no invasivo. En


un sensor se corriente el núcleo ferromagnético puede estar dividido de forma
que pueda abrirse y arrollar un conductor.

De esta forma, se tenemos un transformador en el que:

 El cable por el que circula la intensidad a medir constituye un devanado primario

 La “pinza” es el núcleo magnético

 El devanado secundario está integrado como parte de la sonda.

Cuando la corriente alterna circula por el conductor se genera un flujo


magnético en el núcleo ferromagnético, que a su vez genera una corriente
eléctrica en el devanado secundario.

La relación de transformación de intensidad depende de la relación entre el


número de espiras.
El primario generalmente está formado por una única espira formada por el
conductor a medir. Aunque es posible enrollar el conductor haciendo que pase
más de una vez por el interior de la “pinza”. El número de espiras del secundario,
integrado en la sonda, varía 1000-2000 según modelos del SCT-013.

A diferencia de los transformadores de tensión, en un transformador de


intensidad el circuito secundario nunca debería estar abierto, porque las
corrientes inducidas podrían llegar a dañar el componente. Por ese motivo, los
sensores de SCT-130 disponen de protecciones (resistencia burden en los
sensores de salida por tensión, o diodos de protección en los sensores de salida
por corriente).

ESQUEMA DE MONTAJE
Para entender la conexión del sensor SCT-013 tenemos que entender y
resolver tres problemáticas,

 Salida del sensor en intensidad

 Adaptación de rango de tensión

 Tensiones positivas y negativas

SALIDA DEL SENSOR EN INTENSIDAD


El SCT-013 son transformadores de intensidad, es decir, la medición se
obtiene como una señal de intensidad proporcional a la corriente que circula por
el cable. Pero los procesadores solo son capaces de medir tensiones.

Este problema es sencillo de resolver. Para convertir la salida en intensidad


en una salida de tensión únicamente tendremos que incluir una resistencia
(resistencia burden).

Excepto el modelo SCT-013-100, todos los demás modelos tienen una


resistencia de burden interna para que la salida sea una señal de tensión de 1V.
Por lo cual ni siquiera tendremos que preocuparnos por ello.
Únicamente en el caso del SCT-013-100, carece de resistencia burden
interna, por lo que la salida es una señal de ±50mA. Una resistencia de 33Ω en
paralelo con el sensor será suficiente.

TENSIONES POSITIVAS Y NEGATIVAS


Otro problema que tenemos que resolver es que estamos midiendo corriente
alterna, y la intensidad inducida en el secundario es igualmente alterna. Tras el
paso por la resistencia burden (interna o externa) la salida de tensión también es
alterna.

Sin embargo, como sabemos, las entradas analógicas de la mayoría de


procesados, incluidos Arduino, sólo pueden medir tensiones positivas.

Para poder medir las tensiones de la salida del transformador tenemos varias
opciones, de peor a mejor.

Rectificar la señal mediante un puente de diodos, y medir la onda como


valores positivos. No recomendable dado que perdemos la información de si
estamos en el semiperiodo negativo o positivo, además porque tendremos la
caída de tensión del diodo y, aún peor, el diodo no conduce por debajo de una
tensión por lo que la señal estará distorsionada en los cruces por cero.

Añadir un offset en DC mediante el uso de dos resistencias y un condensador


que proporcionen un punto medio entre GND y Vcc. Mucho mejor si además
añadimos un amplificador operacional como seguidor de tensión.

Añadir un ADC con entrada diferencial, que permite realizar mediciones de


tensiones positivas y negativas, como el ADS1115. Es la opción que vamos a usar
nosotros.

ADAPTACIÓN DE RANGO DE TENSIÓN


El último problema es que debemos adaptar el rango de tensiones en la
salida del sensor. Arduino sólo puede realizar mediciones entre 0 y Vcc. Además,
cuanto más pequeño sea el rango más precisión perdemos, por lo que conviene
ajustarnos a este rango.

Por otro lado, debemos tener en cuenta que al hablar de tensión alterna
normalmente se emplean valores RMS. Recordemos brevemente las ecuaciones
de tensión pico, y pico a pico.

Por tanto, en el caso de los sensores con salida de ±1V RMS, la tensión de
pico será ±1.414V, y la tensión pico a pico 2.828V.

En el caso del SCT-013-100 la salida será ±50mA. Con una resistencia burden
externa de 33Ω la tensión de salida será ±1.65V RMS, y por tanto una tensión de
pico de ±2.33V y una tensión de pico a pico de 4.66V.

CONEXIÓN ELÉCTRICA
Ya tenemos todos los componentes para medir la intensidad de red con un
sensor SCT-013. Vamos a usar un sensor con salida de tensión ±1V RMS y
resistencia burden interna, junto con un ADC como el ADS1115 en modo
diferencial.

Ajustando la ganancia del ADS1115 a 2.048V estaremos dentro del rango de


±1.414V. En el caso de un sensor de 30A tendremos una precisión de 1.87mA, y
6,25 mA para un sensor de 100A.

Si usáis un SCT-013-100 con salida de ±50mA, tendremos que añadir una


resistencia burden externa de 33Ω y subir la ganancia del ADS1115 a 4.096V para
cumplir con el rango de ±2.33V.
La conexión, vista desde Arduino, sería únicamente la alimentación del
módulo ADS1115 como vimos en la entrada sobre el ADS1115.
Para realizar las mediciones es importante que cojamos únicamente uno de
los conductores con la “pinza”. Si cogemos más de un conductor (dos
conductores en el caso de instalaciones monofásicas, tres en instalaciones
trifásicas) el efecto de los conductores se anularía. Esto generando una inducción
nula y, por tanto, una medición nula.

Los sensores SCT-013 disponen de un conector Jack 3.5, muy frecuente en


audio, pero no el más cómodo para emplear en nuestros proyectos de
electrónica. Para poder conectarlo deberemos o cortar el cable, o adquirir un
conector hembra al que soldemos los cables. Afortunadamente son terminales
fáciles de adquirir., aunque tampoco descartéis cortar el cable.

Si no queréis usar un ADC externo, podéis usar la solución más convencional,


que es añadir un circuito que nos permita añadir un offset central.

En adelante, supondremos que usáis un Arduino de Vcc 5V. Si usáis otro procesador o un
modelo de Arduino con otro Vcc (por ejemplo 3.3V) deberéis corregir el montaje en
consecuencia.
Donde hemos añadido un punto de offset de DC de 2.5V por lo que el rango
final es de 1.08V a 3.92V, dentro del rango de las entradas analógicas un Arduino
alimentado a 5V.

En caso de usar el SCT-013-100 con salida de ±50mA, tendremos que añadir


una resistencia burden externa de 33 Ohm y el rango final será de 0.17V a 0.483V,
también dentro del rango de las entradas analógicas de un Arduino a 5V.
EJEMPLOS DE CÓDIGO

MONTAJE CON ADS1115


Si habéis usado el montaje con un SCT-013 con salida de ±1V RMS
y ADS1115, el código necesario es similar al que vimos en la entrada sobre el
ADS1115. Necesitaréis la librería de Adafruit para el ADS1115.

Para que el ADS1115 muestree a una velocidad superior, deberemos


modificar la siguiente línea del fichero ‘Adafruit_ADS1015.h’

1 #define ADS1115_CONVERSIONDELAY (8)


Por,
1 #define ADS1115_CONVERSIONDELAY (1)
Con esto conseguiremos bajar el tiempo de muestreo de unos 8-9 ms (unos
100 Hz) a 1.8 aprox (unos 500 Hz). Con eso nos alejamos de la frecuencia de
Nyquist, y mejoramos el comportamiento de la medición.

1 #include <Wire.h>
2 #include <Adafruit_ADS1015.h>
3
4 Adafruit_ADS1115 ads;
5
6 const float FACTOR = 30; //30A/1V
7
8 const float multiplier = 0.0625F;
9
10 void setup()
11 {
12 Serial.begin(9600);
13
14 ads.setGain(GAIN_TWO); // ±2.048V 1 bit = 0.0625mV
15 ads.begin();
16 }
17
18 void printMeasure(String prefix, float value, String postfix)
19 {
20 Serial.print(prefix);
21 Serial.print(value, 3);
22 Serial.println(postfix);
23 }
24
25 void loop()
26 {
27 float currentRMS = getCorriente();
28 float power = 230.0 * currentRMS;
29
30 printMeasure("Irms: ", currentRMS, "A ,");
31 printMeasure("Potencia: ", power, "W");
32 delay(1000);
33 }
34
35 float getCorriente()
36 {
37 float voltage;
38 float corriente;
39 float sum = 0;
40 long tiempo = millis();
41 int counter = 0;
42
43 while (millis() - tiempo < 1000)
44 {
45 voltage = ads.readADC_Differential_0_1() * multiplier;
46 corriente = voltage * FACTOR;
47 corriente /= 1000.0;
48
49 sum += sq(corriente);
50 counter = counter + 1;
51 }
52
53 corriente = sqrt(sum / counter);
54 return(corriente);
55 }
Otra versión es emplear el máximo y el mínimo de la medición, y calcular la
medición a partir del valor de pico. Los resultados deberían ser similares a los
vistos en el ejemplo con la suma al cuadrado. Para ello, podéis sustituir la función
por la siguiente.

1 float getCorriente()
2 {
3 long tiempo = millis();
4 long rawAdc = ads.readADC_Differential_0_1();
5 long minRaw = rawAdc;
6 long maxRaw = rawAdc;
7 while (millis() - tiempo < 1000)
8 {
9 rawAdc = ads.readADC_Differential_0_1();
10 maxRaw = maxRaw > rawAdc ? maxRaw : rawAdc;
11 minRaw = minRaw < rawAdc ? minRaw : rawAdc;
12 }
13
14 maxRaw = maxRaw > -minRaw ? maxRaw : -minRaw;
15 float voltagePeak = maxRaw * multiplier / 1000;
16 float voltageRMS = voltagePeak * 0.70710678118;
17 float currentRMS = voltageRMS * FACTOR;
18 return(currentRMS);
19 }
Podemos ver los resultados en el monitor del puerto serie, graficarlo con
el serial plotter, o recogerlo en un proyecto mayor para mostrarlo en una página
web, o registrarlo en una SD.

MONTAJE CON RESISTENCIAS Y PUNTO MEDIO


En este caso el ejemplo es muy sencillo, únicamente tenemos que realizar la
medición mediante una entrada analógica.

1 const float FACTOR = 30; //30A/1V


2
3 const float VMIN = 1.08;
4 const float VMAX = 3.92;
5
6 const float ADCV = 5.0; //Para Vcc
7 //const float ADCV = 1.1; //Para referencia interna
8
9
10 void setup()
11 {
12 Serial.begin(9600);
13 //analogReference(INTERNAL);
14 }
15
16 void printMeasure(String prefix, float value, String postfix)
17 {
18 Serial.print(prefix);
19 Serial.print(value, 3);
20 Serial.println(postfix);
21 }
22
23 void loop()
24 {
25 float currentRMS = getCorriente();
26 float power = 230.0 * currentRMS;
27
28 printMeasure("Irms: ", currentRMS, "A ,");
29 printMeasure("Potencia: ", power, "W");
30 delay(1000);
31 }
32
33 float getCorriente()
34 {
35 float voltage;
36 float corriente;
37 float sum = 0;
38 long tiempo = millis();
39 int counter = 0;
40
41 while (millis() - tiempo < 500)
42 {
43 voltage = analogRead(A0) * ADCV / 1023.0;
44 corriente = fmap(voltage, VMIN, VMAX, -FACTOR, FACTOR);
45
46 sum += sq(corriente);
47 counter = counter + 1;
48 delay(1);
49 }
50
51 corriente = sqrt(sum / counter);
52 return(corriente);
53 }
54
55 // cambio de escala entre floats
56 float fmap(float x, float in_min, float in_max, float out_min, float out_max)
57 {
58 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
59 }

Das könnte Ihnen auch gefallen