

The INA226 is a high-side current shunt monitor with an integrated I2C interface, designed for precise voltage, current, and power measurements. Manufactured by Generic, this module is widely used in applications requiring accurate power monitoring, such as battery management systems, energy monitoring, and industrial automation.








The INA226 module is designed to provide high accuracy and flexibility in power monitoring applications. Below are its key technical specifications:
| Parameter | Value |
|---|---|
| Supply Voltage (Vcc) | 2.7V to 5.5V |
| Input Voltage Range | 0V to 36V |
| Current Measurement Range | Configurable (based on shunt) |
| Communication Interface | I2C (up to 400kHz) |
| Resolution | 16-bit |
| Operating Temperature | -40°C to +125°C |
| Power Consumption | 330 µA (typical) |
The INA226 module typically comes with a 6-pin interface. Below is the pinout description:
| Pin Name | Pin Number | Description |
|---|---|---|
| VCC | 1 | Power supply input (2.7V to 5.5V) |
| GND | 2 | Ground connection |
| SCL | 3 | I2C clock line |
| SDA | 4 | I2C data line |
| VIN+ | 5 | Positive input for voltage measurement |
| VIN- | 6 | Negative input for voltage measurement (shunt) |
The INA226 module is straightforward to use in a circuit. Below are the steps and best practices for integrating it into your project.
Below is an example of how to use the INA226 module with an Arduino UNO to measure voltage and current:
#include <Wire.h>
// INA226 I2C address (default is 0x40, but check your module's datasheet)
#define INA226_ADDRESS 0x40
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Configure INA226 (e.g., calibration settings)
configureINA226();
}
void loop() {
float busVoltage = readBusVoltage(); // Read bus voltage in volts
float current = readCurrent(); // Read current in amperes
// Print the measurements to the serial monitor
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 the next reading
}
void configureINA226() {
// Example configuration: Write calibration register
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(0x05); // Calibration register address
Wire.write(0x10); // High byte of calibration value
Wire.write(0x00); // Low byte of calibration value
Wire.endTransmission();
}
float readBusVoltage() {
// Read bus voltage register (0x02)
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(0x02); // Bus voltage register address
Wire.endTransmission();
Wire.requestFrom(INA226_ADDRESS, 2); // Request 2 bytes
uint16_t rawData = (Wire.read() << 8) | Wire.read();
// Convert raw data to voltage (1 LSB = 1.25 mV)
return rawData * 0.00125;
}
float readCurrent() {
// Read current register (0x04)
Wire.beginTransmission(INA226_ADDRESS);
Wire.write(0x04); // Current register address
Wire.endTransmission();
Wire.requestFrom(INA226_ADDRESS, 2); // Request 2 bytes
uint16_t rawData = (Wire.read() << 8) | Wire.read();
// Convert raw data to current (based on calibration settings)
// Example assumes a calibration factor of 1 for simplicity
return rawData * 0.001; // Adjust based on your calibration
}
No I2C Communication:
Incorrect Voltage or Current Readings:
Module Not Powering On:
Q: Can the INA226 measure negative currents?
A: No, the INA226 is designed for high-side current measurement and cannot measure negative currents directly.
Q: What is the maximum current the INA226 can measure?
A: The maximum current depends on the value of the shunt resistor and the module's input voltage range. Ensure the shunt resistor is chosen to keep the voltage drop within the module's limits.
Q: Can I use the INA226 with a 3.3V microcontroller?
A: Yes, the INA226 supports a supply voltage range of 2.7V to 5.5V, making it compatible with both 3.3V and 5V systems.
By following this documentation, you can effectively integrate the INA226 module into your projects for precise voltage and current monitoring.