O INA219 é um sensor de corrente e tensão para uma medição de energia fácil. Em algumas aplicações, é interessante poder medir a potência elétrica trocada entre dispositivos – como para conhecer a potência captada por um painel solar, por exemplo. Neste tutorial, veremos como medir os valores de potência com o sensor INA219.
Pré-requisito: dê sentidos ao seu robô
Material
- Computador
- Arduino
- Cabo USB
- Sensor INA219
Esquema
O INA219 é um sensor de corrente e tensão que comunica via I2C. Basta alimentá-lo através da saída 5V do Arduino e ligar os terminais SDA e SLC da comunicação I2C.

É possível modificar o endereço I2C utilizado acrescentando uma ponte de solda nos terminais A0 e A1:
- 0x40 o endereço padrão
- 0x41 com uma ponte em A0
- 0x44 com uma ponte em A1
- 0x45 com uma ponte em A0 e A1
Código
Para exibir as medidas do INA219, usaremos a biblioteca Adafruit_INA219.h que pode ser baixada ou ser instalada diretamente da IDE do Arduino.
A potência elétrica trocada por dois dispositivos é calculada multiplicando-se a tensão e a corrente no barramento que os liga:
P=UxI, sendo “P” a potência (W), “U” a voltagem (V) e “I” a corrente (A).
A energia é a potência consumida pelo dispositivo ao longo do tempo
E=Pxt, sendo “E” a energia (Wh), “P” a potência (W) e “t” o tempo (h)
Funções para saber:
- begin() para iniciar a comunicação com o sensor
- getBusVoltage_V() para obter o valor da tensão no barramento Vin- /Vin+
- shuntVoltage_mV() para obter a tensão nos terminais da resistência shunt
- getCurrent_mA() para obter o valor da corrente a partir da resistência shunt
#include <Wire.h>
#include <Adafruit_INA219.h>
Adafruit_INA219 ina219;
float voltage_V = 0,shuntVoltage_mV,busVoltage_V;
float current_mA = 0;
float power_mW = 0;
float energy_Wh=0;
long time_s=0;
void setup(void)
{
Serial.begin(9600);
uint32_t currentFrequency;
ina219.begin();
Serial.println("Measuring voltage and current with INA219");
}
void loop(void)
{
getData();
delay(2000);
}
void getData(){
time_s=millis()/(1000); // convert time to sec
busVoltage_V = ina219.getBusVoltage_V();
shuntVoltage_mV = ina219.getShuntVoltage_mV();
voltage_V = busVoltage_V + (shuntVoltage_mV / 1000);
current_mA = ina219.getCurrent_mA();
//power_mW = ina219.getPower_mW();
power_mW=current_mA*voltage_V;
energy_Wh=(power_mW*time_s)/3600; //energy in watt hour
Serial.print("Bus Voltage: "); Serial.print(busVoltage_V); Serial.println(" V");
Serial.print("Shunt Voltage: "); Serial.print(shuntVoltage_mV); Serial.println(" mV");
Serial.print("Load Voltage: "); Serial.print(voltage_V); Serial.println(" V");
Serial.print("Current: "); Serial.print(current_mA); Serial.println(" mA");
Serial.print("Power: "); Serial.print(power_mW); Serial.println(" mW");
Serial.print("Energy: "); Serial.print(energy_Wh); Serial.println(" mWh");
Serial.println("----------------------------------------------------------------------------");
}
Aplicação
Uma aplicação possível para um sensor INA219 é a criação de um medidor de energia para medir a potência elétrica absorvida por um painel solar, por exemplo. Isso permite verificar o bom funcionamento das células fotovoltaicas e conhecer o seu desempenho ao longo do tempo.

Fontes
- https://openhomeautomation.net/power-monitoring-arduino-ina219/
- https://learn.adafruit.com/adafruit-ina219-current-sensor-breakout/assembly
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie