

The INA226 is a high-side current shunt and power monitor with an integrated precision analog-to-digital converter (ADC) and an I2C-compatible interface. Manufactured by INA, this component is designed to measure voltage, current, and power in a wide range of applications. Its high accuracy and low power consumption make it ideal for battery management systems, power monitoring, and industrial equipment.








| Parameter | Value |
|---|---|
| Supply Voltage (Vcc) | 2.7V to 5.5V |
| Input Voltage Range | 0V to 36V |
| Current Measurement Range | Determined by external shunt |
| ADC Resolution | 16-bit |
| Communication Interface | I2C (up to 1 MHz) |
| Operating Temperature Range | -40°C to +125°C |
| Power Consumption | 310 µA (typical) |
| Pin No. | Pin Name | Description |
|---|---|---|
| 1 | VBUS | Voltage input pin for bus voltage measurement |
| 2 | GND | Ground connection |
| 3 | SCL | I2C clock input |
| 4 | SDA | I2C data input/output |
| 5 | ALERT | Alert output pin for programmable threshold notifications |
| 6 | VIN+ | Positive input for current shunt voltage measurement |
| 7 | VIN- | Negative input for current shunt voltage measurement |
| 8 | VCC | Power supply input |
Below is an example of how to interface the INA226 with an Arduino UNO to measure voltage and current:
#include <Wire.h>
// INA226 I2C address (default is 0x40, check datasheet for address configuration)
#define INA226_ADDRESS 0x40
// Register addresses
#define REG_BUS_VOLTAGE 0x02
#define REG_CURRENT 0x04
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Configure INA226 (e.g., calibration register setup)
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(0x05); // Calibration register address
Wire.write(0x10); // Calibration value (example, adjust based on shunt resistor)
Wire.endTransmission();
}
void loop() {
float busVoltage = readRegister(REG_BUS_VOLTAGE) * 1.25 / 1000; // Convert to volts
float current = readRegister(REG_CURRENT) * 0.001; // Convert to amps (example scaling)
Serial.print("Bus Voltage: ");
Serial.print(busVoltage);
Serial.println(" V");
Serial.print("Current: ");
Serial.print(current);
Serial.println(" A");
delay(1000); // Wait 1 second before next reading
}
uint16_t readRegister(uint8_t reg) {
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(reg); // Specify register to read
Wire.endTransmission();
Wire.requestFrom(INA226_ADDRESS, 2); // Request 2 bytes
uint16_t value = Wire.read() << 8 | Wire.read(); // Combine MSB and LSB
return value;
}
No I2C Communication:
Incorrect Voltage or Current Readings:
Alert Pin Not Functioning: