¿Cuánta energía consume realmente ese proyecto que armaste con Arduino? ¿Cuánto le queda a la batería que lo alimenta? Sin un instrumento de medición no lo sabes: estás a ciegas. El INA219 resuelve exactamente ese problema. Es un sensor de corriente y voltaje que se conecta por I2C a cualquier Arduino, ESP8266 o ESP32, mide hasta 26 V y entrega cuatro lecturas al mismo tiempo (voltaje de bus, voltaje shunt, corriente y potencia). En esta guía vas a entender cómo funciona por dentro, cómo cablearlo a distintas placas y cómo usarlo para registrar la curva de descarga real de una batería.
Al terminar vas a saber conectar el sensor, leer sus cuatro magnitudes desde el monitor serial y exportar los datos para graficar el comportamiento de tu fuente de energía.
Cómo funciona el INA219 por dentro
Antes de conectar nada, conviene entender qué hace el chip. El INA219 mide corriente de una forma indirecta pero muy precisa: intercala una resistencia shunt de 0,1 ohm al 1% en serie con la carga y mide la caída de tensión sobre ella. Por la ley de Ohm, esa caída dividida por la resistencia te da la corriente.

El sensor toma dos voltajes en el lado alto del circuito: el V_shunt (la caída sobre la resistencia shunt) y el V_bus (la tensión respecto a tierra). Ambos pasan por un amplificador de ganancia programable (PGA) que aumenta la sensibilidad hasta 2, 4 u 8 veces (320 mV a escala máxima), mientras que el voltaje de bus tiene dos rangos: 16 V o 32 V.

Con esos datos el chip calcula lo demás. Como la shunt es de 0,1 ohm y el voltaje máximo a escala 8 es 320 mV, la corriente máxima medible es 320 mV / 0,1 ohm = 3,2 A. Y la potencia sale de multiplicar esa corriente por el voltaje de bus: con 3,2 A y 26 V, el INA219 llega a medir hasta 83 W. En resumen, entrega cuatro registros por I2C: voltaje shunt, voltaje de bus, corriente y potencia.
Por qué la resistencia shunt importa tanto: el valor de 0,1 ohm es un compromiso. Una shunt más grande daría más resolución en corrientes pequeñas, pero también más caída de tensión (y más pérdida de energía). Si tu proyecto mide corrientes muy bajas, este detalle explica por qué a veces las lecturas se ven "ruidosas" en el rango de los miliamperes.
Hardware: conexiones a Arduino, ESP8266 y ESP32
El INA219 usa I2C, así que el cableado es simple: alimentación, tierra y las dos líneas del bus (SCL para el reloj, SDA para los datos). Puedes alimentarlo con 3,3 V o 5 V según tu placa.

En el caso del ESP32 el esquema es equivalente, solo cambian los pines I2C por defecto (GPIO21 = SDA, GPIO22 = SCL en la mayoría de las placas NodeMCU):

Si no sabes cuáles son los pines I2C de tu placa, revisa la hoja de pinout del fabricante antes de cablear.
Dirección I2C y varios sensores en el mismo bus
Cada dispositivo I2C necesita una dirección única. El INA219 usa por defecto 0x40, dato clave para el código más adelante. Si no estás seguro de la dirección de tu módulo, un escáner I2C te la muestra sin hardware extra.

¿Y si quieres medir dos ramas a la vez con un solo microcontrolador? El módulo trae dos pares de contactos (A0 y A1) que, al puentearlos con soldadura, cambian la dirección. Así puedes tener hasta cuatro INA219 en un mismo bus I2C, cada uno con su propia dirección.
Software: registrar la curva de descarga de una batería
El ejemplo práctico mide cómo se descarga una batería de litio que alimenta un ventilador. Usamos la librería Adafruit_INA219, que se instala desde el gestor de librerías del IDE de Arduino. El código abre el puerto serial a 9600 baudios, inicializa el sensor y luego imprime las cinco columnas separadas por tabulaciones (así después las copias directo a una planilla para graficar):
#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);
}
El voltaje de carga (load voltage) se calcula sumando el voltaje shunt al de bus. La división por 1000 es solo para ajustar unidades de milivolt a volt. Cada segundo el sketch vuelca una fila de datos al monitor serial. Nota: la resistencia shunt del módulo es de 0,1 ohm al uno por ciento de tolerancia.

Con los datos exportados a una planilla se ven dos cosas: el voltaje de bus y el de carga son casi idénticos (porque la shunt es muy pequeña), y la batería parte cerca de 3,7 V y cae hasta unos 2,1 V cuando el ventilador se detiene, tras unas 4 horas.
Error común al depurar: si el monitor serial imprime Failed to find INA219 chip, casi siempre es cableado I2C (SDA y SCL cruzados) o la dirección equivocada. Corre primero el escáner I2C: si no aparece 0x40, el problema está en las conexiones, no en el código.
Variantes y mejoras
- Monitor multi canal: puenteando las direcciones puedes poner varios INA219 en el mismo bus y medir, por ejemplo, el consumo de tres ramas de una instalación solar por separado, todo con un solo ESP32.
- Dashboard web en vivo: en vez de imprimir al serial, envía las lecturas desde un ESP32 por WiFi a un servidor MQTT o a una página web con gráficos. Así monitoreas el consumo desde el celular sin estar conectado por USB.
- Registro en microSD: para experimentos largos (curvas de descarga de horas o días), conecta un módulo microSD por SPI y cambia
Serial.printpor escritura a archivo. Vuelves más tarde y tienes toda la curva guardada.
Personalización para Chile
Para armar este proyecto en Chile puedes conseguir los componentes en MechatronicStore (precios aproximados, referenciales):
- Sensor INA219 (módulo de corriente/voltaje I2C). ~$3.500 CLP
- Arduino Uno R3 o ESP32 DevKit como microcontrolador. ~$9.000 / ~$8.000 CLP
- Protoboard 830 puntos. ~$3.500 CLP
- Jumpers macho macho 20 cm. ~$2.000 CLP
- Batería 18650 Li ion + portapilas. ~$4.000 CLP
Si el tutorial original usa una placa de otra marca, tanto el Arduino Uno como el ESP32 del catálogo cumplen la misma función I2C sin problema. Los enlaces directos a cada producto con stock se agregan automáticamente en la versión final del artículo.
Recursos
- Tutorial original: INA219 Tutorial for Arduino, ESP8266 and ESP32
- Librería Adafruit INA219: Adafruit_INA219
- Hoja de datos: INA219, Texas Instruments
Versión chilena, basada en el tutorial de DIYI0T, con componentes en stock local en MechatronicStore.




