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