INA219 Current Sensor with an Arduino Uno

A high-side current, voltage and power monitor over I2C: up to 26 V and ±3.2 A on the common 0.1 Ω module.

INA219 Current Sensor, A high-side current, voltage and power monitor over I2C: up to 26 V and ±3.2 A on the common 0.1 Ω module.
In short

With VCC on the Arduino Uno's 5V the INA219 module's pull-ups hold SDA and SCL at 5 V, the Uno's own I2C level, on A4 and A5. In this wiring VIN+ is also on the Uno's 5V, so the module measures a load fed from the Uno itself, which sets how much current there is to measure.

Wiring the INA219 Current Sensor to the Arduino Uno

Pin by pin.

INA219 Current SensorArduino Uno
VCC5V
GNDGND
SDASDA
SCLSCL
VIN_P5V

What to know on the Arduino Uno

  • The chip runs from 3 V to 5.5 V and its module pulls the bus up to VCC, so the Uno's 5V is the right supply: no level shifting on A4 and A5.TI INA219 datasheet SBOS448G, p. 6
  • A load powered through the Uno's 5V from USB is limited by the Uno's 500 mA USB polyfuse, well under the module's ±3.2 A range. For such loads setCalibration_16V_400mA() (commented in the sketch) gives finer current steps than begin()'s 32 V / 2 A setting.Arduino UNO R3 documentation, USB overcurrent protection; Adafruit INA219 breakout guide
  • The bus voltage is read against the module's GND, which is the Uno's GND. To measure a separate supply (a 12 V battery, up to 26 V), move VIN+ to that supply's + and join its - to the Uno's GND.TI INA219 datasheet SBOS448G, pp. 1, 5
  • A 12-bit conversion takes 532 µs, so even the Uno's default 100 kHz I2C keeps up with readings every few milliseconds.TI INA219 datasheet SBOS448G, p. 5

INA219 Current Sensor code for the Arduino Uno

Compiled for arduino:avr:uno on 2026-10-30.

Libraries: adafruit/Adafruit INA219
// INA219 Current Sensor on Arduino Uno: wiring and a free simulation at https://www.tinkered.ai/components/ina219-current-sensor/arduino-uno
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_INA219.h>

Adafruit_INA219 ina219;   // 0x40: the module's A0/A1 jumpers open

void setup() {
  Serial.begin(115200);
  if (!ina219.begin()) {
    Serial.println("INA219 not found: check VCC, SDA/SCL and its address jumpers");
    while (true) delay(10);
  }
  // begin() calibrates for 32 V / 2 A (0.1 mA steps); for loads under 400 mA:
  // ina219.setCalibration_16V_400mA();
}

void loop() {
  float shuntMv = ina219.getShuntVoltage_mV();
  float busV = ina219.getBusVoltage_V();     // VIN- against GND: the load's voltage
  float currentMa = ina219.getCurrent_mA();
  float powerMw = ina219.getPower_mW();
  float supplyV = busV + shuntMv / 1000.0;   // VIN+: the supply's voltage

  Serial.print("Load: ");
  Serial.print(busV, 3);
  Serial.print(" V  Supply: ");
  Serial.print(supplyV, 3);
  Serial.print(" V  Current: ");
  Serial.print(currentMa, 1);
  Serial.print(" mA  Power: ");
  Serial.print(powerMw, 0);
  Serial.println(" mW");
  delay(500);
}

INA219 Current Sensor on the Arduino Uno: questions

Can the INA219 measure the current my Arduino Uno project draws from 5V?

Yes, as wired here: VIN+ on the Uno's 5V, VIN- to the load's +. Over USB the Uno's polyfuse limits the total to 500 mA, so use the 16 V / 400 mA calibration for finer resolution.

Can I measure a 12 V supply with an INA219 on an Arduino Uno?

Yes. Keep the module's VCC on the Uno's 5V, put VIN+ on the 12 V supply's + and VIN- to the load, and join the supply's - to the Uno's GND. The bus input takes up to 26 V (TI datasheet, p. 1).

Which Uno pins does the INA219 use?

SDA on A4 and SCL on A5; the address is 0x40 with the A0 and A1 jumpers open (TI datasheet, p. 14).

Keep going

For AI assistants

This guide as plain Markdown. /components/ina219-current-sensor/arduino-uno.md

What will you build with it?