Soyez patient, cet article / partie sera bientôt prêt ! Faites moi savoir votre impatience via les commentaires 😉
Hello world ! Qu’ouis-je, qu’entends-je, qu’acoustiquais-je ? Vous voulez connaitre la consommation temps réel de votre moteur DC ? Vous voulez savoir si votre batterie se charge, ou pas ?
Nous verrons ici comment, à l’aide de ce capteur, mesurer les échanges sur un câble électrique (Courant, Tension, Puissance et Energie). La seule condition : La tension doit être positive ! Notre code sera en C. Matériel :
- 1 Capteur Wattmètre I2C INA219
- 1 Potentiomètre
- 1 ESP32 ou Arduino
- 1 Batterie LiPo 2S (ou batterie 7 – 8V)
- 1 Contrôleur de moteur (ou un MOSFET canal N)
- 1 Moteur 6V
- 2 Résistances 220 ohms
Sommaire
1 – Introduction
Le wattmètre conçu par DFROBOT mesure tensions, courants et puissances à l’aide de sa puce INA219 et peut renvoyer ses informations en I2C à plus de 10 Khz. Il est simple d’usage, compact (3 x 2,2 cm) et léger (4g).
Tant que la tension (câble rouge) mesurée reste positive, inférieure à 26V et que l’intensité mesurée reste entre -8A et 8A, le wattmetre ne risque rien. On remarque donc que le courant mesuré peut osciller, et son flux s’inverser, depuis que la tension reste positive.
Cependant, le wattmetre doit être placé sur le passage du courant. Ainsi, son utilisation implique de couper le câble (ici rouge) sur lequel on souhaite l’installer (en plus de le relier à la masse, ici le câble noir).
Enfin, le wattmetre ne peut mesurer efficacement des tensions et des intensités de l’ordre du mV et du mA. Il n’est donc pas indiqué pour mesurer la consommation des petits capteurs.
Une librairie compatible avec l’IDE Arduino (Langage C) et Raspberry pi (Langage Python) a été publiée par DFROBOT. Ce que j’écris ici est en complément de leur tutoriel.
2 – Caractéristiques

Équipée du capteur INA219, La carte se compose de deux parties. La partie I2C (1 à 5) permet la communication de l’INA219 avec l’Arduino UNO. La partie bornier (6) se place entre la source d’énergie et la charge.
Partie I2C
La partie I2C est, d’après la doc constructeur, adaptée aux microprocesseurs fonctionnant sous 3,3V et 5V.
- 1 – VCC, doit être alimenté sous 3,3v ou 5v
- 2 – GND, c’est à dire 0V (Note : Les GND des deux parties sont reliées)
- 3 – SCL, partie horloge (clock) du port I2C
- 4 – SDA, partie données (data) du port I2C
Le port I2C peut être configuré selon plusieurs modes :
- 5 – Sélecteur de l’adresse (valeurs hexa : 0x40, 0x41, 0x44, 0x45)
- Registre 0x00 – Configuration du gain, de la fréquence et de la résolution des grandeurs à mesurer
- mode STANDARD / FAST / HIGH SPEED – vitesse de communication du port I2C(100 / 400 / 2560 kbps)
Partie Bornier
La partie bornier se compose de 3 borniers. Les borniers IN doivent être séparément reliés à la source d’énergie et à la charge. Le bornier du milieu doit être relié à la masse de la source d’énergie et de la charge. La tension sur les borniers IN doivent toujours être positifs.
La résolution et la fréquence dépendent de la configuration du capteur INA219 via le port I2C.
| min | max | Résolution min | Fréquence max | |
| Tension | 0 V | 26 V | 4 mV | 11,9 kHz |
| Courant | – 8 A | 8 A | 1 mA | 11,9 kHz |
| Puissance | – 206 W | 206 W | 4 mW | 11,9 kHz |

Librairie DFrobot
Retrouvez ci-dessous les fonctions en C de la classe DFRobot_INA219_IIC.
bool begin();
void linearCalibrate(float ina219Reading_mA, float extMeterReading_mA),
void reset();
eIna219_Status lastOperateStatus;
float getBusVoltage_V(),
float getShuntVoltage_mV(),
float getCurrent_mA(),
float getPower_mW();
void setBRNG(eIna219BusVolRange_t value),
void setPGA(eIna219PGABits_t bits),
void setBADC(eIna219AdcBits_t bits, eIna219AdcSample_t sample),
void setSADC(eIna219AdcBits_t bits, eIna219AdcSample_t sample),
setMode(eInaMode mode);3 – Préparation
Comme dit au début, nous allons mesurer les échanges sur un câble électrique, par exemple entre une batterie et sa charge, ici un moteur. Dans un premier temps, installons la librairie, puis vérifions le bon fonctionnement du capteur et enfin montons un projet plus complet.
Installation de la librairie
- Télécharger la librairie INA219 sur le GitHub de DFROBOT
- Décompressez la dans le dossier librairies de votre IDE Arduino
(%USERPROFILE%\Documents\Arduino\libraries)
Test du capteur
Dans cette partie, nous allons tester le fonctionnement du capteur. Vous aurez besoin du matériel suivant :
- Le wattmetre
- La carte Arduino UNO (ou ESP) et son câble USB
- 4 fils de liaison
Branchement du capteur au microcontrôleur (ici un ESP32 et un Arduino UNO)
- Reliez la borne + à la tension de travail du microprocesseur (En général 5V pour Arduino, 3.3V pour ESP)
- Reliez la borne – à la masse GND du microcontrôleur
- Reliez la borne C à la broche SCL du microcontrôleur
- Reliez la borne D à la broche SDA du microcontrôleur
Ouvrir le code exemple :
- Ouvrez / Réouvrez l’IDE Arduino
- Allez dans
Fichier>Exemples>DFRONOT_INA219>example>getVoltageCurrentPower - Branchez le microcontrôleur au PC
- Renseignez les bons paramètres dans
outils>type de carteetoutils>port - Envoyez votre code.
- Une fois le code envoyé, ouvrez
outils>moniteur série
Si vous observez des valeurs légèrement fluctuantes, bravo ! Vous avez réussi ! Notez que vos valeurs sont quasiment nulles car les borniers du capteurs sont laissés vides. On va y remédier dans la partie suivante.
Mesure de la consommation moteur
Réalisons un circuit complet. Vous avez ici deux exemples dans lesquels le potentiomètre permet de diriger la tension envoyée au moteur :
- Grâce à un MOSFET canal N et un signal PWM
- Grâce à un contrôleur de moteur DC et un signal Servo
Vous pouvez retrouver ci-dessous le schéma électrique de ces deux situations avec une petite carte Arduino et une carte ESP32. Vous retrouverez les codes dans la partie suivante.
Carte Arduino
Carte ESP32
Soyez patient, cet article / partie sera bientôt prêt ! Faites moi savoir votre impatience via les commentaires 😉
4 – Premiers essais
Soyez patient, cet article / partie sera bientôt prêt ! Faites moi savoir votre impatience via les commentaires 😉
Cette partie fait suite à la partie précédente. Ici, toutes les fonctions crées sont non bloquantes.
#include <Wire.h>
#include "DFRobot_INA219.h"
DFRobot_INA219_IIC ina219(&Wire, INA219_I2C_ADDRESS4);
float ina219Reading_mA = 1000;
float extMeterReading_mA = 1000;
long old_time = 0;
long delai = 100;
float tension = 0;
float intensite = 0;
float puissance = 0;
float energie = 0;
void printMesures()
{
if(millis() - old_time < delai) return;
old_time += delai;
tension = ina219.getBusVoltage_V();
intensite = ina219.getCurrent_mA()*0.001;
puissance = ina219.getPower_mW()*0.001;
energie += puissance * delai * 0.001;
Serial.print(tension, 3); Serial.print("V\t");
Serial.print(intensite, 3); Serial.print("A\t");
Serial.print(puissance, 3); Serial.print("W\t");
Serial.print(energie, 3); Serial.print("J\n");
}
void setup(void)
{
//Initialisation du port série
Serial.begin(115200);
while(!Serial);
//Initialisation du wattmetre
while(ina219.begin() != true) {
Serial.println("INA219 begin faild");
delay(2000);
}
ina219.linearCalibrate(ina219Reading_mA, extMeterReading_mA);
Serial.println();
//Initialisation des parametres temps
delay(2000);
old_time = millis();
}
void loop(void)
{
printMesures();
}#include <Servo.h>
#include <Wire.h>
#include "DFRobot_INA219.h"
#define PIN_CONTROLLER 3
#define PIN_POTENTIOMETER A0
Servo controller;
DFRobot_INA219_IIC ina219(&Wire, INA219_I2C_ADDRESS4);
float ina219Reading_mA = 1000;
float extMeterReading_mA = 1000;
long old_time = 0;
long delai = 100;
float tension = 0;
float intensite = 0;
float puissance = 0;
float energie = 0;
void printMesures()
{
if(millis() - old_time < delai) return;
old_time += delai;
tension = ina219.getBusVoltage_V();
intensite = ina219.getCurrent_mA()*0.001;
puissance = ina219.getPower_mW()*0.001;
energie += puissance * delai * 0.001;
Serial.print(tension, 3); Serial.print("V\t");
Serial.print(intensite, 3); Serial.print("A\t");
Serial.print(puissance, 3); Serial.print("W\t");
Serial.print(energie, 3); Serial.print("J\n");
}
void setMotorTension()
{
float value = (float)analogRead(PIN_POTENTIOMETER);
float curseur = map(value, 0, 1024, 0, 180);
controller.write(curseur);
}
void setup(void)
{
pinMode(PIN_POTENTIOMETER, INPUT);
//Initialisation Servo
controller.attach(PIN_CONTROLLER);
controller.write(90);
//Initialisation du port série
Serial.begin(115200);
while(!Serial);
//Initialisation du wattmetre
while(ina219.begin() != true) {
Serial.println("INA219 begin faild");
delay(2000);
}
ina219.linearCalibrate(ina219Reading_mA, extMeterReading_mA);
Serial.println();
//Initialisation des parametres temps
delay(2000);
old_time = millis();
}
void loop(void)
{
setMotorTension();
printMesures();
}5 – Sources
- https://github.com/DFRobot/DFRobot_INA219
- https://wiki.dfrobot.com/Gravity%3A%20I2C%20Digital%20Wattmeter%20SKU%3A%20SEN0291
- https://www.gotronic.fr/art-module-wattmetre-i2c-gravity-sen0291-29538.htm
