Medir tensión, intensidad y potencia con Arduino y INA219


¿Qué es un INA219?

El INA219 es un sensor fabricado por Texas Instruments que permite realizar medidas de tensión, intensidad y potencia en circuitos electrónicos.

El INA219 puede metir tensiones de 0V a 26V, pudiendo elegir entre dos escalas de 16V y 32V, con una precisión máxima de ±0.5.

La ganancia de la medición corriente es ajustable por software, lo que influye en el rango y precisión que podemos obtener. Al mínimo, puede medir corrientes de hasta ±3.2A con una precisión de 0.8mA. Al máximo, un rango de ±400mA con precisión de 0.1mA.

La alimentación del módulo es compatible con 3V3 y 5V. La comunicación se realiza a través de I2C, por lo que es muy sencillo conectarlo a un procesador como Arduino.

Anuncio:

El INA219 es una muy buena opción para realizar mediciones eléctricas, ya que realiza la medición simultánea de intensidad, tensión y potencia eléctrica.

Precio

El INA219 es un sensor con muy buena relación de prestaciones respecto a precio. Podemos encontrarlo por 1.60€ en vendedores internacionales de Ebay y Aliexpress.

¿Cómo funciona un INA219?

El INA219 está formado por una resistencia de shunt, un amplificador de ganancia variable y un conversor analógico digital de 12 bits.

El ADC realiza la medición tanto la tensión del bus, como de alimentación de la carga, y la caída de tensión en la resistencia shunt originada por la corriente de la carga. Con ello, el INA219 puede calcular la potencia eléctrica consumida por la carga, como la multiplicación de la tensión e intensidad medidas.

La tensión máxima que puede medirse en la resistencia de shunt es de 40mV. Por defecto, el módulo lleva incorpora una resistencia de 0.1 Ohm. Esto, combinado con el ADC de 12 bits, da lugar a un rango máximo de ±400mA, con una precisión de 0.1mA.

Sin embargo, podemos modificar la ganancia del PGA entre 1 a 8. Esto da lugar a un rango máximo de medición de intensidad de ±3.2A, con una precisión de 0.8mA.

Por otro lado, la medición de tensión tiene dos escalas de medición, de 16 y 32V, proporcionando una precisión de hasta 0.5% respecto al máximo de la escala elegida.

Esquema de montaje

La conexión es sencilla, simplemente alimentamos el módulo desde Arduino mediante GND y 5V y conectamos el pin SDA y SCL de Arduino con los pines correspondientes del INA219. Por otro lado, conectamos la carga a medir empleando el borne atornillado, prestando atención de respetar la polaridad indicada en la placa.

Finalmente, la conexión vista desde el lado de Arduino quedaría así.

Ejemplos de código

Para realizar la lectura del INA219 usaremos la librería desarrollada por Adafruit, disponible en https://github.com/adafruit/Adafruit_INA219.

La librería proporciona ejemplos de código, que resulta aconsejable revisar. Los siguientes ejemplos, por ejemplo, son modificaciones están basados a partir de los disponibles en la librería.

#include <Wire.h>
#include <Adafruit_INA219.h>

Adafruit_INA219 ina219;


void setup(void) 
{
  Serial.begin(115200);
  uint32_t currentFrequency;
  
  // Iniciar el INA219
  ina219.begin();  //por defecto, inicia a 32V y 2A

  // Opcionalmente, cambiar la sensibilidad del sensor
  //ina219.setCalibration_32V_1A();
  //ina219.setCalibration_16V_400mA();

  Serial.println("INA219 iniciado...");
}

void loop(void) 
{
  float shuntvoltage = 0;
  float busvoltage = 0;
  float current_mA = 0;
  float loadvoltage = 0;
  float power_mW = 0;

  // Obtener mediciones
  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  loadvoltage = busvoltage + (shuntvoltage / 1000);
  
  // Mostrar mediciones
  Serial.print("Bus Voltaje:   "); Serial.print(busvoltage); Serial.println(" V");
  Serial.print("Shunt Voltaje: "); Serial.print(shuntvoltage); Serial.println(" mV");
  Serial.print("Load Voltaje:  "); Serial.print(loadvoltage); Serial.println(" V");
  Serial.print("Corriente:       "); Serial.print(current_mA); Serial.println(" mA");
  Serial.print("Potencia:         "); Serial.print(power_mW); Serial.println(" mW");
  Serial.println("");

  delay(2000);
}
5 2 votes
Article Rating

Anuncio:

Previous Aplicaciones multiplataforma con ASP.NET Core y Electron.NET
Next Leer códigos 433Mhz desde ordenador con SDR y RTL_433
7 Comments
oldest
newest
Inline Feedbacks
View all comments
Yonatan Perenguez
1 year ago

buen día, en la parte (un rango de ±400mV con precisión de 0.1mA) supongo que era 400mA?? osea que tengo que poner en código ( ina219.setCalibration_16V_400mA(); ) ? en v+ y v-, abrimos el circuito que deseamos medir?

Jesus Tano
9 months ago

Hola, me podrias decir si sirve para medir tensión en un toma corriente? digamos la tensión de red sin carga alguna. En mi caso 220V. Obviamente utilizando un reductor de tensión adecuado para no quemar el modulo.

Dan
2 months ago

Hola, creo que en el apartado "Ejemplos de código" <<Para realizar la lectura del BME280>> se ha introducido el BME280 en lugar del sensor INA.

Muy buena página sobre ingeniería en general, enhorabuena. Saludos.

oswaldo
1 month ago

hola, una consulta, hay sensores para detectar metales pesados en agua residual. gracias por la ayuda.