

The INA219 is a high-side current shunt monitor with an integrated I2C interface, designed for precise current, voltage, and power measurements. It is capable of measuring the voltage across a shunt resistor and the bus voltage, enabling accurate power monitoring. The INA219 is widely used in applications such as battery management systems, energy monitoring, and power optimization in embedded systems.








The INA219 offers high accuracy and flexibility for power monitoring applications. Below are its key technical specifications:
| Parameter | Value |
|---|---|
| Operating Voltage (Vcc) | 3.0V to 5.5V |
| Bus Voltage Range | 0V to 26V |
| Shunt Voltage Range | ±320mV |
| Current Measurement Range | Configurable (depends on shunt resistor) |
| Communication Interface | I2C (7-bit address, default: 0x40) |
| Resolution | 12-bit ADC |
| Accuracy | ±1% (typical) |
| Operating Temperature | -40°C to +125°C |
The INA219 is typically available in an 8-pin SOIC package. Below is the pinout description:
| Pin | Name | Description |
|---|---|---|
| 1 | V+ | High-side connection to the positive terminal of the shunt resistor. |
| 2 | V- | Low-side connection to the negative terminal of the shunt resistor. |
| 3 | GND | Ground connection. |
| 4 | SDA | I2C data line. |
| 5 | SCL | I2C clock line. |
| 6 | ALERT | Optional alert output for overcurrent or other conditions (open-drain). |
| 7 | A0 | I2C address selection bit 0. |
| 8 | A1 | I2C address selection bit 1. |
The INA219 is straightforward to use in a circuit, thanks to its I2C interface and built-in ADC. Below are the steps to integrate and use the INA219:
Below is an example of how to use the INA219 with an Arduino UNO to measure current, voltage, and power:
#include <Wire.h>
#include <Adafruit_INA219.h>
// Create an instance of the INA219 class
Adafruit_INA219 ina219;
void setup() {
Serial.begin(9600); // Initialize serial communication at 9600 baud
while (!Serial) {
delay(10); // Wait for the serial monitor to open
}
// Initialize the INA219 sensor
if (!ina219.begin()) {
Serial.println("Failed to find INA219 chip");
while (1) {
delay(10); // Halt execution if the sensor is not found
}
}
Serial.println("INA219 initialized successfully");
}
void loop() {
float shuntVoltage = ina219.getShuntVoltage_mV(); // Shunt voltage in mV
float busVoltage = ina219.getBusVoltage_V(); // Bus voltage in V
float current_mA = ina219.getCurrent_mA(); // Current in mA
float power_mW = ina219.getPower_mW(); // Power in mW
// Print the measurements to the serial monitor
Serial.print("Shunt Voltage: ");
Serial.print(shuntVoltage);
Serial.println(" mV");
Serial.print("Bus Voltage: ");
Serial.print(busVoltage);
Serial.println(" V");
Serial.print("Current: ");
Serial.print(current_mA);
Serial.println(" mA");
Serial.print("Power: ");
Serial.print(power_mW);
Serial.println(" mW");
Serial.println("-----------------------------------");
delay(1000); // Wait 1 second before the next reading
}
INA219 Not Detected on I2C Bus:
Incorrect Current or Voltage Readings:
No Output on Serial Monitor:
Serial.begin() value in the code.Overcurrent or Overvoltage Alerts:
Q: Can the INA219 measure negative currents?
A: Yes, the INA219 can measure bidirectional currents if configured appropriately. Ensure the shunt voltage range is within ±320mV.
Q: What is the maximum current the INA219 can measure?
A: The maximum current depends on the shunt resistor value. For example, with a 0.1Ω shunt resistor, the maximum measurable current is ±3.2A.
Q: Can I use the INA219 with a 3.3V microcontroller?
A: Yes, the INA219 is compatible with both 3.3V and 5V systems.
Q: How do I change the I2C address of the INA219?
A: Use the A0 and A1 pins to configure the I2C address. Refer to the datasheet for the address mapping.
By following this documentation, you can effectively integrate the INA219 into your projects for precise power monitoring and energy management.