medir-tensiones-de-220v-230v-con-arduino-y-transformador

Medir tensiones de 220V-230V con Arduino y transformador

¿Qué es un transformador de tensión?

Un transformador es una máquina eléctrica de corriente alterna que emplear campos magnéticos para adaptar niveles de tensión y corriente entre dos circuitos. Podemos usar transformadores para adaptar la tensión de circuitos al un rango manejable para electrónica y procesadores como Arduino.

Además de para suministrar potencia eléctrica, los transformadores pueden ser empleados como elementos de instrumentación. En este caso, deseamos medir la tensión de red eléctrica. En la mayoría de países Europeos la red eléctrica opera a opera a 230VAC y 50Hz. Estos valores de tensión destruirían inmediatamente a un Arduino.

Otros países emplean otras tensiones y frecuencia. Deberéis adaptar los valores de esta entrada a los disponibles en vuestro país.

En un primer momento para medir una tensión alterna de 230VAC podríamos estar tentados en emplear un simple divisor de tensión con resistencias de elevado valor (del orden de MO) junto con un optoacoplador lineal con amplificación.

Sin embargo, emplear un transformador es una alternativa convencional y sencilla, ampliamente utilizada incluso en sistemas de medición comerciales. Salvo que sepáis específicamente lo que hacéis, y tengáis algún motivo, emplear un transformador debería ser la opción preferida.

Al usar un transformador no necesitamos un optoacoplador ya que el transformador supone un aislamiento galvánico en sí mismo. No obstante, existe un acoplamiento magnético, por lo que el secundario sigue siendo susceptible a grandes picos de corriente o sobrecargas en al circuito primario. Por este motivo, incorporaremos un condensador en el secundario.

La mayor desventaja que vamos a encontrar al usar un transformador es que introduce un desfase entre la señal del circuito primario y secundario, lo cual nos va a hacer complicado determinar el coseno de Phi (más información).

Sin embargo, al hacer una medición de consumo medir el desfase va a ser siempre uno de los principales problemas así que, en cualquier caso, íbamos a tener que poner medios para solucionarlo.

Por otro lado, la señal medida puede tener distorsiones armónicas debido a la no linealidad del transformador causada por la saturación del núcleo magnético. La distorsión dependerá en gran medida de la calidad del transformador empleado.

Los transformadores son dispositivos ampliamente empleados en todos los ámbitos. Se emplean en distribución eléctrica para convertir la tensión y disminuir las pérdidas por transporte. También se emplean en dispositivos eléctricos y electrónicos tanto del campo industrial como doméstico para adaptar las tensiones de red a la necesaria por el dispositivo.

En esta entrada vamos a emplear un transformador de 230VAC/15VAC para realizar la medición de tensión desde una red eléctrica de 230VAC a 50Hz. La medición de la tensión es un componente necesario, por ejemplo, en proyectos para crear un monitor de consumo o un analizador de calidad del suministro eléctrico.

Precio

Existen transformadores de todo abanico de precios y potencias. Afortunadamente, como únicamente queremos medir le tensión, un transformador de pequeña potencia será suficiente ya que no vamos a realizar consumo eléctrico.

Buscamos un mini transformador de 230VAC/12VAC o 230VAC/15VAC. Son dispositivos baratos, deberíamos encontrarlos por menos de 1€.

Ahora viene la mala noticia, y es que no vamos a encontrar fácilmente estos mini transformadores. Aunque los encontremos, los gastos de envío por comprar una única unidad van a encarecerlo.

Tenemos varias alternativas:

La primera opción, es comprar el mini transformador. Podemos encontrarlos por unos 4-5€, buscando en vendedores internacionales de eBay o AliExpress.

arduino-220v-mini-transformador

Si no podéis encontrar un mini transformador, otra opción es emplear un transformador “tradicional” de pequeño tamaño. Deberíamos poder encontrarlos por unos 5-6€, también en vendedores internacionales de eBay o AliExpress.

arduino-220v-transformador-componente

Otra opción es emplear un cargador de pared AC-AC (ojo, salida en AC!). No son fáciles de encontrar, ya que la mayoría son de salida en AC. Su precio es algo superior, unos 8-10€, pero tendremos la ventaja de ser dispositivo compacto y encapsulado en plástico, en el que para medir lo único que tenemos que hacer es enchufarlo cómodamente a la red.

arduino-220v-transformador-pared

Finalmente, si es posible podéis reaprovechar el transformador de algún dispositivo que desmontéis. Incluso a veces sale rentable comprar un driver (por ejemplo, de pantallas TFT o de LED), que podemos encontrar por 1-2€, y aprovechar el mini transformador. El problema aquí será encontrar un transformador que tenga la tensión de salida que queremos.

Por último, recordar que no podemos usar fuentes conmutadas o conversor AC-AC electrónicos, como los empleados para drivers de LED. Estos conversores emplean circuitos osciladores de alta frecuencia, por lo que su salida está completamente distorsionada respecto a la tensión senoidal de entrada, por lo que no podemos emplearlos para realizar mediciones en la tensión de red.

arduino-220v-transformador-no-conversor

¿Cómo funciona un transformador?

Los transformadores son máquinas complejas y ampliamente estudiadas. Un estudio pormenorizado está fuera del alcance de esta entrada, por lo que nos limitaremos a dar unas pautas para entender su funcionamiento.

Si estáis interesados disponéis de extensa documentación en la web o sentiros libres de hacer las preguntas que necesitéis en los comentarios de esta entrada.

En general, un transformador consta de dos devanados (es decir, bobinas de conductor) correspondientes con el circuito primario y secundario. En la mayoría de los casos los devanados se encuentran arrollados entorno a un núcleo ferromagnético.

arduino-220v-transformador-funcionamiento

Cuando hacemos circular corriente alterna por el devanado primario esta induce un flujo magnético en su interior. Este flujo magnético atraviesa (concatena) el devanado secundario, generando a su vez una tensión inducida (o fuerza electromotriz).

El flujo generado por el devanado primario es proporcional a su número de espiras. A su vez, la tensión inducida en el devanado secundario también es proporcional a su número de espiras. Por tanto, la relación entre ambas tensiones es proporcional a la relación entre espiras de ambos devanados.

Suponiendo un transformador ideal que carezca de pérdidas, la potencia eléctrica se transmite íntegramente entre el devanado primario y secundario. Por tanto, es sencillo deducir que la relación de intensidades es inversa a la relación entre tensiones y, por tanto, a la relación entre las espiras de devanados.

Resumiendo,

Esta capacidad de cambiar la relación entre tensiones e intensidades entre circuito primario y secundario simplemente controlando el número de espiras en los devanados, es lo que hace tan interesante a los transformadores.

Por supuesto los transformadores reales tienen pérdidas y limitaciones que lo alejan de su comportamiento ideal. No obstante, en general, los transformadores son máquinas con elevados rendimientos, típicamente del 95-98%.

Las principales pérdidas que alejan al transformador de su comportamiento ideal son pérdidas en el cobre por efecto Joule, pérdidas por corrientes parásitas inducidas en el núcleo (corrientes de Foucault), pérdidas por dispersión del campo magnético y pérdidas por histéresis en el material del núcleo.

El motivo por el que los transformadores disponen de un núcleo ferromagnético es, precisamente, reducir las pérdidas por dispersión. Proporciona un camino de baja resistencia magnética (reluctancia) para que el flujo magnético pase de un devanado a otro.

Por el mismo motivo y, aunque en los esquemas normalmente se representan los devanados en cada una de las columnas del núcleo, generalmente se adoptan otras disposiciones, por ejemplo, en las que ambos devanados se disponen arrollados en la misma columna y el resto del núcleo permite un camino de retorno del flujo magnético.

Para reducir las pérdidas por corrientes inducidas en el núcleo magnético normalmente esté se forma mediante varias chapas aisladas entre sí, de forma que se limita el camino recorrido por las corrientes, y por tanto el calor generado.

Los transformadores preservan la frecuencia de la corriente alterna en ambos lados. Sin embargo, dado que las bobinas que componen el transformador son cargas reactivas, el transformador puede tener un desfase angular entre el circuito primario y secundario.

Por último hacer notas que los transformadores generan distorsiones en la señal transmitida, debido a la falta de linealidad del material del núcleo especialmente en las zonas de saturación, lo que se traduce en la introducción de componentes armónicos en la salida.

Esquema de montaje

Para realizar este montaje tendremos que resolver dos problemas principales,

  • Adaptación de rango de tensión

  • Tensiones positivas y negativas

Las tensiones de red son peligrosas para las personas. Realizar el montaje con especial cuidado y sólo si os sentís seguros manejando electricidad.

Adaptación de rango de tensión

Debemos adaptar el rango de tensiones a un valor asumible por la electrónica. En Europa la mayoría de países tiene una tensión de red de 230V/400V 50Hz (monofásico/trifásico) con una tolerancia del 10%, por lo que la tensión posible es 214-247V.

Por otro lado, debemos recordar que la tensión de red se mide en Vrms. Recordemos brevemente las ecuaciones de tensión pico, y pico a pico.

Por tanto, la tensión de pico podría llegar a ser 247*1.414 = 350V, y la tensión de pico a pico 700V.

Vamos a usar un transformador de entre 12VAC de salida. En este caso, la tensión de pico a la salida será 18.66V y la tensión pico a pico 37.33V. En el caso de usar un transformador de 15VAC la tensión de pico será 23.33V, y la tensión pico a pico 46.66V.

Estos valores de tensión son elevados, pero asumibles para un simple divisor de tensión como el FZ0430, que permite medir tensiones de hasta 25V.

Tensiones positivas y negativas

El otro problema que tenemos que resolver es que las tensión en el secundario del transformador es igualmente alterna. Pero como sabemos, las entradas analógicas de la mayoría de 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 ADS1015 o el ADS1115. Es la opción que vamos a usar nosotros.

El ADS1015 tiene una resolución inferior de 12 bits, pero una frecuencia de muestreo superior. Si no necesitáis la precisión del ADS1115, el ADS1015 es una opción más sencilla.

Conexión eléctrica

Ya hemos presentado todos los componentes necesarios para medir la tensión de red a 230VAC de forma sencilla (ahora veremos cómo esta elección no es casual).

arduino-220v-transformador-esquema

Por un lado, tenemos un transformador de 230VAC a 12VAC. También un divisor de tensión como el FZ0430 y, por último, un ADC de 12 bits ADS1115.

Conectando esos dispositivos podemos medir la tensión de red, que hemos calculado es ±357V, y de ±18.7V tras el transformador. Tras el FZ0430 la tensión es de ±3.8V, que es perfecto para el modo diferencial del ADS1115 configurado en rango ± 4.096V. La medición tendrá una precisión de 12mV.

Usando un transformador de 15VAC la tensión tras el transformador sería ±23.33V, aún asumible por el FZ0430, y la salida sería de ±4.66V, asumible por el ADS1115 en rango ±6.144V, aunque en este caso tendríamos una levemente inferior de 15mV.

La conexión, vista desde Arduino, sería únicamente la alimentación del módulo ADS1115 como vimos en la entrada sobre el ADS1115.

arduino-220v-transformador-conexion

Si en cualquier caso, no queréis usar el FZ0430 y el ADS1115 y preferís añadir un offset, el esquema sería el siguiente.

arduino-220v-transformador-esquema-completo

Donde hemos empleado un divisor de tensión con una relación de 1:11 por lo que la tensión de pico a pico de 37.4V pasa a ser 3.4V, y usamos un punto de offset de DC de 2.5V, el rango final es de 0.8V a 4.2V, dentro del rango de las entradas analógicas de Arduino.

En el caso de usar un transformador de 12VAC el rango sería 0.4V a 4.6V, también dentro del rango de entradas analógicas de Arduino.

Ejemplos de código

Montaje FZ0430 y ADS1115

Si habéis usado el montaje con FZ0430 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.

#include <Wire.h>
#include <Adafruit_ADS1015.h>

Adafruit_ADS1115 ads;

// const float multiplier = 0.1875F; // Transformador de 15V
const float multiplier = 0.1255F; // Transformador de 12V

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

  // ads.setGain(GAIN_TWOTHIRDS);  // Transformador de 15V
  ads.setGain(GAIN_ONE);       // Transformador de 12V
  ads.begin();
}

void loop()
{
  while(1)
  {
    Serial.print(ads.readADC_Differential_0_1() * multiplier); 
  }
}

Sin embargo, el tiempo de muestreo de la librería está condicionado por una espera de 8ms, dando lugar a 128 muestras/s. Para obtener ratios superiores de lectura, podéis sustituir las esperas de delay(m_conversionDelay); por delayMicroseconds(800); y #define ADS1015_REG_CONFIG_DR_1600SPS (0x0080) por #define ADS1015_REG_CONFIG_DR_1600SPS (0x00E0)

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.

const int sensorPin = A0;
int sensorValue;
float value; 
 
void setup() 
{
  Serial.begin(9600);
}
 
void loop(
{
 sensorValue = analogRead(sensorPin);  
 value = fmap(sensorValue, 0, 1023, -426.2080, +426.2080);
 
 delay(1);
}
 
// cambio de escala entre floats
float fmap(float x, float in_min, float in_max, float out_min, float out_max)
{
 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

Descarga el código

Todo el código de esta entrada está disponible para su descarga en Github. github-full