Branchements et code Arduino pour le capteur de courant INA219

Le module de capteur de courant INA219 est un circuit intégré qui permet de mesurer la tension et le courant qui circule à travers un circuit. Il utilise la technologie de shunt pour mesurer le courant et fournit des informations de mesure précises via une interface I2C.

Le module INA219 est particulièrement utile pour surveiller la consommation d’énergie de dispositifs tels que les microcontrôleurs, les moteurs, les LED et les circuits électroniques en général. Il peut également être utilisé pour détecter des surcharges ou des courts-circuits dans un circuit.

Pour utiliser le module INA219, vous devez le connecter à votre microcontrôleur via une connexion I2C. Ensuite, vous pouvez utiliser du code pour lire les données de tension et de courant envoyées par le module INA219. Il existe de nombreuses bibliothèques disponibles pour faciliter l’utilisation du module INA219 avec des microcontrôleurs populaires tels que l’Arduino et le Raspberry Pi.

Le module de capteur de courant INA219 est conçu pour mesurer le courant continu (DC) uniquement. Il ne peut pas être utilisé pour mesurer le courant alternatif (AC).

Le module de capteur de courant INA219 peut mesurer des courants allant jusqu’à 3,2A avec une résolution de 1mA. Il est également capable de mesurer des tensions allant jusqu’à 26V.

Cependant, il est important de noter que ces plages de mesure peuvent varier en fonction des spécifications de votre module INA219 et des réglages de votre microcontrôleur. Les limites de tension et de courant dépendent également de la valeur de la résistance de shunt utilisée dans le module INA219.

Il est recommandé de consulter la fiche technique du module INA219 que vous utilisez pour connaître les limites exactes de tension et de courant pour votre application spécifique.

Il existe plusieurs bibliothèques que vous pouvez utiliser pour interfacer votre microcontrôleur avec le module de capteur de courant INA219. Voici une liste de quelques-unes des bibliothèques populaires pour les microcontrôleurs courants tels que l’Arduino, le Raspberry Pi, le ESP32, et le STM32 :

  • Pour Arduino, vous pouvez utiliser la bibliothèque Adafruit INA219 ou la bibliothèque INA219. Il pourra être également nécessaire d’ajouter la bibliothèque Adafruit_BusIO ou disponible ici.
  • Pour Raspberry Pi, vous pouvez utiliser la bibliothèque Python-INA219.
  • Pour ESP32, vous pouvez utiliser la bibliothèque INA219-ESP32.
  • Pour STM32, vous pouvez utiliser la bibliothèque INA219_STM32.

Ces bibliothèques contiennent des fonctions qui vous permettent de communiquer avec le module INA219 via une connexion I2C et de lire les mesures de tension et de courant.

Il est important de noter que la liste ci-dessus n’est pas exhaustive et qu’il existe de nombreuses autres bibliothèques disponibles pour les microcontrôleurs et les langages de programmation différents.

Le module de capteur de courant INA219 utilise une interface I2C pour communiquer avec votre microcontrôleur. Il a 4 adresses I2C possibles, qui sont déterminées par la connexion des broches d’adresse A0 et A1.

Voici les adresses I2C INA219 possibles en fonction de la configuration des broches A0 et A1 :

  • Adresse I2C INA219 par défaut : 0x40
  • Adresse I2C INA219 avec broche A0 connectée à GND : 0x41
  • Adresse I2C INA219 avec broche A1 connectée à GND : 0x44
  • Adresse I2C INA219 avec broche A0 et A1 connectées à GND : 0x45

Il est important de noter que ces adresses sont en notation hexadécimale et peuvent varier en fonction des spécifications de votre module INA219 ou de la configuration des broches. Si vous utilisez une bibliothèque pour lire les mesures de tension et de courant du module INA219, elle doit prendre en compte les adresses possibles et vous permettre de spécifier l’adresse correcte dans votre code.

Le branchement du module INA219 va être le même que pour un Ampèremètre que l’on placera en série dans un circuit pour effectuer une mesure.

Schéma de branchement d’un Ampèremètre

Le câblage du capteur de courant INA219 s’effectuera de la manière suivante : VCC = 5v, GND = 0v, SDA = A4, SCL = A5.

Vin+ = sur le + coté de la source d’alimentation, Vin- = sur le + coté de la charge que l’on veut mesurer. Le courant passera dans la résistance de Shunt et sera lu par le capteur.

Le programme de base « Getcurrent » pour effectuer les test se trouve dans l’onglet « exemples » de l’IDE Arduino

Voici un code en C++ enrichi d’un afficheur LCD 1602 sur une base du code « Getcurrent »

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

Adafruit_INA219 ina219;


#include <LiquidCrystal_I2C.h>

//define I2C address......
LiquidCrystal_I2C lcd(0x27,16,2);

void setup(void) 
{
  lcd.init();
  lcd.clear();
  lcd.backlight();

  lcd.setCursor(2,0);
  lcd.print("Energie Meter");

  lcd.setCursor(6,1);
  lcd.print("INA219");
  
  Serial.begin(115200);
  while (!Serial) {
      // will pause Zero, Leonardo, etc until serial console opens
      delay(1);
  }
    
  Serial.println("Hello!");
  
  // Initialize the INA219.
  // By default the initialization will use the largest range (32V, 2A).  However
  // you can call a setCalibration function to change this range (see comments).
  if (! ina219.begin()) {
    Serial.println("Failed to find INA219 chip");
    while (1) { delay(10); }
  }
  /*Lire la conso en temps reel sur le moniteur et le lcd
   * 
   */ 
   // To use a slightly lower 32V, 1A range (higher precision on amps):
  //ina219.setCalibration_32V_1A();
  // Or to use a lower 16V, 400mA range (higher precision on volts and amps):
  //ina219.setCalibration_16V_400mA();

  Serial.println("Measuring voltage and current with INA219 ...");
}

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

  shuntvoltage = ina219.getShuntVoltage_mV();
  busvoltage = ina219.getBusVoltage_V();
  current_mA = ina219.getCurrent_mA();
  power_mW = ina219.getPower_mW();
  loadvoltage = busvoltage + (shuntvoltage / 1000);
  puissance = (shuntvoltage * current_mA) / 1000;
  
  Serial.print("Bus Voltage:   "); Serial.print(busvoltage); Serial.println(" V");
  Serial.print("Load Voltage:  "); Serial.print(loadvoltage); Serial.println(" V");
  Serial.print("Power:         "); Serial.print(power_mW); Serial.println(" mW");
  Serial.println("");
  Serial.print("                Tension:          "); Serial.print(shuntvoltage); Serial.println(" V");
  Serial.print("                Puissance:        "); Serial.print(puissance); Serial.println(" W");
  Serial.print("                Amperage:         "); Serial.print(current_mA); Serial.println(" mA");
  Serial.println("");

delay(2000);

 lcd.init();           // permet de brancher le lcd a chaud
 lcd.setCursor(1, 0);
 lcd.print("Conso ");lcd.print(current_mA); lcd.print(" mA"); 
  
}