LM2596, XL4015 & MT3608 richtig einstellen: Stabile Stromversorgung für Arduino & ESP32

Dein ESP32 startet zufällig neu, sobald WLAN aktiv wird? Die Servos zucken, das Display flackert, und am USB-Port des Laptops läuft plötzlich gar nichts mehr? In 9 von 10 Fällen ist nicht dein Code schuld, sondern die Stromversorgung. In diesem Praxis-Guide lernst du, wie du mit günstigen Schaltwandlern wie dem LM2596 (Step-Down), dem XL4015 (5A mit Strombegrenzung) und dem MT3608 (Step-Up) jede Eingangsspannung in eine stabile Versorgung für Arduino & ESP32 verwandelst – inklusive Schritt-für-Schritt-Einstellanleitung und drei Sketches, mit denen dein Mikrocontroller seine eigene Versorgungsspannung überwacht.

Warum die Stromversorgung über Erfolg und Frust entscheidet

Ein ESP32 zieht im Leerlauf nur rund 40 mA – aber beim WLAN-Sendeburst kurzzeitig bis zu 500 mA. Kommen Servos, LEDs oder ein Relais dazu, entstehen Stromspitzen, die schwache USB-Ports und dünne Kabel in die Knie zwingen. Die Folge: Spannungseinbrüche unter 3,0V, der Brownout-Detektor schlägt zu, das Board resettet – scheinbar „grundlos".

Die Lösung ist ein eigenes Netzteil (z. B. 12V) plus ein Schaltwandler, der daraus effizient stabile 5V macht. Anders als lineare Regler (etwa der 7805 oder der Regler auf dem Arduino-Board selbst) verheizen Schaltwandler die überschüssige Spannung nicht als Wärme, sondern erreichen 85–95 % Wirkungsgrad.

ℹ️ Faustregel: Ab etwa 200 mA Laststrom und mehr als 2–3V Spannungsdifferenz lohnt sich ein Schaltwandler immer. 12V auf 5V bei 1A hieße beim Linearregler: 7 Watt Abwärme – der LM2596 verliert bei derselben Aufgabe unter 1 Watt.

Welcher Wandler für welches Projekt?

Modul Typ Eingang Ausgang Strom (dauerhaft) Typischer Einsatz
LM2596S Step-Down 4,5–35V 1,25–35V ~2A (3A Peak, gekühlt) 12V-Netzteil → 5V für ESP32/Arduino
LM2596 mit Voltmeter Step-Down 4–35V 1,25–35V ~2A wie oben, mit Anzeige statt Multimeter
XL4015 Step-Down (CC/CV) 4–38V 1,25–36V bis 5A (75W) LED-Strips, Servo-Banks, Laden mit Strombegrenzung
MT3608 Step-Up 2–24V 5–28V ~1A (2A Peak) Batterie/Akku (3–4,2V) → 5V oder 12V
Mini Boost 3,7→12V Step-Up (fix) 3,7V 12V fest klein 12V-Kleinverbraucher am Akku

Kurz gesagt: LM2596 ist der Allrounder fürs Runterregeln, XL4015 nimmst du bei viel Strom oder wenn du zusätzlich den Strom begrenzen willst (CC-Modus), und der MT3608 hebt Batteriespannungen hoch, wenn dein Projekt 5V braucht, aber nur ein Akku da ist.

Was du brauchst

1x LM2596S DC-DC Step-Down-Wandler – Zum Produkt (auch als 3er-Set)
Alternativ mit eingebauter Anzeige: LM2596 mit Voltmeter – Zum Produkt
Für Lasten bis 5A: XL4015 Step-Down mit Strombegrenzung – Zum Produkt
Für Batterieprojekte: MT3608 Step-Up-Modul – Zum Produkt
12V-Netzteil-Anschluss: Hohlstecker-Set – Zum Produkt
Saubere Verdrahtung: 22AWG-Kabel rot/schwarz – Zum Produkt
Widerstände für den Spannungsteiler (100 kΩ / 33 kΩ) – Widerstände-Set
1x Breadboard 400 Kontakte – Zum Produkt

Schritt für Schritt: Wandler richtig einstellen

  1. 1Ohne Last einstellen: Verbinde nur das Netzteil mit IN+ / IN–. Noch nichts an den Ausgang anschließen!
  2. 2Miss die Ausgangsspannung mit dem Multimeter an OUT+ / OUT– (oder lies das eingebaute Voltmeter ab).
  3. 3Drehe das Poti gegen den Uhrzeigersinn, bis exakt 5,0V anliegen. Die Mehrgang-Potis brauchen oft 10–20 Umdrehungen, bevor sich etwas tut – nicht wundern.
  4. 4Kurz gegenprüfen: Eingang ab- und wieder anstecken – bleibt die Spannung stabil bei 5,0V?
  5. 5Jetzt erst den Verbraucher anschließen: OUT+ an den 5V-Pin (ESP32/Arduino), OUT– an GND.
  6. 6Beim XL4015 zusätzlich: Mit dem zweiten Poti (CC) die Strombegrenzung setzen – für Elektronik-Lasten einfach auf Maximum lassen, fürs Laden oder LED-Strips gezielt begrenzen.

⚠️ Niemals unter Spannung verdrahten: Erst alles verkabeln, dann das Netzteil einstecken. Und: Verpolung am Eingang zerstört die Module sofort – rot/schwarzes Kabel konsequent nutzen, dann passiert das nicht.

⚠️ 5V-Pin statt VIN: Speise geregelte 5V direkt in den 5V-Pin. Der VIN-Pin führt über den (schwachen) Linearregler des Boards – der ist bei sauberen 5V unnötig und bei ESP32-Boards teils außerhalb der Spezifikation.

Verkabelung: 12V-Netzteil → LM2596 → ESP32 mit Spannungswächter

Damit der ESP32 seine Versorgung selbst überwachen kann, misst er die 12V-Eingangsspannung über einen Spannungsteiler (100 kΩ / 33 kΩ). Bei 12V liegen am Messpunkt ~2,98V an – sicher unter den 3,3V des ADC.

Verbindung Von Nach
Netzteil +12V Hohlstecker-Adapter + LM2596 IN+
Netzteil GND Hohlstecker-Adapter – LM2596 IN–
5V geregelt LM2596 OUT+ ESP32 5V-Pin
Masse LM2596 OUT– ESP32 GND
Spannungsteiler oben (100 kΩ) LM2596 IN+ (12V) Messpunkt
Spannungsteiler unten (33 kΩ) Messpunkt GND
Messpunkt ESP32 GPIO 34 (ADC)

Code 1: Eingangsspannung messen

Der Sketch rechnet den ADC-Wert über das Teilerverhältnis zurück auf die echte Eingangsspannung. Den Kalibrierfaktor gleichst du einmalig mit dem Multimeter ab.

#define MESS_PIN 34

// Spannungsteiler: R1 = 100 kOhm (oben), R2 = 33 kOhm (unten)
const float TEILER = (100.0 + 33.0) / 33.0;   // = 4,03
const float KALIBRIERUNG = 1.000;             // per Multimeter feinjustieren

float eingangsspannungLesen() {
  // 20 Messungen mitteln gegen ADC-Rauschen
  long summe = 0;
  for (int i = 0; i < 20; i++) {
    summe += analogRead(MESS_PIN);
    delayMicroseconds(300);
  }
  float adc = summe / 20.0;
  float pinSpannung = adc * 3.3 / 4095.0;
  return pinSpannung * TEILER * KALIBRIERUNG;
}

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);
}

void loop() {
  Serial.printf("Eingangsspannung: %.2f V\n", eingangsspannungLesen());
  delay(1000);
}

ℹ️ Kalibrieren: Miss die echte Netzteilspannung mit dem Multimeter, teile sie durch den angezeigten Wert und trage das Ergebnis als KALIBRIERUNG ein. Damit bügelst du Widerstandstoleranzen und die ADC-Kennlinie in einem Rutsch aus.

Code 2: Unterspannungs-Alarm mit Hysterese

Praktisch für Akku- und Solarprojekte: Fällt die Versorgung unter eine Schwelle, warnt der ESP32 und schaltet Verbraucher ab, bevor es kritisch wird. Die Hysterese verhindert ständiges Hin- und Herschalten um den Grenzwert.

#define MESS_PIN   34
#define ALARM_LED  2      // Onboard-LED
#define LAST_PIN   26     // schaltet z. B. ein Relais mit Verbrauchern

const float TEILER = 4.03;
const float ALARM_UNTER  = 10.5;   // Alarm unterhalb dieser Spannung
const float ALARM_ZURUECK = 11.2;  // Entwarnung erst oberhalb (Hysterese)

bool alarmAktiv = false;

float spannungLesen() {
  long summe = 0;
  for (int i = 0; i < 20; i++) { summe += analogRead(MESS_PIN); delayMicroseconds(300); }
  return (summe / 20.0) * 3.3 / 4095.0 * TEILER;
}

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);
  pinMode(ALARM_LED, OUTPUT);
  pinMode(LAST_PIN, OUTPUT);
  digitalWrite(LAST_PIN, HIGH);   // Verbraucher an
}

void loop() {
  float u = spannungLesen();

  if (!alarmAktiv && u < ALARM_UNTER) {
    alarmAktiv = true;
    digitalWrite(LAST_PIN, LOW);    // Verbraucher abwerfen
    Serial.printf("ALARM: Unterspannung (%.2f V)! Last abgeschaltet.\n", u);
  }
  if (alarmAktiv && u > ALARM_ZURUECK) {
    alarmAktiv = false;
    digitalWrite(LAST_PIN, HIGH);
    Serial.printf("Entwarnung: %.2f V - Last wieder an.\n", u);
  }

  digitalWrite(ALARM_LED, alarmAktiv ? HIGH : LOW);
  delay(500);
}

Code 3: Der Netzteil-Stresstest – ist deine Versorgung wirklich stabil?

Dieser Sketch deckt schwache Versorgungen gnadenlos auf: Er erzeugt mit WLAN-Bursts genau die Stromspitzen, die in echten Projekten zu Resets führen – und meldet nach jedem Neustart, warum das Board zuletzt neu gestartet ist. Ein Brownout-Reset im Log = deine Versorgung braucht ein Upgrade.

#include <WiFi.h>
#include <esp_system.h>

const char* ssid     = "DEIN_WLAN";
const char* passwort = "DEIN_PASSWORT";

void resetGrundAusgeben() {
  esp_reset_reason_t grund = esp_reset_reason();
  Serial.print("Letzter Reset-Grund: ");
  switch (grund) {
    case ESP_RST_POWERON:  Serial.println("Einschalten (normal)"); break;
    case ESP_RST_BROWNOUT: Serial.println("BROWNOUT - Versorgung eingebrochen!"); break;
    case ESP_RST_SW:       Serial.println("Software-Reset"); break;
    case ESP_RST_PANIC:    Serial.println("Absturz (Panic)"); break;
    case ESP_RST_WDT:      Serial.println("Watchdog"); break;
    default:               Serial.println("Sonstiges"); break;
  }
}

void setup() {
  Serial.begin(115200);
  delay(1000);
  resetGrundAusgeben();
}

void loop() {
  // Lastspitze: WLAN einschalten, verbinden, wieder trennen
  Serial.println("Stresstest: WLAN-Burst...");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, passwort);
  unsigned long start = millis();
  while (WiFi.status() != WL_CONNECTED && millis() - start < 8000) delay(100);
  Serial.printf("Status: %s\n", WiFi.status() == WL_CONNECTED ? "verbunden" : "timeout");
  delay(1000);
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
  delay(2000);
}

Läuft der Test 15 Minuten ohne Brownout-Meldung durch, ist deine Versorgung für den Praxiseinsatz gewappnet. Bricht sie ein: dickere Kabel (22AWG statt Jumper-Litzen), ein Elko (470–1000 µF) direkt am 5V-Eingang – oder gleich der XL4015 mit mehr Reserven.

Praxistipps

🔋 Akku-Projekte: Eine 18650-Zelle liefert 3,0–4,2V – zu wenig für 5V-Verbraucher. Der MT3608 hebt das stabil auf 5V an. Achtung: Aus 1A bei 5V werden am Akku schnell 1,5A+ Eingangsstrom – der Wandler wandelt Leistung, nicht Strom.

💡 XL4015 als LED- und Ladewandler: Der CC-Modus (zweites Poti) begrenzt den Ausgangsstrom – ideal für LED-Strips ohne eigene Begrenzung oder als einstellbare Konstantstromquelle im Labor.

🌡️ Wärme = Derating: „3A" auf dem Datenblatt heißt nicht 3A dauerhaft im Sommer im geschlossenen Gehäuse. Plane 50–70 % der Maximalangabe ein; ab ~2A am LM2596 hilft ein kleiner Kühlkörper.

📏 Gemeinsame Masse: Bei mehreren Spannungsebenen (12V, 5V, 3,3V) müssen alle GNDs verbunden sein – sonst messen deine ADCs und Datenleitungen Phantasiewerte.

Troubleshooting

⚠️ Poti drehen ändert nichts: Die Mehrgang-Potis haben keinen Anschlag – einfach weiterdrehen (bis zu 25 Umdrehungen). Ändert sich weiterhin nichts: Eingangsspannung prüfen – sie muss beim Step-Down mindestens ~1,5V über der Wunsch-Ausgangsspannung liegen.

⚠️ „Brownout detector was triggered" trotz Netzteil: Meist zu dünne oder zu lange Kabel zwischen Wandler und Board. Kurze, dicke Leitungen (22AWG) verwenden und den Elko direkt an die Board-Pins setzen.

⚠️ Modul wird heiß: Last zu groß oder Spannungsdifferenz zu hoch. Beim LM2596 auf max. ~2A dauerhaft bleiben oder auf den XL4015 wechseln.

⚠️ Voltmeter-Anzeige weicht vom Multimeter ab: Die eingebauten Anzeigen haben oft einen kleinen Kalibrier-Trimmer auf der Rückseite – einmal gegen das Multimeter abgleichen.

⚠️ ADC zeigt Unsinn: GPIO 34/35/36/39 am ESP32 sind reine Eingänge ohne Pull-Ups – perfekt für den Spannungsteiler. Prüfe, ob der Teiler wirklich gegen GND des ESP32 gemessen wird (gemeinsame Masse!).

🚀 Schluss mit mysterösen Resets!

Alle Module für eine stabile Stromversorgung findest du bei MAKEROO.

Fazit

Eine stabile Stromversorgung ist das unsichtbare Fundament jedes Mikrocontroller-Projekts – und mit Schaltwandlern für wenige Euro auch kein Hexenwerk: LM2596 für den Alltag, XL4015 für große Lasten mit Strombegrenzung, MT3608 für alles, was am Akku hängt. Wichtig ist nur die Reihenfolge: erst ohne Last einstellen, dann sauber verdrahten, und mit dem Stresstest aus Code 3 beweist dein Projekt schwarz auf weiß, dass es auch unter WLAN-Volllast nicht wackelt. Wenn dein ESP32 das nächste Mal „grundlos" neu startet, weißt du jetzt genau, wo du suchen musst – und wie du es dauerhaft behebst.

Zurück zum Blog