Genaue AC-Strommessung mit ACS712 Sensor und Arduino
Komponenten und Materialien
| Komponente | Menge | |
|---|---|---|
| Arduino UNO | 1 | |
| ACS712 Stromsensor (30A Version) | 1 | |
| OLED Display 128x32 I²C oder LCD 16x2 I²C | 1 | Alternative Anzeige |
Projektbeschreibung
Tutorial zur Messung von Wechselstrom (AC) mit dem Hall-Effekt-Sensor ACS712. Der Sensor misst den magnetischen Feld eines stromführenden Leiters berührungslos. Wichtig: Der 30A-Sensor ist für Haushaltsanwendungen (kleine Ströme) ungenau – besser 5A oder 10A Version wählen!
Wichtige Sicherheitswarnung
ACHTUNG: Arbeiten an Netzspannung (230V) sind lebensgefährlich! Nur mit entsprechender Qualifikation und Sicherheitsvorkehrungen durchführen.
Test 1: Signalform visualisieren
Verkabelung: ACS712 VCC→5V, GND→GND, OUT→A0. Last (Glühlampe 75W) in Reihe mit Dimmer und Multimeter.
Code 1 (Serial Plotter): Liest Rohwerte (0-1023) und sendet an Serial Plotter. Zeigt Sinus bei vollem Dimmer, Phasenanschnitt bei gedimmtem Licht.
#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); }
Test 2: Peak-to-Peak Methode (nur Sinus)
Berechnet RMS aus Peak-to-Peak: RMS = (Peak-Peak) × 0.3536 × Kalibrierfaktor. Funktioniert nur bei reinem Sinus. Bei Phasenanschnitt (Dimmer) falsche Werte (z. B. 0,36A statt 0,21A).
#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; Serial.print(Amps_RMS); Serial.print("\t"); Serial.println(Amps_Peak_Peak); delay(200); }
void read_Amps() {
High_peak = 0; Low_peak = 1024;
for(int cnt=0; cnt High_peak) High_peak = val;
if(val < Low_peak) Low_peak = val;
}
Amps_Peak_Peak = High_peak - Low_peak;
}
Test 3: Echte TRMS-Messung (alle Signalformen)
Verwendet Bibliothek Filters.h (statistische Verfahren: Integral, Sigma). Berechnet True RMS unabhängig von Signalform (auch Phasenanschnitt).
Kalibrierung:
- Ohne Strom:
interceptso einstellen, dass Ausgabe 0,00A zeigt. - Mit bekannter Last (z. B. 60W Lampe bei 230V = 0,26A):
slope = Theorie / Gemessen.
#include
#define ACS_Pin A0
float testFrequency = 50;
float windowLength = 40.0 / testFrequency;
float intercept = 0;
float slope = 0.0752; // nach Kalibrierung anpassen!
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);
}
}
}
Test 4: Anzeige auf LCD oder OLED
Gleiche TRMS-Berechnung, Ausgabe auf Display.
LCD I²C (Adresse 0x27)
#include
#include
#define ACS_Pin A0
#define I2C_ADDR 0x27
// ... Pin-Definitionen für LCD ...
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
// ... setup() wie oben, loop() gibt auf LCD aus ...
OLED 128x32 (Adafruit SSD1306)
#include
#include
#include
#define ACS_Pin A0
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// ... setup() initialisiert Display, loop() zeigt TRMS Wert an ...
Schaltpläne
- Grundschaltung: ACS712 an Arduino A0
- LCD I²C Anschluss (SDA/SCL an A4/A5)
- OLED I²C Anschluss (SDA/SCL an A4/A5)
Zusammenfassung
- ACS712 misst berührungslos über Hall-Effekt.
- 30A-Version für kleine Ströme ungenau → 5A/10A besser.
- Peak-to-Peak nur für Sinus, TRMS (Filters.h) für alle Signale.
- Kalibrierung (Intercept + Slope) ist essenziell für Genauigkeit.
- Kombinierbar mit AC-Spannungsmessung (ZMPT101B) für Leistungsmessung.
Herstellungsprozess
- Luftqualität messen mit OpenSensors: Arduino & Python Anleitung
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Kommunikationshilfe für Taubblinde: 1Sheeld + Arduino + Sprachausgabe & Anzeige
- Smartes Sparschwein: Münzprüfer mit Arduino Nano steuern
- LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
- DFRobot Kapazitiver Fingerabdrucksensor mit Arduino oder ESP8266 einbinden
- Interaktives Nextion HMI Projekt mit Arduino Mega und Sensoren
- Arduino-basierter 6-DoF Roboterarm mit Nunchuk-Steuerung
- Billy Bass Fisch mit Audioquelle animieren – Schritt-für-Schritt-Anleitung
- Präzise Solareinstrahlungsmessung mit Arduino UNO & Ethernet Shield