Moniteur d'énergie Arduino & Data Logger fiable – Guide complet (Dr. Wattson + carte SD)
Composants
| Arduino UNO | 1 |
| Carte Dr. Wattson (MCP39F521) – monitoring énergie AC | 1 |
| Boîtier de protection pour Dr. Wattson (prise IEC + connecteurs) | 1 |
| Module carte MicroSD (Adafruit ou équivalent) | 1 |
| LED + résistance 220 Ω | 1 |
| Bouton poussoir tactile | 1 |
Principe
Dr. Wattson est une carte de monitoring énergétique basée sur le **MCP39F521** (Microchip), mesurant tension, courant, puissances active/réactive/apparente, facteur de puissance, fréquence secteur. Isolation galvanique par transformateurs → sortie numérique sécurisée. Précalibrée 1 mA – 4 A (ratio dynamique 4000:1).
L'Arduino lit les données via **I2C** (pins A4/A5), les horodate (millis()), et les enregistre en **CSV sur carte SD** à la demande (bouton poussoir). Rotation automatique des fichiers : DATA00.CSV à DATA99.CSV. LED indique l'état d'enregistrement.
Câblage
Dr. Wattson → Arduino UNO (I2C) :
- SCL → A5
- SDA → A4
- GND → GND
- VIN → 5V
- 3,3V → 3,3V (optionnel)
- ZCD, Event → Non utilisés ici
Module MicroSD → Arduino UNO (SPI hardware) :
- CLK → Pin 13
- MISO → Pin 12
- MOSI → Pin 11
- CS → Pin 10
Bouton + LED :
- Bouton → Pin 4 (pull-up interne, logique inversée)
- LED + 220 Ω → Pin 9
Bibliothèques requises
Wire.h(incluse)SD.h(incluse)Button.h(Jack Christensen) : GitHubUpbeatLabs_MCP39F521.h: GitHub Upbeat Labs
Sketch principal (extrait commenté)
#include <Wire.h>
#include <UpbeatLabs_MCP39F521.h>
#include <SD.h>
#include <Button.h>
#define BUTTON_PIN 4
#define LED_PIN 9
#define CHIP_SELECT 10
Button myBtn(BUTTON_PIN, true, true, 20); // pin, pullup, invert, debounce_ms
UpbeatLabs_MCP39F521 wattson;
bool logging = false;
char filename[] = "DATA00.CSV";
void setup() {
Serial.begin(9600);
pinMode(LED_PIN, OUTPUT);
pinMode(CHIP_SELECT, OUTPUT);
if (!SD.begin(CHIP_SELECT)) {
Serial.println(F("Erreur carte SD"));
return;
}
wattson.begin(0x74); // Adresse I2C par défaut
// Trouver premier fichier libre
for (uint8_t i = 0; i < 100; i++) {
filename[4] = '0' + i/10;
filename[5] = '0' + i%10;
if (!SD.exists(filename)) break;
}
Serial.print(F("Fichier actif : ")); Serial.println(filename);
}
void loop() {
myBtn.read();
if (myBtn.wasReleased()) {
logging = !logging;
digitalWrite(LED_PIN, logging);
}
if (logging) {
UpbeatLabs_MCP39F521_Data raw;
UpbeatLabs_MCP39F521_FormattedData data;
if (wattson.read(&raw, NULL) == UpbeatLabs_MCP39F521::SUCCESS) {
wattson.convertRawData(&raw, &data);
unsigned long t = millis();
// Affichage terminal (avec effacement écran via code ANSI)
Serial.write("\x1B""c");
Serial.print(F("Courant: ")); Serial.println(data.currentRMS, 4);
Serial.print(F("Puiss. active: ")); Serial.println(data.activePower, 4);
Serial.print(F("Puiss. réactive: ")); Serial.println(data.reactivePower, 4);
Serial.print(F("Puiss. apparente: ")); Serial.println(data.apparentPower, 4);
// Écriture CSV
File f = SD.open(filename, FILE_WRITE);
if (f) {
f.print(t); f.print(",");
f.print(data.currentRMS); f.print(",");
f.print(data.activePower); f.print(",");
f.print(data.reactivePower); f.print(",");
f.println(data.apparentPower);
f.close();
}
}
}
}
Utilisation
- Branchez Dr. Wattson sur secteur (prise IEC), charge sur la sortie.
- Alimentez l'Arduino (USB).
- Ouvrez un terminal série (
screen /dev/ttyUSB0 9600sur Linux/Mac, ou PuTTY/TeraTerm sur Windows) pour voir les valeurs en temps réel. - Appuyez sur le bouton → LED s'allume = enregistrement démarré.
- Allumez la charge, observez le régime transitoire (ex: ampoule fluocompacte 14W : pic 17W → stable 14,2W).
- Réappuyez sur le bouton → arrêt. Retirez la carte SD.
Analyse dans Excel
Ouvrez le fichier DATAXX.CSV. Ajoutez une ligne d'en-tête :
timestamp, currentRMS, activePower, reactivePower, apparentPower
Créez des graphiques : courant/temps, puissances/temps. Comparez démarrage à froid / chaud, veille, etc.
Fonctions avancées Dr. Wattson (librairie complète)
- Routines d'étalonnage (modifier résistance de charge, recalibrer)
- Détection passage par zéro (ZCD)
- Événements : surintensité, surtension, creux de tension
- Adressage I2C configurable (4 adresses) → plusieurs Dr. Wattson sur un bus
Ressources
- Manuel utilisateur + schémas : GitHub upbeatlabs/drwattson
- Bibliothèques Arduino + Python (Raspberry Pi/BeagleBone)
- Disponible sur Tindie
Projet professionnel, sécurisé (boîtier isolé), prêt pour l'analyse énergétique sérieuse de vos appareils.
Processus de fabrication
- La révolution du Cloud : Comment le Cloud Computing transforme l'IT, la sécurité et les carrières
- Maîtriser la maintenance préventive : Construire et optimiser les plannings fixes et flottants
- Construction d'un autoencodeur variationnel avec TensorFlow : guide pratique
- Enregistreur de Température et Humidité Arduino avec DHT11 et Shield Ethernet
- Moniteur de Température et Horloge Temps Réel Arduino avec Écran TFT 3.2"
- Lire température et humidité avec DHT11 sur Blynk – Tutoriel Arduino pas à pas
- Système de Surveillance Domestique Avancé avec Arduino Mega et Capteurs IoT
- Contrôleur de Moteur Pas à Pas Arduino avec A4988 et Joystick
- Construire une Boussole Numérique Temps Réel avec Arduino et Processing