Bauteile · 16 Min. Lesezeit

ACS712 Stromsensor: Gleich- und Wechselstrom mit Arduino messen

ACS712 Stromsensor am Arduino: Empfindlichkeit von 5A/20A/30A, 2,5-V-Nullpunkt, Code für DC und AC (RMS), Leistung berechnen, ESP32-Teiler und INA219.

Der ACS712 Stromsensor ist ein kleines, günstiges Modul, das den Strom in einer Schaltung über den Hall-Effekt erfasst und in eine Spannung umwandelt, die dein Arduino lesen kann. Ohne Strom liegt sein Ausgang bei etwa 2,5 V; fließt der Strom in eine Richtung, steigt die Spannung, fließt er in die andere, sinkt sie. So misst du Gleichstrom (DC) und Wechselstrom (AC) mit einem einzigen Analogpin. Typische Anwendungen: sehen, wie viel Strom ein Motor zieht, die Entladung eines Akkus verfolgen, erkennen, ob ein Gerät läuft, oder die Leistung eines Haushaltsgeräts berechnen. Außerdem ist der gemessene Strompfad galvanisch von der Arduino-Seite getrennt.

In dieser Anleitung lernst du Schritt für Schritt, was im ACS712 steckt, wie sich die Modelle 5A, 20A und 30A unterscheiden und welches du wählen solltest, wie du das Modul in Reihe in deine Schaltung einbaust, den ersten Arduino-Sketch zur Gleichstrommessung, wie du zappelnde Werte per Mittelwertbildung beruhigst, wie du bei Wechselstrom den Effektivwert (RMS) berechnest und wie du Leistung (W) und Energie (Wh) ermittelst. Danach siehst du, wie du ihn über einen Spannungsteiler an den ESP32 und den Raspberry Pi Pico mit 3,3 V anschließt, warum du bei Netzspannung sehr vorsichtig sein musst und warum der INA219 für kleine Ströme die bessere Wahl ist.

ACS712 Stromsensor-Modul (20-A-Version)
ACS712-Modul: Die Aufschrift ELC-20A auf dem Chip zeigt die 20-Ampere-Version. Die grüne Schraubklemme kommt in Reihe in den zu messenden Stromkreis, die Pins VCC, OUT und GND gehen zum Arduino.

Was ist der ACS712 Stromsensor und wie funktioniert er?

Der ACS712 ist ein Chip mit 8 Pins von Allegro. Der gemessene Strom fließt durch einen dicken Kupferpfad im Inneren, von Pin 1 und 2 zu Pin 3 und 4. Dieser Pfad hat nur 1,2 mΩ Widerstand; selbst bei 10 A fallen nur 12 mV ab und es entstehen 0,12 W Wärme, deine Schaltung wird also kaum beeinflusst. Der Strom erzeugt um diesen Leiter ein Magnetfeld, das proportional zum Strom ist. Ein Hall-Sensor direkt über dem Kupferpfad erfasst dieses Feld, und ein Verstärker im Chip macht daraus eine Spannung. Mehr zu den Grundlagen findest du in unserem Artikel über Hall-Sensoren.

Zwischen dem stromführenden Kupferpfad und der Versorgungsseite des Chips gibt es keine elektrische Verbindung; die einzige Kopplung ist das Magnetfeld. Deshalb sind Messkreis und Arduino voneinander getrennt (galvanische Trennung). Die Ausgangsspannung folgt dieser Formel: Vout = VCC / 2 + Empfindlichkeit × I. Fließt der Strom von IP+ nach IP−, steigt der Ausgang über 2,5 V, in Gegenrichtung fällt er darunter. Der ACS712 ist außerdem ratiometrisch: Nullpunkt und Empfindlichkeit ändern sich mit der Versorgungsspannung. Sinkt sie auf 4,8 V, liegt der Nullpunkt bei 2,4 V und die Empfindlichkeit des 5A-Modells fällt von 185 auf etwa 178 mV/A.

MerkmalWert
Versorgungsspannung4,5–5,5 V (typisch 5 V)
StromaufnahmeTypisch 10 mA, max. 13 mA
Ausgang bei 0 AVCC × 0,5 (2,5 V bei 5 V)
Leiterwiderstand1,2 mΩ
Bandbreite80 kHz (mit dem Kondensator am FILTER-Pin verringert)
Gesamtfehler±1,5 % bei 25 °C
Isolationsfestigkeit2,4 kV RMS (60 Sekunden)
AusgangslastMindestens 4,7 kΩ, höchstens 10 nF
Kurzzeitiger Überstrom100 A (ein Impuls, 100 ms)
Betriebstemperatur−40 bis 85 °C
ModulanschlüsseVCC, OUT, GND und 2-polige Schraubklemme

Modelle 5A, 20A und 30A: Empfindlichkeit und Auflösung

Den ACS712 gibt es in drei Versionen, die von außen völlig gleich aussehen. Welche du hast, verrät die Aufschrift auf dem Chip: ELC-05B misst ±5 A, ELC-20A ±20 A und ELC-30A ±30 A. Die Empfindlichkeit gibt an, um wie viele Millivolt sich der Ausgang pro 1 A Strom ändert. Je größer der Messbereich, desto kleiner die Empfindlichkeit, damit der Ausgang bei den Modellen 20A und 30A auch beim Maximalstrom zwischen 0,5 und 4,5 V bleibt. Die Tabelle zeigt außerdem, wie viel Milliampere ein Schritt des 10-Bit-ADC des Uno (4,88 mV) beim jeweiligen Modell entspricht.

Modell (Chip-Aufschrift)MessbereichEmpfindlichkeitAusgang bei Vollausschlag1 ADC-Schritt am UnoRauschen (47-nF-Filter)
ACS712ELCTR-05B±5 A185 mV/A (180–190)1,58–3,43 V≈ 26 mA21 mV ≈ 0,11 A Spitze-Spitze
ACS712ELCTR-20A±20 A100 mV/A (96–104)0,50–4,50 V≈ 49 mA11 mV ≈ 0,11 A Spitze-Spitze
ACS712ELCTR-30A±30 A66 mV/A (63–69)0,52–4,48 V≈ 74 mA7 mV ≈ 0,11 A Spitze-Spitze

Aus der Tabelle folgen zwei wichtige Punkte. Erstens liegt das Rauschen in Ampere bei allen drei Modellen bei etwa 0,1 A; nimmst du das 30A-Modell für eine 2-A-Last, verschenkst du zwei Drittel der Auflösung. Die Regel ist einfach: Wähle das kleinste Modell, das den höchsten zu messenden Strom (bei AC den Spitzenwert) sicher abdeckt. Für einen 12-V-Gleichstrommotor mit höchstens 2–3 A passt zum Beispiel das 5A-Modell, für einen 1500-W-Heizlüfter das 20A-Modell. Zweitens ist der ACS712 nicht für kleine Ströme gedacht: Eine LED mit wenigen Milliampere oder einen ESP32 im Tiefschlaf kannst du damit nicht messen. Dafür ist der INA219 am Ende dieser Anleitung viel besser.

ACS712 anschließen: Arduino Uno, ESP32 und Pico

Das ACS712-Modul hat zwei Seiten. Die Seite mit der Schraubklemme gehört zum Messkreis: Der Strom muss an einer Klemme hinein- und an der anderen hinausfließen, das Modul wird also wie ein Amperemeter in Reihe zur Last geschaltet. Meist trennst du die Plusleitung der Stromversorgung auf, führst das Ende vom Netzteil an die eine Seite der Klemme und das Ende zur Last an die andere. Die dreipolige Seite geht zum Arduino. Der ACS712 arbeitet nur mit 5 V; auch am ESP32 und Pico versorgst du das Modul aus einem 5-V-Pin und liest den Ausgang über einen Spannungsteiler.

ACS712-PinArduino UnoESP32Raspberry Pi Pico
VCC5V5V (bei manchen Boards VIN)VBUS (Pin 40)
OUTA0GPIO 34 (über 10k/20k-Teiler)GP26 (über 10k/20k-Teiler)
GNDGNDGNDGND
SchraubklemmeIn Reihe zur LastIn Reihe zur LastIn Reihe zur Last
Schließe die beiden Schraubklemmen niemals zwischen Plus und Minus einer Stromquelle an, also parallel wie ein Voltmeter. Der innere Leiter hat nur 1,2 mΩ, das ist ein glatter Kurzschluss: Die Quelle liefert so viel Strom, wie sie kann, Akku oder Netzteil nehmen Schaden, Kabel und Modul können durchbrennen. Der gemessene Strom muss immer durch eine Last fließen (Motor, Lampe oder Widerstand).

Außer dem Chip sitzen nur wenige Bauteile auf dem Modul: ein Abblockkondensator an der Versorgung, ein kleiner Kondensator am FILTER-Pin, der die Bandbreite festlegt, die Power-LED (D1) und ihr Vorwiderstand (R1). Die Aufschrift 102 auf R1 bedeutet 1 kΩ; solche Codes entschlüsselst du bequem mit dem SMD-Code-Rechner. Weil der ACS712 galvanisch getrennt ist, musst du den Minuspol des Messkreises nicht mit dem GND des Arduino verbinden, wenn du nur Strom misst.

Schritt für Schritt: Gleichstrom mit dem Arduino messen

  1. Verbinde VCC des Moduls mit dem 5V-Pin des Arduino, GND mit GND und OUT mit A0. Die Power-LED auf der Platine sollte leuchten.
  2. Trenne die Plusleitung des zu messenden Stromkreises auf: Das Ende vom Netzteil kommt an eine Seite der Klemme, das Ende zur Last (z. B. ein 12-V-Motor oder LED-Streifen) an die andere.
  3. Lass die Stromversorgung der Last ausgeschaltet und lade den Sketch unten hoch. Er misst beim Start den Nullpunkt, während kein Strom fließt.
  4. Öffne den seriellen Monitor mit 9600 Baud; ohne Strom sollte der Wert bei etwa 0,00 A liegen und höchstens um einige Hundertstel Ampere schwanken.
  5. Schalte die Versorgung der Last ein. Ist der Strom negativ, tausche die beiden Kabel an der Klemme oder multipliziere das Ergebnis mit −1.
  6. Passe SENSITIVITY im Code an dein Modell an: 0.185 für 5A, 0.100 für 20A und 0.066 für 30A.
C++ (Arduino IDE)
1// ACS712 ile DC akım ölçme / DC current measurement with ACS712
2const int SENSOR_PIN = A0;            // ACS712 OUT pini / ACS712 OUT pin
3const float SENSITIVITY = 0.185;      // V/A: 5A=0.185, 20A=0.100, 30A=0.066
4const float ADC_STEP = 5.0 / 1024.0;  // bir ADC basamağı (V) / one ADC step (V)
5const int SAMPLES = 200;              // ortalama için örnek sayısı / samples to average
6
7float zeroRaw = 512.0;                // akım yokken ham değer / raw value at zero current
8
9// SAMPLES kez okuyup ortalamayı döndürür / reads SAMPLES times and returns the average
10float readAverageRaw() {
11  long sum = 0;
12  for (int i = 0; i < SAMPLES; i++) {
13    sum += analogRead(SENSOR_PIN);
14  }
15  return sum / (float)SAMPLES;
16}
17
18void setup() {
19  Serial.begin(9600);
20  delay(500);                         // sensörün oturmasını bekle / let the sensor settle
21  zeroRaw = readAverageRaw();         // yük KAPALIYKEN sıfır noktası / zero point with the load OFF
22  Serial.print(F("Sifir noktasi / Zero point: "));
23  Serial.print(zeroRaw * ADC_STEP, 3);
24  Serial.println(F(" V"));
25}
26
27void loop() {
28  float raw = readAverageRaw();
29  float current = (raw - zeroRaw) * ADC_STEP / SENSITIVITY;  // amper / amps
30
31  Serial.print(F("Akim / Current: "));
32  Serial.print(current, 2);
33  Serial.println(F(" A"));
34  delay(500);
35}

Für jede Messung mittelt der Sketch 200 analogRead-Ergebnisse; da ein analogRead am Uno etwa 0,11 ms dauert, sind das rund 22 ms. Der Strom ergibt sich aus I = (Rohwert − Null) × (5 / 1024) / Empfindlichkeit. Beispiel: Beim 5A-Modell mit Nullpunkt 512 und einem Mittelwert von 550 beträgt der Unterschied 38 Schritte; das sind 38 × 4,88 mV = 185,5 mV, also 185,5 / 185 ≈ 1,00 A. Den Nullpunkt beim Start zu messen, statt 2,5 V anzunehmen, ist wichtig, denn der Eigen-Offset des Chips und kleine Unterschiede auf der Masseleitung verschieben ihn um einige Schritte, und dieser Fehler steckt sonst in jeder Messung.

Ändere beim Auslesen des ACS712 am Arduino Uno die Referenz nicht, etwa mit analogReference(INTERNAL), sondern nutze die Standardreferenz von 5 V. Weil der ACS712 ratiometrisch ist, schrumpfen Sensorausgang und ADC-Referenz im gleichen Verhältnis, selbst wenn die USB-Spannung auf 4,8 V fällt; die Rohwerte bleiben gleich und die 5.0 im Code stimmt von selbst. ESP32 und Pico haben diesen Vorteil nicht, weil ihre ADC-Referenz unabhängig von der Versorgung ist; dort korrigieren wir das gleich anhand des Nullpunkts.

Rauschen und Mittelwertbildung

Der Ausgang des ACS712 zappelt auch bei konstantem Strom ständig. Der erste Grund ist das Eigenrauschen des Hall-Sensors: Der Hersteller gibt die Rauschwerte oben mit 47 nF am FILTER-Pin an, also bei etwa 2 kHz Bandbreite. Die meisten Module haben dort jedoch wie die Beispielschaltung des Herstellers nur 1 nF; die Bandbreite steigt auf 80 kHz und das Rauschen ist um ein Mehrfaches höher. Der zweite Grund ist der ADC: Selbst beim 5A-Modell misst der Uno in Schritten von 26 mA, und der letzte Schritt springt immer hin und her. Zufälliges Rauschen sinkt mit der Quadratwurzel der Anzahl gemittelter Werte: 16 Messungen drücken es auf ein Viertel, 256 auf ein Sechzehntel. Weitere Filtermethoden findest du im Artikel Sensordaten filtern.

  • Mittelwert aus vielen Messungen: Mittele bei Gleichstrom 100–500 Werte. Verteilst du sie auf 20 ms, hebt sich auch das 50-Hz-Brummen aus dem Netz im Mittel auf.
  • Exponentieller gleitender Mittelwert: Mische jeden neuen Wert mit filter = filter + 0,1 × (neu − filter) in den alten; das braucht kaum Speicher und liefert eine ruhige Anzeige.
  • Totzone: Willst du ohne Last keine Werte wie 0,03 A sehen, setze Ergebnisse mit einem Betrag unter 0,05 A auf 0.
  • Hardwarefilter: Wenn du löten kannst, setze parallel zum Kondensator am FILTER-Pin 47 nF ein und senke die Bandbreite so auf etwa 2 kHz; für Gleichstrom und 50-Hz-Netzstrom reicht das völlig.
  • Abstand zu Magnetfeldern: Der ACS712 ist ein Hall-Sensor; ein Magnet, Lautsprecher oder ein anderes Kabel mit hohem Strom in der Nähe verfälscht die Messung.
  • Nullpunkt auffrischen: Der Nullpunkt driftet mit der Temperatur um einige Millivolt; miss ihn in lang laufenden Projekten bei ausgeschalteter Last neu.
Digitalmultimeter mit Messleitungen
Zum Kalibrieren des ACS712 schaltest du ein Multimeter im Strommessbereich in Reihe in dieselbe Leitung und vergleichst beide Messwerte.

Mittelwertbildung beseitigt Rauschen, aber keinen systematischen Fehler. Die Empfindlichkeit kann von Chip zu Chip um einige Prozent abweichen; beim 5A-Modell liegt sie zwischen 180 und 190 mV/A. Für die beste Genauigkeit schaltest du ein Multimeter im Strombereich in Reihe in dieselbe Leitung wie den ACS712, lässt einen bekannten Strom von etwa 1–2 A fließen und vergleichst beide Werte. Zeigt das Multimeter 2,00 A und der Arduino 1,94 A, ist dein Korrekturfaktor 2,00 / 1,94 = 1,031; teile SENSITIVITY im Code durch diese Zahl (0,185 / 1,031 ≈ 0,179), dann stimmt deine Messung mit dem Multimeter überein.

Wechselstrom messen: Effektivwert (RMS) berechnen

Netzstrom wechselt ständig die Richtung; in Deutschland und Europa mit 50 Hz, in den USA mit 60 Hz. Deshalb zeichnet der Ausgang des ACS712 eine Sinuskurve um 2,5 V, deren Mittelwert dem Strom null entspricht; lässt du den Gleichstrom-Sketch an einer Wechselstromlast laufen, bekommst du sinnlose Werte nahe 0 A. Bei Wechselstrom zählt der Effektivwert (RMS): Er entspricht dem Gleichstrom, der dieselbe Wärme erzeugt, und ist der Wert, den Multimeter, Sicherungen und Typenschilder verwenden. Die Rechnung folgt dem Namen Root Mean Square: Ziehe von jeder Messung den Nullpunkt ab, quadriere sie (Square), bilde den Mittelwert der Quadrate (Mean) und ziehe die Wurzel (Root).

Die Länge des Messfensters ist wichtig; enthält es keine ganze Zahl von Perioden, schwankt das Ergebnis jedes Mal etwas. Eine Periode dauert bei 50 Hz 20 ms, bei 60 Hz 16,7 ms. Ein Fenster von 100 ms enthält bei 50 Hz genau 5 und bei 60 Hz genau 6 Perioden und funktioniert daher in beiden Netzen; der Uno nimmt in dieser Zeit etwa 900 Messwerte auf. Bei einem reinen Sinus ist der Spitzenwert 1,414-mal so groß wie der Effektivwert, man könnte also auch den Spitzenwert durch √2 teilen. Lasten wie Handyladegeräte, LED-Lampen oder Dimmer ziehen aber spitze, nicht sinusförmige Ströme, und diese Abkürzung liegt dann daneben; der Sketch unten berechnet den echten Effektivwert (True RMS) und ist bei solchen Lasten viel genauer. Der Spitzenwert muss im Messbereich des Modells bleiben:

ModellGrenze SpitzenstromMax. Wechselstrom (RMS, Sinus)Ungefähre Leistung bei 230 V
5A±5 A3,5 A≈ 800 W
20A±20 A14,1 A≈ 3250 W
30A±30 A21,2 A≈ 4900 W
C++ (Arduino IDE)
1// ACS712 ile AC akım (RMS) ve görünür güç / AC current (RMS) and apparent power with ACS712
2const int SENSOR_PIN = A0;
3const float SENSITIVITY = 0.100;      // 20A modül: 100 mV/A / 20A module: 100 mV/A
4const float ADC_STEP = 5.0 / 1024.0;
5const unsigned long WINDOW_MS = 100;  // 50 Hz'te 5, 60 Hz'te 6 tam periyot / 5 cycles at 50 Hz, 6 at 60 Hz
6const float MAINS_VOLTAGE = 230.0;    // şebeke gerilimi (V) / mains voltage (V)
7
8float noiseRms = 0.0;                 // yük yokken ölçülen gürültü (A) / noise measured with no load (A)
9
10// Pencere boyunca örnek alır, ortalamayı çıkarıp RMS hesaplar / samples over the window, removes the mean, returns RMS
11float readRmsAmps() {
12  long sum = 0;
13  unsigned long sumSq = 0;
14  unsigned int n = 0;
15  unsigned long start = millis();
16  while (millis() - start < WINDOW_MS) {
17    int d = analogRead(SENSOR_PIN) - 512;  // 2,5 V'u sıfıra yaklaştır / shift 2.5 V to about zero
18    sum += d;
19    sumSq += (long)d * d;
20    n++;
21  }
22  float mean = sum / (float)n;                       // sıfır noktası kayması / zero point offset
23  float variance = sumSq / (float)n - mean * mean;   // yalnız AC kısım / AC part only
24  if (variance < 0) variance = 0;
25  return sqrt(variance) * ADC_STEP / SENSITIVITY;
26}
27
28void setup() {
29  Serial.begin(9600);
30  delay(500);
31  noiseRms = readRmsAmps();           // ilk ölçüm yük KAPALIYKEN / first reading with the load OFF
32  Serial.print(F("Gurultu / Noise: "));
33  Serial.print(noiseRms, 3);
34  Serial.println(F(" A"));
35}
36
37void loop() {
38  float irms = readRmsAmps();
39  float sq = irms * irms - noiseRms * noiseRms;  // gürültüyü karesel çıkar / subtract noise in quadrature
40  irms = (sq > 0) ? sqrt(sq) : 0.0;
41  float apparentPower = MAINS_VOLTAGE * irms;     // VA; dirençli yükte ≈ W / VA; ≈ W for resistive loads
42
43  Serial.print(F("Irms: "));
44  Serial.print(irms, 3);
45  Serial.print(F(" A   Guc / Power: "));
46  Serial.print(apparentPower, 1);
47  Serial.println(F(" VA"));
48  delay(1000);
49}

Dieser Sketch speichert den Nullpunkt nicht als feste Zahl, sondern bestimmt in jedem Fenster den Mittelwert der Messungen und zieht ihn ab. Mathematisch ist das die Wurzel der Varianz: RMS² = Mittelwert der Quadrate − Quadrat des Mittelwerts. Da Wechselstrom über ganze Perioden im Mittel null ist, entspricht der gefundene Mittelwert genau dem Nullpunktfehler und wird automatisch korrigiert, auch wenn er mit der Temperatur driftet. Das beim Start ohne Last gemessene Rauschen wird quadratisch abgezogen, denn Rauschen und echter Strom sind unabhängig und Effektivwerte addieren sich über ihre Quadrate. Ohne diesen Schritt sähest du ohne angeschlossene Last Geisterwerte wie 0,1 A und 23 VA. Ein Beispiel: Ein 1000-W-Bügeleisen zieht bei 230 V etwa 4,35 A; sein Spitzenwert von 6,1 A überschreitet den Bereich des 5A-Modells, also miss es mit dem 20A-Modell.

Netzspannung ist lebensgefährlich. Die Isolation im ACS712-Chip ist stark (2,4 kV RMS Prüfspannung), aber auf billigen Modulen liegen die Schrauben der Klemme und die Lötstellen auf der Unterseite auf Netzpotenzial und sind offen zugänglich. Verdrahte nur bei gezogenem Netzstecker, setze das Modul in ein geschlossenes Kunststoffgehäuse, sichere die Leitung ab und berühre nichts, solange Spannung anliegt. Wenn der Arduino dabei per USB am Computer hängt, ist bei einem Fehler auch dein Computer in Gefahr; Ergebnisse auf einem Display anzuzeigen oder per ESP32 drahtlos zu senden ist sicherer. Arbeite ohne Erfahrung mit Netzinstallationen nicht allein an diesem Versuch; als Schüler nur gemeinsam mit einem Erwachsenen, der sich mit Elektrik auskennt.

Viel sicherer misst du den Strom eines Haushaltsgeräts mit einem aufklappbaren Stromwandler wie dem SCT-013, für den du kein Kabel auftrennen musst. Er wird wie eine Stromzange um das Kabel gelegt und hat keinerlei metallischen Kontakt zum Netz. Wichtig ist nur, dass die Zange nur den Außenleiter oder nur den Neutralleiter umschließt; legst du sie um beide, heben sich die Felder der entgegengesetzten Ströme auf und das Ergebnis ist null. Stromwandler messen nur Wechselstrom; für Gleichstrom brauchst du den ACS712 oder den INA219.

Leistung (W) und Energie (Wh) berechnen

Kennst du den Strom, ist die Leistung nur eine Multiplikation: P = U × I. Versorgt ein 12-V-Akku einen Motor mit 1,5 A, beträgt die Leistung 12 × 1,5 = 18 W; nachrechnen kannst du das mit dem Ohmsches-Gesetz-Rechner. Energie ist Leistung mal Zeit: Läuft der 18-W-Motor 2 Stunden, verbraucht er 36 Wh. Der Sketch multipliziert dazu bei jeder Messung die Leistung mit der vergangenen Zeit und summiert auf. Zur Spannungsmessung kannst du das als 0–25-V-Spannungssensor verkaufte Modul nehmen; es enthält einen Spannungsteiler aus 30 kΩ und 7,5 kΩ und teilt die Eingangsspannung durch 5. Möchtest du einen Teiler mit eigenen Widerstandswerten auslegen, nutze den Spannungsteiler-Rechner.

C++ (Arduino IDE)
1// ACS712 + gerilim sensörü ile güç (W) ve enerji (Wh) / power (W) and energy (Wh) with ACS712 + voltage sensor
2const int CURRENT_PIN = A0;           // ACS712 OUT
3const int VOLTAGE_PIN = A1;           // 0-25 V gerilim sensörü S pini / 0-25 V voltage sensor S pin
4const float SENSITIVITY = 0.185;      // 5A modül / 5A module (V/A)
5const float DIVIDER_RATIO = 5.0;      // (30k + 7,5k) / 7,5k = 5 / divider ratio
6const float ADC_STEP = 5.0 / 1024.0;
7const int SAMPLES = 200;
8
9float zeroRaw = 512.0;
10float energyWh = 0.0;                 // biriken enerji / accumulated energy
11unsigned long lastMs = 0;
12
13float averageRaw(int pin) {
14  long sum = 0;
15  for (int i = 0; i < SAMPLES; i++) sum += analogRead(pin);
16  return sum / (float)SAMPLES;
17}
18
19void setup() {
20  Serial.begin(9600);
21  delay(500);
22  zeroRaw = averageRaw(CURRENT_PIN);  // yük kapalıyken sıfır noktası / zero point with the load off
23  lastMs = millis();
24}
25
26void loop() {
27  float current = (averageRaw(CURRENT_PIN) - zeroRaw) * ADC_STEP / SENSITIVITY;
28  float voltage = averageRaw(VOLTAGE_PIN) * ADC_STEP * DIVIDER_RATIO;
29  float power = voltage * current;    // P = V x I (W)
30
31  unsigned long now = millis();
32  energyWh += power * (now - lastMs) / 3600000.0;  // W x saat = Wh / W x hours = Wh
33  lastMs = now;
34
35  Serial.print(voltage, 2);  Serial.print(F(" V   "));
36  Serial.print(current, 2);  Serial.print(F(" A   "));
37  Serial.print(power, 1);    Serial.print(F(" W   "));
38  Serial.print(energyWh, 3); Serial.println(F(" Wh"));
39  delay(1000);
40}

Weil das Spannungsmodul zwischen Plus und Minus des Messkreises hängt, müssen diesmal der Minuspol des Kreises und der GND des Arduino verbunden sein; warum, erfährst du im Artikel über gemeinsame Masse. Um abzuschätzen, wie viele Stunden ein Akku hält, kombinierst du den gemessenen Durchschnittsstrom mit den Rechnungen zu mAh und Wh oder mit dem Akkulaufzeit-Rechner. Bei Wechselstrom ist es etwas anders: Urms × Irms ist die Scheinleistung in VA; die Wirkleistung (W) ist diese mal dem Leistungsfaktor. Bei ohmschen Lasten wie Wasserkocher, Bügeleisen und Glühlampe liegt der Leistungsfaktor sehr nahe bei 1, VA ≈ W ist also in Ordnung. Bei Motoren, Netzteilen und LED-Lampen kann er zwischen 0,5 und 0,9 liegen; für die echte Wirkleistung musst du gleichzeitig auch die Spannungskurve abtasten, wofür galvanisch getrennte Spannungssensor-Module wie der ZMPT101B verwendet werden.

ACS712 am ESP32: Auslesen über einen Spannungsteiler

Der ESP32 arbeitet mit 3,3 V, und seine Analogeingänge messen bis etwa 3,1 V; mehr als 3,6 V an einem Pin können das Board beschädigen. Der ACS712 läuft dagegen nur mit 5 V, und sein Ausgang erreicht bei den Modellen 20A und 30A 4,5 V, bei Überstrom fast 5 V. Deshalb versorgst du den Sensor aus dem 5V-Pin des ESP32-Boards (bei manchen Boards VIN) und führst OUT über einen Spannungsteiler. 10 kΩ + 20 kΩ ist eine gute Wahl: von OUT über 10 kΩ zum ESP32-Pin und vom selben Punkt über 20 kΩ nach GND. Das Teilerverhältnis beträgt 20 / 30 = 0,667, und die Summe von 30 kΩ erfüllt die Mindestlast des ACS712 von 4,7 kΩ locker.

ACS712-AusgangBedeutungSpannung am ESP32-Pin
0,50 V−20 A beim 20A-Modell0,33 V
2,50 VKein Strom1,67 V
4,50 V+20 A beim 20A-Modell3,00 V
5,00 VSättigung bei Überstrom3,33 V

Im Code stecken zwei Details. Erstens ist der ADC des ESP32 an den Rändern nicht linear; statt Rohwerten verwenden wir deshalb analogReadMilliVolts(), das die bei der Fertigung im Chip gespeicherten Kalibrierdaten nutzt. GPIO 34 gehört zu ADC1 und funktioniert auch bei aktivem WLAN; ADC2-Pins sind zusammen mit WLAN nicht nutzbar. Zweitens fehlt hier der ratiometrische Vorteil des Uno: Die ADC-Referenz des ESP32 ist fest, die Empfindlichkeit des ACS712 hängt aber von den 5 V aus dem USB ab. Die Lösung ist ein einfacher Trick: Da der Ausgang ohne Strom genau VCC / 2 beträgt, multiplizierst du den beim Start gemessenen Nullpunkt mit 2, erhältst die tatsächliche Versorgungsspannung des Sensors und korrigierst die Empfindlichkeit entsprechend. Weil derselbe Fehler im Nullpunkt und im Messsignal steckt, gleicht diese Methode auch die Toleranz der Teilerwiderstände aus. Der Sketch tastet 100 ms lang ab und liefert zwei Ergebnisse: Bei einer Gleichstromlast zählt die erste Zahl, bei einem Netzgerät die zweite.

C++ (Arduino IDE)
1// ESP32 + ACS712 (10k/20k gerilim bölücüyle) / ESP32 + ACS712 (with a 10k/20k voltage divider)
2const int SENSOR_PIN = 34;            // ADC1_CH6, Wi-Fi açıkken de çalışır / works while Wi-Fi is on
3const float DIVIDER = 20.0 / 30.0;    // R2 / (R1 + R2) = 20k / 30k
4const float SENS_AT_5V = 185.0;       // mV/A: 5A=185, 20A=100, 30A=66
5const unsigned long WINDOW_MS = 100;  // 50 Hz'te 5 tam periyot / 5 full cycles at 50 Hz
6
7float zeroMv = 2500.0;                // akım yokken sensör çıkışı (mV) / sensor output at zero current (mV)
8float sensMv = SENS_AT_5V;            // düzeltilmiş hassasiyet (mV/A) / corrected sensitivity (mV/A)
9
10// Bölücüden önceki gerilimin ortalaması (mV) / average voltage before the divider (mV)
11float averageMv(int samples) {
12  uint32_t sum = 0;
13  for (int i = 0; i < samples; i++) sum += analogReadMilliVolts(SENSOR_PIN);
14  return sum / (float)samples / DIVIDER;
15}
16
17// Pencere boyunca okur: DC (ortalama) ve AC (RMS) akım / reads over the window: DC (mean) and AC (RMS) current
18void measure(float &dcAmps, float &acAmps) {
19  double sum = 0, sumSq = 0;
20  uint32_t n = 0;
21  uint32_t start = millis();
22  while (millis() - start < WINDOW_MS) {
23    double d = analogReadMilliVolts(SENSOR_PIN) / DIVIDER - zeroMv;
24    sum += d;
25    sumSq += d * d;
26    n++;
27  }
28  double mean = sum / n;
29  double variance = sumSq / n - mean * mean;
30  if (variance < 0) variance = 0;
31  dcAmps = mean / sensMv;
32  acAmps = sqrt(variance) / sensMv;
33}
34
35void setup() {
36  Serial.begin(115200);
37  analogReadResolution(12);
38  delay(500);
39  zeroMv = averageMv(1000);                    // yük KAPALIYKEN / with the load OFF
40  sensMv = SENS_AT_5V * (2.0 * zeroMv) / 5000.0;  // oransal düzeltme: VCC = 2 x sıfır / ratiometric fix: VCC = 2 x zero
41  Serial.printf("Sifir / Zero: %.0f mV  Hassasiyet / Sensitivity: %.1f mV/A\n", zeroMv, sensMv);
42}
43
44void loop() {
45  float dc, ac;
46  measure(dc, ac);
47  Serial.printf("DC: %.2f A   AC (RMS): %.2f A\n", dc, ac);
48  delay(1000);
49}

ACS712 am Raspberry Pi Pico mit MicroPython

Auch der Raspberry Pi Pico läuft mit 3,3 V, die Verdrahtung entspricht also der des ESP32: VCC des ACS712 an VBUS (Pin 40), der bei USB-Versorgung 5 V liefert, und OUT über denselben 10k/20k-Teiler an GP26 (ADC0, Pin 31). In MicroPython liefert read_u16() Werte von 0 bis 65535, und es gilt Spannung = Rohwert × 3,3 / 65535. Der ADC des Pico hat 12 Bit; zusammen mit dem Teiler misst er beim 5A-Modell auf dem Papier in Schritten von etwa 6,5 mA, also rund viermal feiner als der Uno. Der Code unten misst beim Start den Nullpunkt, wendet die ratiometrische Korrektur an und gibt dann jede Sekunde den Gleichstrom und den Effektivwert des Wechselstroms aus.

MicroPython
1from machine import ADC
2import time
3import math
4
5adc = ADC(26)            # GP26 = ADC0, fiziksel pin 31 / physical pin 31
6VREF = 3.3               # ADC referansı (V) / ADC reference (V)
7DIVIDER = 20 / 30        # 10k/20k bölücü oranı / 10k/20k divider ratio
8SENS_AT_5V = 0.185       # V/A: 5A=0.185, 20A=0.100, 30A=0.066
9
10
11def read_volts(samples=200):
12    # bölücüden önceki ortalama gerilim / average voltage before the divider
13    total = 0
14    for _ in range(samples):
15        total += adc.read_u16()          # 0-65535
16    return total / samples * VREF / 65535 / DIVIDER
17
18
19zero = read_volts(1000)                  # yük KAPALIYKEN / with the load OFF
20sens = SENS_AT_5V * (2 * zero) / 5.0     # oransal düzeltme / ratiometric correction
21print("Sifir / Zero: {:.3f} V".format(zero))
22
23
24def read_rms(window_ms=100):
25    # 100 ms = 50 Hz'te 5 periyot / 5 cycles at 50 Hz
26    n = 0
27    s = 0.0
28    s2 = 0.0
29    start = time.ticks_ms()
30    while time.ticks_diff(time.ticks_ms(), start) < window_ms:
31        v = adc.read_u16() * VREF / 65535 / DIVIDER - zero
32        s += v
33        s2 += v * v
34        n += 1
35    mean = s / n
36    return math.sqrt(max(s2 / n - mean * mean, 0)) / sens
37
38
39while True:
40    dc = (read_volts() - zero) / sens
41    print("DC: {:.2f} A   AC (RMS): {:.2f} A".format(dc, read_rms()))
42    time.sleep(1)

ACS712 oder INA219?

Der INA219 ist ein Strom- und Spannungsmess-Chip von Texas Instruments, der über I2C kommuniziert. Statt des Hall-Effekts misst er den Spannungsabfall an einem kleinen Shunt-Widerstand (auf Modulen meist 0,1 Ω), durch den der Strom fließt. Verbreitete Module messen bis ±3,2 A mit einer Auflösung von etwa 0,8 mA, lesen die Busspannung bis 26 V selbst und berechnen die Leistung im Chip. Über eine einzige I2C-Verbindung bekommst du also Spannung, Strom und Leistung zusammen, ohne dich um ADC, Mittelwert oder Nullpunktkalibrierung zu kümmern. Dafür gibt es keine galvanische Trennung zwischen Messkreis und Arduino, Wechselstrom kann er nicht messen, und über 26 V ist Schluss.

MerkmalACS712INA219-Modul
MessprinzipHall-Effekt (magnetisch)Shunt-Widerstand (0,1 Ω)
Strombereich±5 / ±20 / ±30 A±3,2 A (abhängig vom Shunt)
Auflösung26–74 mA mit dem Uno≈ 0,8 mA
WechselstromJaNein
Spannung und LeistungNein (separater Teiler nötig)Ja (bis 26 V)
Galvanische TrennungJaNein
SchnittstelleAnalogausgangI2C (Adresse 0x40–0x4F)
VersorgungNur 5 V3–5,5 V
Ideal fürMotoren, Heizungen, Netzgeräte, hohe StrömeAkkus, Solarmodule, Verbrauch von Sensoren und Boards
C++ (Arduino IDE)
1#include <Wire.h>
2#include <Adafruit_INA219.h>
3
4Adafruit_INA219 ina219;               // varsayılan adres 0x40 / default address 0x40
5
6void setup() {
7  Serial.begin(9600);
8  if (!ina219.begin()) {
9    Serial.println(F("INA219 bulunamadi / INA219 not found"));
10    while (true) delay(10);
11  }
12  // ina219.setCalibration_16V_400mA();  // küçük akımda daha ince çözünürlük / finer resolution for small currents
13}
14
15void loop() {
16  float busV = ina219.getBusVoltage_V();        // yük tarafındaki gerilim / voltage on the load side
17  float current_mA = ina219.getCurrent_mA();    // akım (mA) / current (mA)
18  float power_mW = ina219.getPower_mW();        // güç (mW) / power (mW)
19
20  Serial.print(busV, 2);       Serial.print(F(" V   "));
21  Serial.print(current_mA, 1); Serial.print(F(" mA   "));
22  Serial.print(power_mW, 0);   Serial.println(F(" mW"));
23  delay(1000);
24}

Installiere für den Code die Bibliothek Adafruit INA219 über den Bibliotheksverwalter. Verbinde SDA und SCL des Moduls am Uno mit A4 und A5; der zu messende Strom muss an VIN+ hinein- und an VIN− zur Last hinausfließen, und der GND des INA219 muss mit dem Messkreis verbunden sein. Kurz gesagt: Für Gleichstrom von wenigen Milliampere bis 3 A samt Spannung nimmst du den INA219; brauchst du größere Ströme, Wechselstrom oder galvanische Trennung, ist der ACS712 die richtige Wahl.

Projektideen mit dem ACS712

  • Überstromschutz für Motoren: Blockiert ein mit dem L298N angesteuerter Gleichstrommotor, schießt der Strom hoch; stoppe den Motor und gib einen Warnton aus, sobald deine Schwelle überschritten ist.
  • Akku- und Solarmonitor: Miss Lade- und Entladestrom samt Richtung, multipliziere mit der Spannung, summiere die Wh und zeige alles auf einem OLED-Display an.
  • Smarte Steckdose: Schalte die Steckdose mit einem Relaismodul, prüfe mit dem ACS712, ob das Gerät wirklich läuft, und sende die Daten per MQTT an Home Assistant.
  • Waschmaschine-fertig-Meldung: Bleibt der Strom einige Minuten unter einem bestimmten Wert, schickt der ESP32 eine Nachricht über Telegram.
  • Trockenlaufschutz für Pumpen: Ist das Wasser alle, sinkt der Strom der Pumpe; erkenne das und schalte die Pumpe ab.
  • Energielogger: Schreibe Strom und Leistung einmal pro Minute auf eine SD-Karte oder in Google Tabellen und zeichne den Tagesverbrauch auf.
  • Leistungsmesser für die Werkbank: Ergänze das Projekt Arduino-Voltmeter um einen ACS712 und baue ein Messgerät, das Spannung, Strom und Leistung auf einem Display zeigt.

Häufige Fehler und Lösungen

SymptomMögliche UrsacheLösung
Zeigt 0,1–0,3 A ohne StromDer Code nimmt den Nullpunkt mit 2,5 V oder 512 anNullpunkt beim Start ohne Last messen und eine kleine Totzone ergänzen
Wert springt ständigEinzelmessungen, große Bandbreite durch 1-nF-Filter100–500 Werte mitteln, bei Bedarf 47 nF an FILTER ergänzen
Strom wird negativ angezeigtStrom fließt andersherum durch die KlemmeKabel tauschen oder Ergebnis mit −1 multiplizieren
Werte nahe 0 A bei WechselstromlastGleichstrom-Code verwendet; ein Sinus ist im Mittel nullDen Sketch mit RMS-Berechnung verwenden
Werte immer einige Prozent zu hoch oder zu niedrigFalscher Modellwert oder Toleranz der EmpfindlichkeitLaut Chip-Aufschrift 0.185, 0.100 oder 0.066 wählen und mit dem Multimeter kalibrieren
Rohwert klebt bei 0 oder 1023OUT am falschen Pin oder an VCC, Strom über dem MessbereichVerdrahtung prüfen, bei Bedarf größeres Modell wählen
Netzteil schaltet ab, Kabel wird heißKlemme parallel zur Quelle angeschlossen (Kurzschluss)Modul in Reihe zur Last schalten
Unstete Werte am ESP32Kein Teiler, ADC2-Pin oder roher analogRead10k/20k-Teiler, GPIO 34 und analogReadMilliVolts verwenden
Wert ändert sich in MagnetnäheDer Hall-Sensor erfasst das äußere MagnetfeldModul von Magneten, Lautsprechern und Leitungen mit hohem Strom fernhalten
Am einfachsten prüfst du deinen Stromsensor mit einer bekannten Last. Ein 10-Ω-Widerstand an 12 V zieht nach dem ohmschen Gesetz 1,2 A und setzt 14,4 W in Wärme um; nimm also einen Leistungswiderstand mit mindestens 20–25 W. Misst du etwa 1,2 A, stimmen Verdrahtung und Code.

Der ACS712 ist ein toller Einstieg in die Strommessung: Mit einem Analogpin misst du Gleich- und Wechselstrom, mit ein paar Zeilen Code auch Leistung und Energie. Wählst du das passende Modell, misst den Nullpunkt, mittelst die Werte und kalibrierst mit einem Multimeter, bekommst du verlässliche Ergebnisse auf wenige Prozent genau. Die Grundlagen der Analogmessung vertiefst du im ADC-Artikel. In der BlueGrays-App findest du Projekte wie analoges Sensorauslesen, ein digitales Voltmeter mit LCD, das Schalten einer Netzlampe per Relais und einen ESP32-Datenlogger, jeweils mit Schaltplan und Code Schritt für Schritt.

Häufige Fragen

Wie viel Ampere misst der ACS712 und welches Modell soll ich nehmen?

Den ACS712 gibt es in drei Modellen für ±5 A, ±20 A und ±30 A mit Empfindlichkeiten von 185, 100 und 66 mV/A. Wähle das kleinste Modell, das deinen höchsten Strom (bei Wechselstrom den Spitzenwert) abdeckt; ein kleineres Modell liefert beim gleichen Strom einen größeren Ausgangshub und eine bessere Auflösung. Das Modell erkennst du an der Aufschrift ELC-05B, ELC-20A oder ELC-30A auf dem Chip.

Warum gibt der ACS712 ohne Strom 2,5 V aus?

Damit der ACS712 Strom in beide Richtungen messen kann, beginnt sein Ausgang bei der halben Versorgungsspannung. Fließt der Strom in eine Richtung, steigt der Ausgang über 2,5 V, in Gegenrichtung fällt er darunter. Ist die Versorgung nicht genau 5 V, verschiebt sich der Nullpunkt auf VCC / 2; deshalb misst du ihn am besten beim Start.

Kann der ACS712 Netzstrom (230 V) messen?

Ja, der Chip hat eine Isolationsfestigkeit von 2,4 kV RMS; bei 230 V eignet sich das 5A-Modell bis etwa 800 W und das 20A-Modell bis etwa 3250 W. Schraubklemme und Lötstellen des Moduls liegen aber auf Netzpotenzial: Verdrahte nur bei gezogenem Stecker, baue das Modul in ein geschlossenes Gehäuse und arbeite ohne Erfahrung nicht allein. Sicherer ist ein Klappstromwandler wie der SCT-013, für den kein Kabel aufgetrennt werden muss.

Funktioniert der ACS712 am ESP32 oder mit 3,3 V?

Der ACS712 braucht 4,5–5,5 V und liefert mit 3,3 V keine korrekten Werte. Versorge das Modul am ESP32 und am Raspberry Pi Pico aus dem 5V-, VIN- oder VBUS-Pin und führe den Ausgang über einen Spannungsteiler aus 10 kΩ und 20 kΩ an den Analogpin. So bleibt selbst ein Ausgang nahe 5 V am Pin unter 3,33 V.

Warum zeigt der ACS712 ohne Strom nicht null an?

Dafür gibt es zwei Gründe: Der Code nimmt den Nullpunkt mit genau 2,5 V oder 512 an, und der Sensor hat Eigenrauschen. Miss den Nullpunkt beim Start ohne Last, mittle 100–500 Werte und ergänze eine kleine Totzone von etwa 0,05 A. Bei Wechselstrom entfernst du den Geisterstrom im Leerlauf, indem du das Rauschen quadratisch abziehst.

ACS712 oder INA219: Was ist besser?

Das hängt von der Aufgabe ab. Der INA219 arbeitet über I2C und liefert Strom, Spannung und Leistung zusammen mit etwa 0,8 mA Auflösung bis ±3,2 A; für Akkus und kleine Gleichstromschaltungen ist er deutlich genauer. Der ACS712 misst bis 30 A, erfasst auch Wechselstrom und trennt den Messkreis galvanisch vom Arduino.

Alle Projekte ansehen
Lichtstärke messen mit LDR
#11Anfänger

Lichtstärke messen mit LDR

Willst du sehen, wie hell dein Zimmer ist, und zwar als Zahl? Der LDR, ein kleines lichtempfindliches Bauteil, misst das Umgebungslicht, und der Arduino schreibt den Wert jede halbe Sekunde auf deinen

4.6(81)
139
Messung der Lichtintensität mit dem ESP32-LDR-Modul
#113Anfänger

Messung der Lichtintensität mit dem ESP32-LDR-Modul

Echtzeit-Anzeige des ADC-Rohwerts des LDR-Moduls und des anhand von Dunkel- und Hellreferenzwerten berechneten relativen Lichtwerts in Prozent im Serial Monitor. Dieser Prozentwert ist keine Lux-Messung. Vermittelt die Kalibrierungslogik des Moduls. Sollte idealerweise vor Projekt 10 durchgeführt werden, da es zur Festlegung des Schwellenwerts dient.

4.6(36)
55
Digitales Voltmeter mit LCD-Anzeige
#56Mittel
Premium

Digitales Voltmeter mit LCD-Anzeige

Finde mit einem selbstgebauten Messgerät heraus, wie viel Spannung eine Batterie oder ein Netzteil liefert. Ein Teiler aus zwei Widerständen senkt hohe Spannungen auf ein Niveau, das die Platine lesen

4.5(27)
36
220V Glühbirne mit Druckknopf (Push)
#19Fortgeschritten
Premium

220V Glühbirne mit Druckknopf (Push)

Solange du den Knopf gedrückt hältst, leuchtet eine echte 220-Volt-Glühbirne, und sobald du loslässt, geht sie aus. Das schwache Signal des Arduino kann die Birne nicht direkt einschalten, deshalb sit

4.4(30)
38
ESP32: LED-Helligkeit mit Potentiometer (Analog → PWM)
#115Mittel
Premium

ESP32: LED-Helligkeit mit Potentiometer (Analog → PWM)

In diesem Projekt steuern wir die Helligkeit einer LED analog über ein Potentiometer. Der ADC-Pin des ESP32 liest die vom Potentiometer kommende Spannung von 0-3,3 V aus, woraufhin dieser Wert in ein PWM-Signal (Pulsweitenmodulation) umgewandelt und an die LED gesendet wird. So leuchtet die LED beim Drehen des Potentiometers stufenweise auf und erlischt wieder. Mit Arduino Core 3.0+ kann analogWrite() direkt verwendet werden; bei ESP32-S2/S3 ist die ADC-Auflösung auf 12 Bit festgelegt.

4.5(19)
32
Verwendung des LCD-Bildschirms mit I2C
#32Anfänger
Premium

Verwendung des LCD-Bildschirms mit I2C

Gib deinem Arduino ein eigenes Display und lass es seine erste Nachricht schreiben. Das zweizeilige LCD wird mit nur wenigen Kabeln angeschlossen; oben erscheint ein Gruß, dann unten eine zweite Zeile

4.8(53)
70
ESP32 I2C-LCD-Display (16×2)
#119Mittel
Premium

ESP32 I2C-LCD-Display (16×2)

In diesem Projekt zeigen wir Text an, indem wir ein 16x2-Zeichen-LCD-Display über das I2C-Protokoll an den ESP32 anschließen. Dank I2C können wir das Display mit nur zwei Datenpins (SDA und SCL) steuern; die Verschwendung von 6+ Pins bei einer klassischen parallelen Verbindung entfällt. Der Code schreibt in die erste Zeile eine feste Meldung und in die zweite Zeile einen Zähler, der sich jede Sekunde erhöht. Außerdem lassen wir zu Beginn den I2C-Scanner laufen und geben die Adresse des Displays

4.9(23)
40
ESP32 Temperatur-Datenlogger (DHT22 + DS1307 RTC + microSD + OLED)
#144Fortgeschritten
Premium

ESP32 Temperatur-Datenlogger (DHT22 + DS1307 RTC + microSD + OLED)

Baue einen zeitgestempelten Temperaturlogger mit ESP32! Lese Temperatur/Feuchtigkeit vom DHT22 jede Minute, hole die aktuelle Zeit vom DS1307 RTC und protokolliere auf microSD-Karte als CSV. Das OLED zeigt live Temperatur (große Schrift), Luftfeuchtigkeit, Zeitstempel und Logzähler. Die /temp_log.csv-Datei auf der SD-Karte öffnet sich in Excel, Google Sheets oder Python pandas zur Analyse — perfekt für Gewächshausüberwachung, Raumtemperaturverfolgung, Laboraufzeichnung, Lebensmittellageru

4.7(7)
12