Arduino para técnicos

Medias muy precisas de tensión, intensidad y potencia en CC (DC) con INA219

Características principales

El medidor INA219 permite realizar medidas en corriente continua de tensión (voltaje), intensidad (corriente) y potencia. El dispositivo, con la configuración de serie, permite medir:

  • Tensiones de hasta 26 V en corriente continua.
  • Intensidades de hasta 3,5 A en CC.

Comjunica con Arduino a través del protocolo por bus de datos I2C, lo que le permite utilizar un un convertidor ADC propio, con mayor precisión que las entradas analógicas de Arduino. Es por esto que su precisión en medidas de intensidad es de 0,8 mA, y del mismo orden en las lecturas de tensión… ¡IMPRESIONANTE!

Se puede sustituir la resistencia Shunt sobre la que se realizan las medidas de intensidad, para hacer que este medidor realice medidas de hasta 35 A. Para ello, hay que sustituir la resistencia que incorpora la placa de 0,1 Ohm, por una resistencia de 0,01 Ohm. Sin embargo, esta operación no resulta sencilla ya que se trata de resistencias de precisión de muy pequeño tamaño. Incluiremos futuros tutoriales en este sentido.

Esquema de conexión

La comunicación por protocolo I2C usa dos cables para datos. En Arduino, los pines de conexión para I2C son los pines analógicos A4 y A5. En A4 se conecta el cable con función SDA, y en A5 el SCL. Además, la placa hay que alimentarla con 5V o 3,3V y GND.

El circuito en el que queremos medir la intensidad, tenemos que intercalar en serie el medidor, como se muestra en la siguiente imagen.

De esta forma, la intensidad que leeremos será la que circula por el circuito, y la tensión será la que está dando la batería o fuente de alimentación. Es importante destacar que de esta forma no estamos midiendo la tensión en los extremos de la carga, si no la tensión total del circuito.

IMPORTANTE: Hay que conectar el negativo de la fuente de alimentación con GND de Arduino y GND de la placa INA219. Si no se hace esto o se conecta a otro punto, la lectura será errónea. Mediante esta conexión se establece una referencia de 0V común a todo el sistema.

Si solo se quiere medir tensión, es aún mas sencillo. No es necesario interrumpir el circuito a través del medidor. Basta con conectar el positivo de uno de los puntos en los que queremos medir tensión, con la entrada Vin+ del medidor, y poner en común el negativo de la fuente con GND de la alimentación desde Arduino. Este esquema se muestra en la siguiente imagen:

Bloques en ArduinoBlocks

En el apartado Inicializar de ArduinoBloks tenemos que incluir el bloque de iniciación y configuración del medidor.  En él se indica la dirección individual que tiene la placa INA219. Las direcciones individuales identifican a cada dispositivo conectado al bus de 2 hilos I2C, es como su nombre. La que se incluye por defecto en el bloque (0x40), es la que trae de fábrica la placa INA219.

Si se quiere cambiar la dirección individual de la placa para conectar varios INA219 a un mismo Arduino, hay que realizar una pequeña soldadura sobre la misma.

Una soldadura en A0 (como en la imagen superior), establece la dirección 0x41. Una soldadura en A1 establece la dirección 0x44, y soldaduras en ambas, establece la dirección 0x45. Por tanto, se pueden conectar como máximo 4 placas a la vez en un mismo Arduino. Se detalla el proceso en el siguiente enlace: https://cdn-learn.adafruit.com/downloads/pdf/adafruit-ina219-current-sensor-breakout.pdf

Tras esto, en el bucle del programa ya podemos incluir el bloque de lecturas.

Con un solo bloque, gracias a su desplegable, podemos elegir que medida realizar:

Programa ejemplo

En el siguiente programa se guardan en tres variables los valores de tensión, intensidad (corriente) y potencia, y cada segundo, se envían a la pantalla del ordenador a través del puerto serie.

 

Medida de intensidad (corriente) en corriente continua con ACS712

Medida de intensidad instantánea

El dispositivo ACS712 mide la intensidad de un circuito y esos valores los ofrece en forma de tensión variable a través de una salida analógica. La salida de tensión será proporcional a la variación de la intensidad medida. Existen versiones para medir rangos de hasta 5A, de 20A y de 30A.

El ACS712 es un medidor invasivo. Esto quiere decir que hay que abrir el circuito que se quiera medir y colocar en serie el medidor. Recuerda que para medir intensidad, si no se usa una pinza amperimétrica, toda la corriente debe pasar a través del medidor. En otros artículos vemos como realizar medidas no invasivas con pinzas amperimétricas, pero hasta el momento solo en corriente alterna. Puedes consultar el artículo aquí.

Durante este artículo se va a explicar como se realiza todo el proceso, ya que no existe una librería para tomar las medidas. Sin embargo, en el siguiente enlace puedes importar el código para no tener que realizarlo completo.

http://www.arduinoblocks.com/web/project/105982

Esquema de conexión

Revisa el orden de conexión de los pines del medidor que estés usando porque dependiendo del fabricante, este puede cambiar.

Calculo de la intensidad medida

La sensibilidad de cada medidor depende de su rango de medida:

  • 5A    -> 185 mV/A  -> 0.185
  • 20A  -> 100 mV/A  -> 0.1
  • 30A  -> 66 mV/A    -> 0.066

El medidor interpreta también valores de intensidad negativos (podríamos usarlo para medir corriennte alterna). Para ello, la medición de 0 A la establece en 2,5V. Valores positivos de intensidad se sumarán a esos 2,5 Voltios, y valores negativos, se restarán. tenienndo en cuenta esto, y la sensibilidad del medidor, la fórmula es la siguiente:

V = 2,5 + S*I ->  I = (V – 2,5) / S

Donde:

  • S es la sensibilidad del medidor
  • I es la intensidad medida
  • V es la salida analógica de tensión proporcional a la intensidad medida

Finalmente, para hacer el programa hay que tener una última cosa en cuenta. Las entradas analógicas de tensión Arduino de 0 a 5V, las traduce internamente en valores pertenecientes a un rango entre 0 y 1023. Tendremos que escalar primero los valores leídos para a continuación calcular la intensidad con la fórmula anteriormente descrita.

Programa en ArduinoBlocks

Vamos a realizar dos funciones principales para llevar a cabo una medida fiable de intensidad en corriente continua:

  1. Medimos la intesidad instantánea
  2. Tomamos 200 medidas de intensidades instantáneas y obtenemos su media aritmética. Este será el valor que tomemos como final.

Tomamos la media aritmética de un conjunto de valores (no tiene que ser 200) para así evitar errores por ruido, interferencias, etc. No es aconsejable realizar el proceso con mucho mas valores porque el tiempo que se están sumando las medidas, el procesador está bloqueado en esa tarea y no recibe ni envía ningún otro dato. Se da una situación similar a cuando se usa la función Esperar (Delay).

Además, valores inferiores a 0.05 los vamos a igualar a 0, para evitar errores cuando no hay intensidad en el circuito.

Recuerda que el programa lo puedes importar pinchando aquí.

Medidas de tensión (voltaje) en corriente continua FZ0430

Medir tensión (voltaje) en corriente continua con FZ0430

Tensión hasta 25 V

El dispositivo FZ0430 es un divisor de tensión construido para tener una salida de señal de 5V cuando a su entrada llegan 25V en CC. Como la tensión máxima de una entrada analógica de Arduino UNO es de 5V, este medidor no se puede utilizar con esta placa para tensiones superiores a 25 V. Medir tensiones superiores a 25V significa introducir en la entrada analógica de Arduino tensiones superiores a 5V, lo que sin duda acabará dañando el puerto. Además, por muy alto que sea el valor medido, Arduino como máximo arrojará valores correspondientes al 5V, ya que no interpreta tensiones superiores.

Por tanto, lo único que hay que hacer para medir tensión es escalar los valores de un rango de 0 – 25 V en la entrada del medidor, al rango de 0 – 5 V en la salida del medidor.

Es importante destacar, que este medidor es muy económico y está muy extendido, pero su punto débil es la precisión. Tiene un error de ± 24 mV debido a las propias características de las entradas analógicas de Arduino. Si quieres mas precisión, proponemos el uso del dispositivo INA219, cuyo tutorial puedes encontrar aquí.

Revisa el orden de conexión de los pines del medidor que estés usando porque dependiendo del fabricante, este puede cambiar.

Para realizar el programa, también hay que tener en cuenta que Arduino no trabaja internamente con valores de tensión, trabaja con un rango de números que va desde 0 para valor de 0V, hasta 1023 para una tensión de entrada de 5V. Por tanto, realmente vamos a convertir valores del rango 0-1023 al rango 0-25V.

Puedes importar el programa aquí.

Medidas superiores a 25 en CC

Existen multitud de medidores en corriente continua con rangos superiores a 25V, pero no muchos permiten sacar una señal analógica para trabajar con Arduino.

Si las medidas van a tener un valor cercano a los 25 voltios, se puede adaptar el circuito anterior intercalando una resistencia en la salida de señal que va a Arduino. A continuación, habrá que adaptar el escalado al valor máximo de tensión que se ve reflejado en una medida de 5 V a la salida del FZ0430.

Para rangos superiores, se puede fabricar un voltímetro haciendo un divisor de tensión ajustado a nuestros intereses. En este enlace puedes encontrar la información teórica necesaria para realizar este sistema. Y en este enlace tienes una calculadora online de divisores de tensión. En ella se ha calculado como ejemplo, un divisor de tensión para un valor máximo de 55V:

Vemos que con una resistencia de 27 kOhm y otra de 2,7 kOhm, conseguimos un valor de 5 voltios a la salida, siempre que no superemos una tensión de 55 V en la medida. Para acabar, mencionar que se toman valores altos de resistencias para que el consumo del dispositivo, así como su influencia en el circuito medido, sea lo mas bajo posible.

EL programa en ArduinoBlocks será igual, con la única diferencia del nuevo rango de valores a escalar.

¡No dudes en compartir y consultar tu voltímetro personal en el foro y en los comentarios!

Arduino y la comunicación Bluetooth

En el siguiente vídeo, aprendemos a controla una salida de Arduino con el móvil mediante Bluetooth. Además, mediante la App Bluetooth Electronics, crearemos una pequeña aplicación móvil para manejar Arduino.

El programa se puede abrir directamente en: http://www.arduinoblocks.com/web/project/17808

Monitoriza y controla instalaciones por Internet en la plataforma Adafruit

Adafruit IO es un servicio en la nube que nos permite monitorizar datos y realizar panales de control online y  todo comunicado con el sencillo y eficaz protocolo MQTT. Permite utilizar una cuenta de forma gratuita con algunas limitaciones pero totalmente funcional.

En el vídeo incluido a continuación, se muestra el proceso que hay que realizar para  enviar órdenes a Arduino y recibir datos desde la placa con el servicio gratuito de Adafruit IO.

Se va a configurar el panel que se muestra en la primera imagen de este artículo. En él, hay un pulsador para encender la luz del salón, otro para apagarla, un piloto que nos indica el estado de encendido o apagado de esta luz, y además, un sensor que está enviando cada 5 segundos el nivel de luz en la sala.

Cómo publicar y almacena datos por Wifi en Internet

En el siguiente vídeo se muestra cómo enviar datos por Wifi a la plataforma ThinkSpeak, para poder visualizarlos en gráficas, almacenarlos y descargarlos.

Esta plataforma, que actúa como base de datos online, tiene una opción gratuita, limitada a un dato cada 15 segundos. El sistema se puede escalar fácilmente contratando un plan mas amplio, si se considera necesario.

Presentación de la comunicación Wifi:

Guía rápida sobre el módulo Wifi ESP8266:

Diferentes opciones de conexión del módulo ESP8266:

Protocolo de comunicación por internet MQTT:

Ejemplo de control Wifi con Arduino

Medidas eléctricas en corriente alterna con Arduino y un solo dispositivo (PZEM-004T)

Resumen en vídeo con un solo medidor.

En la segunda parte del artículo se incluye un vídeo explicando la conexión de varios medidores en paralelo.

Introducción

Con el medidor PZEM-004T podemos realizar con Arduino, de forma muy sencilla, mediciones de tensión, intensidad, potencia y energía.

Se encuentra en dos formatos, como vemos en la imagen de la derecha:

  • Con anillo toroidal cerrado, lo que obliga a desconectar un cable para poder monitorizar el circuito.
  • Con anillo toroidal de pinza, mas cómodo, pero un poco mas caro.

Dirección individual de cada medidor

Estos dispositivos se comunican por el puerto serie con Arduino mediante el mismo protocolo con el que intercambia datos Arduino con el ordenador. Por tanto, necesitamos dos pines digitales, uno actuará como receptor de datos (Rx) y otro como transmisor (Tx). En los PZEM-004T encontramos también dos conectores con estos nombres (Rx y Tx).

Es importante destacar que Arduino utiliza los puertos digitales 0 y 1 como Tx y Rx para comunicar con el PC, por tanto, si conectamos otros dispositivos a estos puertos, no podremos cargarle programas. Por este motivo, se elijen otros pines distintos y mediante una librería, se les asigna la funcionalidad de puerto serie “virtual”.

Se pueden conectar varios medidores simultáneamente a la misma placa utilizando el puerto serie como bus de datos. Esto implica que cada dispositivo deba tener un nombre (dirección individual) único, para que Arduino pueda diferenciar de dónde procede cada dato.

Es un proceso similar al realizado en comunicación I2C en Arduino o KNX en domótica general, teniendo en cuenta que aquí se permite personalizar por software la dirección individual (nombre) de cada dispositivo. Los PZEM-004T disponen de una pequeña memoria interna EEPROM en la que almacenan la dirección que se les asigna, de tal forma que si se quedan sin alimentación, al volverlos a conectar, mantienen la dirección última que se les haya dado. En esa misma memoria almacenen los datos de energía consumida.

  • Si solo conectamos un medidor: Podemos definir la dirección individual del dispositivo en el apartado Inicializar de nuestro programa.
  • Si conectamos varios medidores: Hay que realizar un pequeño programa previo específico para establecer la dirección de cada medidor, uno a uno. Una vez realizado este paso, ya tendremos cada PZEM con una dirección individual única, y podremos conectarlos todos a la placa Arduino para cargar el programa general y comenzar a realizar las mediciones. Es importante tener en cuenta que en este nuevo programa general, ya no definiremos ninguna dirección, porque eso haría que todos los dispositivos conectados adquirieran la misma, enviando así, todas las medidas en una sola lectura errónea.

Conexión

Encontramos dos circuitos principales:

  • Circuito de alimentación de la placa y comunicación con Arduino
  • Circuito de toma de medidas eléctricas en AC

Las conexiones se realizan de igual forma que si fueramos a realizar las mediciones con una pinza amperimétrica. Para medir tensión se conecta el PZEM en paralelo con los puntos en los que queremos realizar la medida, y para medir intensidad, se pasa uno de los cables del circuito a medir a través del anillo toroidal. Si en lugar de anillo, tenemos una pinza, no hace falta desconectar el circuito principal para meter el conductor a través del anillo, basta con abrir la pinza.

PZEM-004T en ArduinoBlocks

En la sección Domótica, de la barra izquierda de ArduinoBlocks, encontramos los bloques necesarios para trabajar con el medidor. En primer lugar, en el apartado Inicializar del programa, se incluirá el bloque Iniciar, para definir a qué pines conectamos el medidor. En el ejemplo de la siguiente imagen, estamos indicando que vamos a conectar el puerto Rx del medidor, con el pin 3 de Arduino, y el Tx, con el pin 2. Esta configuración se corresponde con la conexión realizada en el esquema del apartado anterior.

El bloque que permite asignar direcciones individuales a cada medidor, es el siguiente:  

Finalmente, con un único bloque seleccionamos la magnitud a medir y la dirección del PZEM del que tomamos esa medida:

Medidas de energía

La placa memoriza el consumo de energía que se está realizando. Para poder reiniciar este contador de energía, hay que accionar el pulsador incluido en la placa. Por ello, para medir y gestionar energía consumida con Arduino, resulta mas versátil realizar su cálculo, en lugar de tomar el valor ofrecido por el medidor. Veremos este y otros ejemplos avanzados en próximos artículos.

Programa: Medidas con un un solo dispositivo

Se propone medir los parámetros de tensión e intensidad de un receptor de corriente alterna, para lo cual, tenemos que realizar el siguiente esquema de conexión:

Es importante destacar que hemos conectado la salida Rx del medidor al pin 3 de Arduino y la salida Tx al pin 2. Se pueden usar otros puertos (excluyendo el 0 y el 1), simplemente habrá que tenerlo en cuenta al realizar el programa.

Resumen en vídeo con varios medidores conectados a una placa

Programa: Medir circuitos diferentes con varios PZEM-004T

Vamos a realizar la conexión de dos PZEM para tomar medidas de dos circuitos independientes. Si se quieren conectar mas medidores, el proceso será el mismo. En este ejemplo se monitoriza el consumo de dos lámparas, pero podemos conectar cualquier receptor, la salida de un circuito en un cuadro eléctrico, etc.

El proceso será el siguiente:

  1. Conectar solo un PZEM para asignarle una dirección.
  2. Cargar el programa en Arduino que establece la dirección del primer medidor.
  3. Desconectar el medidor anterior y cargar en la placa el programa que establece el nombre del segundo medidor.
  4. Conectar el segundo PZEM a Arduino para que le grabe su dirección.
  5. Cablear todo el sistema final con los dos medidores y cargar el programa final.

Programa en ArduinoBlocks:

Primero debemos asignarle una dirección individual a cada medidor, para ello, conectamos solo uno de los PZEM-004T a Arduino y cargamos el siguiente programa:

De esa forma le damos la dirección 1 al primer medidor. Ahora, lo desconectamos y cargamos el siguiente programa para dar nombre a otro PZEM-004T:

Tras conectar el segundo medidor a Arduino y encender la placa, ésta le asignará la dirección 2.

Una vez realizado este proceso, no tenemos que volver a repetirlo, ya que, como decíamos en la introducción, los dispositivos utilizados pueden memorizar su dirección aunque se queden sin alimentación.

Conexión final del circuito (suponiendo que ambos receptores se conectan a la misma fuente de alimentación)

Programa para medir la tensión e intensidad en CA de dos circuitos independientes, y visualizarlas en el PC:

Para no realizar un programa muy extenso, se ha medido solamente tensión e intensidad, pero prueba a medir potencia y energía consumida.

Niveles de luz con fotorresistencias (LDR)

Resumen en vídeo

https://youtu.be/p6w74ODK5eU

Definición

Una fotorresistencia es un elemento cuya resistencia interna al paso de corriente eléctrica disminuye con el aumento de la cantidad de luz que incide sobre él.​ Es un “potenciómetro” que varía en función de la luz. Se conoce también por las siglas LDR, de su nombre en inglés. Si le aplicamos una tensión constante a la entrada, podemos aprovechar estos cambios de resistencia para transformar las variaciones de luz en variaciones de tensión en la entrada de un puerto analógico de Arduino.

En el mercado, está disponible el componente solo o conectado en kit, como se puede ver en la imagen anterior. La ventaja de utilizar un kit es que puedes modificar la resistencia del conjunto con el potenciómetro que trae incorporado. Si no, tendremos que adaptarnos a los parámetros de la fotorresistencia elegida. Existen diferentes modelos con diferentes resistencias.

El valor de resistencia eléctrica de una LDR, baja a medida que aumenta la cantidad de luz que incide sobre ella. En plena oscuridad su valor puede llegar al orden de MegaOhmios, y con gran cantidad de luz puede bajar a valores de entre 50 y 100 Ohmios. Estos valores dependen del modelo de fotorresistencia. En cualquier caso, su comportamiento lo podemos modificar dependiendo de cómo la conectemos a Arduino.

Esquema de conexión

Las LDR se conectan formando parte de un divisor de tensión:

Con el circuito de la derecha de la imagen anterior, conseguiremos valores máximos de tensión en Arduino cuando estemos en situaciones de oscuridad. Con el circuito de la izquierda, se consigue el efecto contrario, máxima tensión cuando esté completamente iluminado. Se puede tomar cualquier valor para R, pero habrá que calibrar el sistema en función de su valor y del tipo de LDR utilizado.

Programa: Lectura de valores de una LDR

Vamos a leer los valores de registrados por una resistencia LDR e imprimirlos en la pantalla del ordenador cada medio segundo. Lo haremos utilizando el esquema de conexión según el cual, a menor iluminación, menor tensión leeremos en la entrada analógica de Arduino. Se ha realizado el montaje con una resistencia de 10 kΩ.

Con esta conexión, deberemos estar recibiendo valores bajos cuando incida poca luz sobre la LDR, y viceversa para valores altos de iluminación.

Con esta conexión, deberemos estar recibiendo valores bajos

Programa: Reloj crepuscular

Un reloj crepuscular es un dispositivo que enciende o apaga receptores en función del nivel de luz que recibe. Está formado, básicamente, por una LDR como sensor y un relé como actuador. Como hemos visto, los niveles recibidos en Arduino dependen de multiples factores, por lo que resulta necesario realizar el calibrado del sistema. Para ello, primero leemos en qué valores oscila el nivel de iluminación, y posteriormente establecemos la barrera a la que queremos que se active nuestro sistema.

El esquema de montaje, es el siguiente: 

Y el programa en ArduinoBlocks:

La variable “Iluminación mínima” es la que determina en que nivel hacemos encender la lámpara a través del relé. Es un valor que variará en función de vuestro circuito y del nivel de luz al que queráis que se active. En el vídeo incluido al comienzo de este artículo, se muestra de forma práctica como se ha realizado el proceso.