Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Mesure précise du courant alternatif avec le capteur ACS712 sur Arduino

Composants et fournitures

Composant Quantité
Arduino UNO 1
Écran OLED I²C 128x32 1
Capteur ACS712 30A 1
Écran LCD 16x2 I²C 1

À propos de ce projet

⚠ ATTENTION : Manipulation du secteur – Danger de mort. Prenez toutes les précautions nécessaires.

Ce tutoriel montre comment mesurer le courant alternatif (AC) avec le capteur à effet Hall ACS712 (version 30A) et un Arduino Uno. Nous verrons comment obtenir la valeur efficace réelle (TRMS – True RMS) pour tout type de signal, pas seulement sinusoïdal.

Le capteur utilise l'effet Hall : production d'une tension proportionnelle au courant traversé, isolée galvaniquement du circuit de mesure.

Tests réalisés sur ampoule à incandescence 75W avec variateur de lumière (triac), en série avec un multimètre de référence et le module ACS712.

Plan du tutoriel

  1. Interface du module avec Arduino – visualisation du signal (cycle complet, demi-cycle).
  2. Code simple pour signaux sinusoïdaux uniquement (méthode crête-à-crête).
  3. Code TRMS universel (bibliothèque Filters) avec affichage LCD/OLED.

Choix du capteur ACS712

Versions : 5A, 20A, 30A. Évitez le 30A pour usage domestique : sensibilité trop faible, grandes fluctuations à bas courant. Un 5A ou 10A est préférable. La calibration (pente/intercept) dépend de la version – expliquée dans le code.

Test 1 : Visualisation du signal brut

Câblage (Test 1, 2, 3 identiques)

Code 1 : Lecture brute (Serial Plotter)

#define Current_sensor A0
float i;
void setup() {
  Serial.begin(9600);
  pinMode(Current_sensor, INPUT);
}
void loop() {
  i = analogRead(Current_sensor);
  Serial.println(i);
  delay(100); // Ajuster pour forme d'onde correcte
}

Résultat : sinusoïde visible. Avec variateur (triac), forme d'onde tronquée caractéristique.

Test 2 : Méthode crête-à-crête (sinusoïde seulement)

Code 2 : Calcul RMS par crête-à-crête

#define SAMPLES 300
#define ACS_Pin A0
float High_peak, Low_peak, Amps_Peak_Peak, Amps_RMS;

void setup() {
  Serial.begin(9600);
  pinMode(ACS_Pin, INPUT);
}

void loop() {
  read_Amps();
  Amps_RMS = Amps_Peak_Peak * 0.3536 * 0.06; // 0.06 = facteur calibration
  Serial.print(Amps_RMS); Serial.print("\t"); Serial.println(Amps_Peak_Peak);
  delay(200);
}

void read_Amps() {
  int cnt; High_peak = 0; Low_peak = 1024;
  for (cnt = 0; cnt < SAMPLES; cnt++) {
    float ACS_Value = analogRead(ACS_Pin);
    if (ACS_Value > High_peak) High_peak = ACS_Value;
    if (ACS_Value < Low_peak) Low_peak = ACS_Value;
  }
  Amps_Peak_Peak = High_peak - Low_peak;
}

Fonctionne pour sinusoïde pure (variateur au max). Échoue avec variateur bas : multimètre 0,21A vs code 0,36A. La méthode crête-à-crête ne convient qu'aux signaux sinusoïdaux.

Test 3 : Vrai TRMS pour tout signal (Bibliothèque Filters)

Bibliothèque requise

Filters.h – téléchargeable via le lien du tutoriel. Utilise des méthodes statistiques (fenêtre glissante, sigma).

Code 3 : TRMS sur moniteur série

#include 
#define ACS_Pin A0
float testFrequency = 50;
float windowLength = 40.0 / testFrequency;
float intercept = 0;      // À calibrer
float slope = 0.0752;     // À calibrer
float Amps_TRMS, ACS_Value;
unsigned long printPeriod = 1000, previousMillis = 0;

void setup() {
  Serial.begin(9600);
  pinMode(ACS_Pin, INPUT);
}

void loop() {
  RunningStatistics inputStats;
  inputStats.setWindowSecs(windowLength);
  while (true) {
    ACS_Value = analogRead(ACS_Pin);
    inputStats.input(ACS_Value);
    if (millis() - previousMillis >= printPeriod) {
      previousMillis = millis();
      Amps_TRMS = intercept + slope * inputStats.sigma();
      Serial.print("\t Amps: "); Serial.println(Amps_TRMS);
    }
  }
}

Calibration (intercept & slope)

  1. Affichez inputStats.sigma() à courant nul → ajustez intercept pour lire 0.
  2. Appliquez un courant connu (ex: ampoule 75W / 230V ≈ 0,326A). Calculez slope = courant_réel / valeur_mesurée.

Résultats : correspondance quasi parfaite avec le multimètre, même avec variateur (signal non-linéaire).

Test 4 : Affichage sur LCD I²C ou OLED

Même code TRMS, affichage sur écran.

Code LCD I²C

#include 
#include 
#define ACS_Pin A0
#define I2C_ADDR 0x27
// ... même logique TRMS ...
lcd.setCursor(2,0); lcd.print(Amps_TRMS); lcd.print(" A");

Code OLED 128x32 (Adafruit SSD1306)

#include 
#include 
#include 
// ... même logique TRMS ...
display.setCursor(15,10); display.print(Amps_TRMS); display.println(" A");

L'OLED a été cassé pendant le tournage – seul le test LCD est présenté. Fonctionne identiquement.

Schématiques

Processus de fabrication

  1. Mesurer la qualité de l'air avec OpenSensors : Guide Arduino et Python
  2. Capteur CO2 K30 : Surveillance en temps réel de la qualité de l'air intérieur
  3. Faciliter la communication sourd-aveugle avec 1Sheeld et Arduino
  4. Construire une Tirelire Intelligente : Contrôler un Accepteur de Pièces avec Arduino Nano
  5. Contrôler une LED par Bluetooth avec Arduino et MIT App Inventor
  6. Intégrer un capteur d'empreintes capacitif DFRobot (ID809) avec Arduino ou ESP8266
  7. Station météo interactive Nextion HMI avec Arduino Mega et capteurs
  8. Bras robotique 6 DoF piloté par Nunchuk Wii – Kit Arduino Mega
  9. Animez Votre Poisson Billy Bass avec N'importe Quelle Source Audio – Guide Pas à Pas