← All parts

INA226 Power Monitor

INA226

Texas Instrumentsic data converter

The INA226 is a 16-bit, ultra-precise current, voltage, and power monitor with an I2C/SMBus interface. It senses bus voltages from 0 to 36 V on the high or low side and reports current and power directly.

In stock

Specifications

8
Operating Voltage
2.7 to 5.5 V
Bus Voltage Range
0 to 36 V
Interface
I2C/SMBus
Resolution
16 bit
Accuracy
0.1 %
Supply Current
330 uA
Operating Temperature Range
-40 to 125 °C
Package Types
VSSOP-10

Pinout

10
PinNameFunctionsNotes
1A1
GPIO
Address pin; connect to GND, SCL, SDA, or VS
2A0
GPIO
Address pin; connect to GND, SCL, SDA, or VS
3Alert
GPIO
Multi-functional alert, open-drain output
4SDA
I2C
Serial bus data line, open-drain input/output
5SCL
I2C
Serial bus clock line, open-drain input
6VS
POWER
Power supply, 2.7 V to 5.5 V
7GND
GND
Ground
8VBUS
ADC
Bus voltage input
9IN-
ADC
Connect to load side of shunt resistor
10IN+
ADC
Connect to supply side of shunt resistor

Interactive pinout

Highlight:
INA226

Click a pin to copy its name · tap a tag above to spotlight a bus.

Starter code

Community starter examples — minimal, unofficial, and provided to get you wiring fast. Verify against the manufacturer datasheet before relying on them.

Arduino (C++)

arduino
// INA226 current / power monitor — community starter example
// Bus voltage needs no calibration (1.25 mV/LSB); current needs a cal register
// set for your shunt — use the Rob Tillaart 'INA226' library for that.
#include <Wire.h>

const byte ADDR = 0x40;   // A0/A1 -> GND

float readBusVoltage() {
  Wire.beginTransmission(ADDR);
  Wire.write(0x02);                 // bus voltage register
  Wire.endTransmission();
  Wire.requestFrom(ADDR, (byte)2);
  uint16_t raw = (Wire.read() << 8) | Wire.read();
  return raw * 0.00125;             // 1.25 mV/LSB
}

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

void loop() {
  Serial.print("Vbus="); Serial.print(readBusVoltage()); Serial.println(" V");
  delay(1000);
}

MicroPython

python
# INA226 (ESP32) — community starter example
# Bus voltage (no calibration). For current, set the cal register / use a driver.
from machine import Pin, I2C
import time

i2c = I2C(0, scl=Pin(22), sda=Pin(21))
ADDR = 0x40

while True:
    d = i2c.readfrom_mem(ADDR, 0x02, 2)   # bus voltage register
    raw = (d[0] << 8) | d[1]
    print("Vbus", raw * 0.00125, "V")
    time.sleep(1)

Wiring

PinArduino Uno R3ESP32 DevKitC (WROOM-32)Notes
VS+5V3V3Logic 2.7-5.5 V
GNDGNDGND
SCLA5/SCLGPIO22I2C clock
SDAA4/SDAGPIO21I2C data
IN+ / IN---Across the shunt, in series with the load (up to 36 V bus)
VBUS--Tie to the bus node being measured

Typical uses

  • Precise bus voltage / current / power
  • Battery and supply-rail monitoring

Related parts

6