Tutorial INA219 para Arduino, ESP8266 y ESP32

Aprenda a medir la tensión, la corriente y el consumo de energía con el INA219 en combinación con su microcontrolador Arduino, ESP8266 o ESP32

El INA219 es un sensor de corriente y tensión que se utiliza con cualquier microcontrolador Arduino, ESP8266 o ESP32.

Puede medir hasta 26 voltios y utilizar la comunicación I2C para transferir datos al microcontrolador.

En este tutorial uso el INA219 para medir la curva de descarga de una batería que está conectada a un ventilador.


Hoja de datos del sensor de tensión y corriente INA219

La siguiente tabla muestra la ficha técnica del sensor de tensión y corriente INA219.

Tensión de medición0V…26V
Corriente máxima3,2A
Potencia máxima83W
Tensión de funcionamiento3V…5.5V
Protocolo de comunicaciónI2C

El voltaje máximo que se puede medir con el sensor INA219 es 26V y la corriente máxima es 3.2A. Por lo tanto, la potencia máxima que no puede ser medida pero calculada por el microcontrolador es 83W.

Debido a que el voltaje de trabajo de INA219 está entre 3V y 5.5V, podemos usar diferentes placas Arduino con voltaje de trabajo de 5V o microcontrolador ESP8266 y ESP32 con voltaje de trabajo más bajo de 3.3V para leer los valores del sensor de voltaje y corriente.

Los valores de los sensores se transmiten a través del protocolo de comunicación I2C entre el módulo INA219 y el microcontrolador.

¿Cómo funciona el sensor INA219?

Antes de que podamos usar el INA219, debemos asegurarnos de que entendemos cómo funciona el sensor. Para describir la funcionalidad del sensor, vamos paso a paso en el diagrama simplificado del INA219 que ves en la siguiente imagen.

Bloque de función INA219

El sensor INA219 tiene un terminal de tornillo de 2 pines, conectado al lado alto de la medición en serie, capaz de medir voltajes de hasta 26V. El terminal de tornillo está conectado a una resistencia de derivación de detección de 0,1 Ω 1% en paralelo. El INA219 mide dos voltajes diferentes en el lado alto:

  • V_shunt es la caída de voltaje a través de la resistencia de derivación.
  • V_bus es el voltaje del polo negativo con respecto a la tierra.

Luego, los dos voltajes se transmiten al amplificador de ganancia programable (PGA) para aumentar la sensibilidad de la medición. El INA219 aumenta el rango de escala completa hasta 2, 4 u 8 veces (320 mV). Las mediciones de voltaje de bus también tienen dos rangos: 16 V o 32 V.

Una vez que se aumenta la sensibilidad de la medición de voltaje, se calcula la corriente y también la potencia. La siguiente imagen muestra cómo se realiza el cálculo en función del shunt y la tensión del bus.

Cálculos de INA219

El flujo de corriente en el lado alto de la medición se calcula multiplicando el voltaje de derivación por la resistencia calibrada de la resistencia de derivación. Dado que la resistencia en derivación es 0,1 Ω y el voltaje en derivación máximo en la escala de 8 es 320 mV, la corriente máxima que se puede medir es 320 mV / 0,1 Ω = 3,2 AT.

Luego, la potencia se calcula con esta corriente multiplicada por la tensión del bus. Basado en una corriente máxima de 3,2 A y una tensión de bus máxima de 26 V, el INA219 puede medir hasta 3,2 A * 26 V = 83 W.

Por lo tanto, el INA219 puede proporcionar cuatro medidas diferentes:

  • Voltaje de derivación: caída de voltaje a través de la resistencia de derivación
  • Voltaje del bus: voltaje total visto por el circuito bajo prueba. (tensión de alimentación – tensión de derivación).
  • Corriente: derivada por la ley de Ohm del voltaje de derivación medido
  • Potencia: corriente multiplicada por la tensión del bus

Cada una de las mediciones y cálculos se almacena en un registro que está conectado a la interfaz I2C para transmitir los valores al microcontrolador Arduino o ESP. Si desea saber cómo I2C es capaz de transferir datos entre dispositivos eléctricos, le recomiendo mi tutorial de I2C.

El microcontrolador Arduino, ESP8266 o ESP32 suministra al INA219 3.3V o 5V.

Ahora conocemos la funcionalidad básica del sensor de voltaje INA219, pero si está interesado en más detalles sobre el sensor, visite la Descripción del producto Texas Instruments.

¿Cómo conectar INA219 a Arduino, ESP8266 y ESP32?

El cableado del INA219 se muestra en las siguientes imágenes para varios microcontroladores Arduino, ESP8266 y ESP32. Si le falta un microcontrolador, escriba un comentario en la sección debajo de este artículo y agregaré más imágenes impresionantes del cableado INA219.

En mi caso, encendí el INA219 desde el microcontrolador con 5V, pero también puede conectar el 3.3V en su lugar si no enciende el ESP8266 o ESP32 a través de USB.

También debe conectar los pines de reloj (SCL) y datos (SDA) para que la comunicación I2C envíe la información de voltaje, corriente y potencia del INA219 al microcontrolador. Si no sabe cuáles son los pines I2C en su microcontrolador, le recomiendo a través del libro electrónico gratuito Microcontroller Datasheet, donde encontrará pines detallados de varias placas Arduino, ESP8266 y ESP32.

Cableado entre el módulo INA219 y las placas Arduino

La siguiente tabla muestra el cableado entre el INA219 y las diversas placas Arduino.

INA219 PinArduino NanoArduino Pro MiniArduino UnoArduino Mega
GNDGNDGNDGNDGND
VCC5V/3V35V/3V35V/3V35V/3V3
SCLA5A5Reloj I2CD21
SDAA4A4Datos I2CD20

En la placa de cableado, verá que puede utilizar los pines de 3,3 V o 5 V para la alimentación. Elijo el pin de 5V y los pines de conexión I2C estándar que puede ver en las siguientes imágenes para cada placa Arduino.

  • Arduino Nano
  • Arduino Pro Mini
  • Arduino Uno
  • Arduino Mega

Arduino Nano

INA219 Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.

Arduino Pro Mini

INA219 Arduino Pro Mini

Arduino Uno

INA219 Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.

Arduino Mega

INA219 Arduino Mega

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.

Cableado entre el módulo INA219 y las placas ESP8266

El cableado entre el INA219 y el ESP8266 se muestra en la siguiente tabla. Puede alimentar el INA219 a través de los pines VIN y V5 del ESP8266, pero solo si alimenta el ESP8266 a través de USB. De lo contrario, debe usar el pin de 3.3V del microcontrolador.

INA219 PinESP8266 NodeMCUESP8266 WeMos D1 Mini
GNDGNDGND
VCCVIN/3V35V/3V3
SCLD1D1
SDAD2D2

La tabla muestra que el ESP8266 NodeMCU y el ESP8266 WeMos D1 Mini utilizan los pines de E / S digitales D1 y D2 para la comunicación I2C.

Las siguientes imágenes muestran el cableado entre el INA219 y los dos microcontroladores ESP8266.

  • ESP8266 NodeMCU
  • ESP8266 WeMos D1 Mini

ESP8266 NodeMCU

INA219 ESP8266 NodeMCU

ESP8266 WeMos D1 Mini

INA219 ESP8266 WeMos D1 Mini

Cableado entre el módulo INA219 y las placas ESP32

Dado que el INA219 funciona con una fuente de alimentación de 3.3V, podemos utilizar cualquier placa de microcontrolador ESP32 para la fuente de alimentación y la comunicación I2C del INA219. La siguiente tabla muestra los pines de conexión entre el ESP32 ESP-WROOM-32 y el módulo sensor de tensión y corriente INA219.

INA219 PinESP32 ESP-WROOM-32
GNDGND
VCCV5/3V3
SCL22
SDA21

En la tabla puede ver que el uso puede usar el pin de 3.3V para alimentación y también el pin V5 con salida de 5V si la placa ESP32 se alimenta a través de USB. La siguiente imagen muestra el cableado entre los dos componentes.

ESP32 ESP-WROOM-32

INA219 ESP32 NodeMCU

¿Cómo encontrar la dirección INA219 I2C?

Para comunicarse con el INA219 a través de I2C, debe Conozca la dirección I2C del dispositivo eléctrico, porque cada dispositivo obtiene su propia dirección única en una red I2C. La dirección I2C predeterminada del INA219 es 0x40 y es importante para la posterior secuencia de comandos de Arduino.

Si no está seguro de si su sensor tiene la dirección I2C 0x40, he creado un escáner I2C que no requiere ningún hardware adicional y encuentra la dirección de todos los dispositivos I2C conectados.

Pero, ¿qué pasa si desea usar dos sensores de voltaje y corriente y leer los valores de ambos sensores con un microcontrolador Arduino o ESP? Por defecto, ambos sensores tienen la dirección I2C 0x40 pero la dirección I2C debe ser única. Por lo tanto, en el lado derecho del INA219 verá a continuación dos pares diferentes de contactos con dos resistencias. La siguiente imagen muestra los contactos del sensor de voltaje y corriente.

Dirección I2C INA219

Dependiendo de qué contacto conecte soldando los contactos, la dirección I2C cambia. Por lo tanto, puede utilizar hasta cuatro tarjetas INA219 diferentes en una sola red I2C. La siguiente tabla muestra las cuatro tarjetas diferentes, su dirección I2C y los contactos a puentear. El contacto superior es A1 y el contacto inferior es A0.

BoardI2C addressContact to be bridged
10X40No contacts bridged
20X41Bridge A0
30X44Bridge A1
40X45Bridge A0 and A1

Registre la curva de descarga de una batería con INA219

La siguiente tabla le brinda una descripción general de todos los componentes y partes que utilicé para este tutorial. Recibo comisiones por compras realizadas a través de los enlaces de esta tabla.

Componente de enlace de Amazon Enlace de AliExpress

Arduino NanoAmazonAliExpress
Arduino Pro MiniAmazonAliExpress
Arduino UnoAmazonAliExpress
Arduino MegaAmazonAliExpress
ESP32 ESP-WROOM-32AmazonAliExpress
ESP8266 NodeMCUAmazonAliExpress
ESP8266 WeMos D1 MiniAmazonAliExpress
INA219 Sensor de corriente/tensiónAmazonAliExpress
Batería de 9VAmazonAliExpress
Ventilador de 12VAmazonAliExpress

En el siguiente ejemplo, quiero medir la curva de descarga de una batería de iones de litio. La batería alimenta un ventilador. Quiero saber cómo se ve la curva de descarga de la batería. Por lo tanto, mido el voltaje, la corriente y la potencia de la batería.

Cableado para registrar la curva de descarga de la batería con INA219

La siguiente imagen muestra el circuito con todos los componentes del Arduino Uno. Si tiene otro microcontrolador, encontrará el cableado en el capítulo anterior para los otros microcontroladores Arduino, ESP8266 y ESP32.

Curva de descarga INA219

Programe el código INA219 para registrar una curva de descarga de la batería

Después de conectar todas las partes, profundicemos en el guión del programa que explico paso a paso. Para el script de Arduino, estamos usando la biblioteca Adafruit_INA219 que puede instalar en el IDE de Arduino. Si no sabe cómo instalar una biblioteca, puede encontrar un tutorial paso a paso en el artículo de la biblioteca de Arduino.

#include "Wire.h"
#include "Adafruit_INA219.h"

Adafruit_INA219 ina219;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }
  }

  Serial.print("BV"); Serial.print("t"); // Bus Voltage
  Serial.print("SV"); Serial.print("t"); // Shunt Voltage
  Serial.print("LV"); Serial.print("t"); // Load Voltage
  Serial.print("C"); Serial.print("t");  // Current
  Serial.println("P");  // Power
}

void loop() {
  float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  float power_mW = 0;

  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  loadvoltage = busvoltage + (shuntvoltage / 1000);

  Serial.print(busvoltage); Serial.print("t"); 
  Serial.print(shuntvoltage); Serial.print("t");
  Serial.print(loadvoltage); Serial.print("t");
  Serial.print(current_mA); Serial.print("t");
  Serial.println(power_mW);

  delay(1000);
}

La primera parte del script es incluir la biblioteca Wire y Adafruit INA219. La biblioteca Wire permite que el microcontrolador use la comunicación I2C porque el sensor de corriente y voltaje INA219 está conectado al microcontrolador a través de I2C. La biblioteca Adafruit INA219 facilita el manejo del sensor en sí porque solo necesitamos una función para cada medición.

Una vez incluidas las dos bibliotecas, se crea el objeto Adafruit INA219 con el nombre ina219.

En la función de configuración, abrimos la comunicación serial con la tasa de baudios de 9600 porque quiero mostrar las medidas en el monitor serial del Arduino IDE. También con el bucle while, esperamos hasta que se conecte el puerto serie.

En la segunda parte de la función de configuración, el objeto INA219 se inicializa con la función de inicio y si el objeto no se pudo inicializar, sabemos que algo anda mal con el chip. Por lo tanto, imprimimos este mensaje de error en la salida en serie.

En la última parte de la función de configuración se crea una tabla con todas las medidas que queremos imprimir. La tabla está construida con espacios de tabulación que me permiten copiar todas las medidas en Excel y crear diferentes gráficos que verá al final de este tutorial.

La función de bucle comienza creando variables de punto flotante para cada medición que se establecen en cero.

  • Voltaje de derivación medido en milivoltios
  • Voltaje de bus medido en voltios
  • Voltaje de carga calculado en voltios
  • Corriente calculada en miliamperios
  • Potencia calculada en miliamperios

Ahora, cada variable se llena con la función get de la biblioteca Adafruit INA219, pero el voltaje de carga se calcula agregando el voltaje de derivación al voltaje del bus. La desviación de 1000 solo se hace para corresponder a unidades.

Después de obtener todos los valores de los sensores, los imprimimos en la tabla y esperamos 100.000 milisegundos, que son 1,67 minutos.

Curva de descarga de la batería medida con INA219

La siguiente imagen muestra las medidas de la salida serial. Debido a que es difícil ver los cambios en la energía de la batería, creé dos gráficos diferentes con todas las medidas en este ejemplo.

INA219 tensión de carga de derivación de bus de curva de descarga de batería
Curva de descarga de la batería INA219

En los gráficos puede ver que el bus y el voltaje de carga son casi iguales debido a la pequeña resistencia de derivación. El voltaje de carga es el voltaje de la batería y es de aproximadamente 3,7 V cuando la batería está completamente cargada. Este es también el voltaje nominal de la batería, pero creo que la batería no estaba completamente llena porque el voltaje de la batería al 100% del estado de carga debería ser de alrededor de 4.25V.

Cuando el ventilador dejó de moverse, la carga y el voltaje del bus eran de aproximadamente 2,1 V y después de 4 horas.

Debido a la pequeña resistencia de derivación, el voltaje de derivación es muy pequeño alrededor de 6 mV al comienzo del experimento y menos de 1 mV cuando finaliza el experimento.

En el arranque, el ventilador consumió alrededor de 200 mW pico, pero con el tiempo el ventilador se moverá más lento y el consumo de corriente y energía disminuirá a 9 mA y 20 mW.

Entonces, verá en este tutorial que medir la corriente y el voltaje con el INA219 en combinación con un Arduino, ESP8266 o ESP32 no es complicado.

Si tiene alguna pregunta sobre este artículo, utilice la sección de comentarios a continuación para hacer sus preguntas. Les responderé lo antes posible.


Deja un comentario