Grüne Diesellok mit Güterzug auf einer Modellbahnanlage

Belegtmeldung mit dem Arduino: Stromfühler richtig auslesen

Unsere Stromfühler melden belegte Gleisabschnitte normalerweise an einen s88-N Rückmelder. Sie lassen sich aber genauso gut direkt mit einem Arduino auslesen – etwa, um im Schattenbahnhof anzuzeigen, welches Gleis belegt ist, oder um abhängig davon ein Herzstück umzupolen. Diese Anleitung zeigt Schritt für Schritt, wie Sie den Stromfühler anschließen, welcher Widerstand nötig ist und welche Stolpersteine dabei häufig übersehen werden.

Das Wichtigste in Kürze

  • Der DATA-Ausgang des Stromfühlers schaltet bei Belegung gegen GND – der Arduino liest dann LOW.
  • Fehlt der Pull-up-Widerstand, ist der Eingang undefiniert: Die Anzeige springt zufällig hin und her.
  • Der interne Pull-up des Arduino reicht oft nicht. Bewährt hat sich ein externer Pull-up mit 100 kΩ von 5 V an den Eingang.
  • Im Sketch gilt: LOW = belegt, HIGH = frei.

Das brauchen Sie

  • einen Stromfühler 1x3A pro Gleisabschnitt – oder einen Stromfühler 8x3A für bis zu acht Abschnitte
  • einen Arduino mit 5 V, zum Beispiel Uno oder Nano
  • einen Widerstand mit 100 kΩ pro überwachtem Abschnitt
  • einen beidseitig isolierten Gleisabschnitt
  • etwas Litze oder Steckbrücken

So funktioniert der Meldeausgang

Der Stromfühler sitzt zwischen Gleisausgang der Zentrale und dem isolierten Gleisabschnitt. Fließt im Abschnitt Strom – weil dort eine Lok oder ein beleuchteter Wagen steht –, verbindet der Stromfühler seinen Ausgang DATA mit GND. Ist der Abschnitt frei, bleibt DATA offen.

Der Ausgang liefert also selbst keine Spannung, er „zieht“ nur nach Masse. Genau deshalb braucht der Arduino einen Widerstand, der den Eingang im Ruhezustand auf 5 V hält – den sogenannten Pull-up.

Gleis belegt

  • Strom fließt im Abschnitt
  • DATA ist mit GND verbunden
  • Arduino liest LOW (0)

Gleis frei

  • kein Strom im Abschnitt
  • DATA ist offen
  • Pull-up zieht auf 5 V: Arduino liest HIGH (1)

Schritt 1: Stromfühler anschließen

Schaltplan: Stromfühler 03001 am Arduino – GND an GND, DATA an A0, Pull-up-Widerstand 100 kΩ zwischen VCC und A0
Schaltplan: Stromfühler 03001 am Arduino mit 100-kΩ-Pull-up zwischen VCC (5 V) und A0
  1. GND des Stromfühlers an GND des Arduino.
  2. DATA des Stromfühlers an einen Eingang des Arduino, zum Beispiel A0. Die analogen Pins lassen sich auch als digitale Eingänge nutzen.
  3. Einen Widerstand mit 100 kΩ zwischen 5 V und denselben Eingang.
  4. Gleisseitig wie gewohnt: Gleisausgang von Zentrale oder Booster an „Eingang“, der isolierte Abschnitt an „Gleis“ – Details stehen in der Einbauanleitung.

Mehrere Gleise: Jeder Stromfühler bekommt einen eigenen Eingang (A0, A1, A2 …) und einen eigenen Pull-up. GND ist für alle gemeinsam. Beim Stromfühler 8x3A funktioniert jeder der acht Ausgänge genauso.

Warum ein großer Pull-up?

Das ist der häufigste Knackpunkt. Ist der Melder ausgelöst, hat sein Ausgang einen gewissen Innenwiderstand. Zusammen mit dem Pull-up bildet er einen Spannungsteiler. Nur wenn der Pull-up deutlich größer ist als dieser Innenwiderstand, sinkt die Spannung am Eingang sicher unter die Schaltschwelle des Arduino – und er erkennt zuverlässig LOW.

Der interne Pull-up des Arduino und auch ein externer 10-kΩ-Widerstand sind dafür meist zu klein. Das typische Symptom: Bei eingefahrener Lok springt der gelesene Wert scheinbar zufällig zwischen 0 und 1 hin und her. Mit einem Pull-up von 100 kΩ arbeitet die Schaltung zuverlässig.

Wird oft übersehen: Wenn Sie einen externen Pull-up verwenden, muss der interne Pull-up aus sein – also pinMode(A0, INPUT) statt INPUT_PULLUP. Sonst sind beide Widerstände parallel geschaltet und der wirksame Wert wird wieder zu klein. Und: kein Pull-down! Mit einem Widerstand nach GND liest der Arduino immer LOW.

Schritt 2: Sketch hochladen

Ein minimaler Sketch für ein Gleis: Die Onboard-LED leuchtet, solange der Abschnitt belegt ist, und der serielle Monitor zeigt den Zustand an.

// Belegtmeldung mit dem Stromfühler 03001 am Arduino
const int GLEIS1 = A0;          // DATA-Ausgang des Stromfühlers
const int LED    = LED_BUILTIN; // Onboard-LED zeigt "belegt" an

void setup() {
  pinMode(GLEIS1, INPUT);       // externer 100-kΩ-Pull-up, interner Pull-up AUS
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // active-low: LOW bedeutet "Gleis belegt"
  bool belegt = (digitalRead(GLEIS1) == LOW);

  digitalWrite(LED, belegt ? HIGH : LOW);
  Serial.println(belegt ? "Gleis 1: belegt" : "Gleis 1: frei");
  delay(200);
}

Klassischer Stolperstein: In C/C++ prüft == auf Gleichheit, = weist einen Wert zu. if (gleis1 = false) ist deshalb immer falsch – richtig ist if (gleis1 == false). Der Fehler fällt leicht durch, weil der Sketch trotzdem kompiliert – die Auswertung funktioniert dann einfach nicht.

Schritt 3: Testen und Fehler finden

Lassen Sie eine Lok in den Abschnitt einfahren: Die Onboard-LED muss aufleuchten, und im seriellen Monitor erscheint „belegt“. Klappt das nicht auf Anhieb, prüfen Sie die häufigsten Ursachen in dieser Reihenfolge:

  1. Logik prüfen: Wird LOW als „belegt“ ausgewertet? Die Rückgabe von digitalRead() muss gegebenenfalls negiert werden.
  2. Pull-up vergrößern: 100 kΩ einsetzen und den internen Pull-up abschalten.
  3. Spannung messen: Mit dem Multimeter zwischen Eingang und GND – einmal mit, einmal ohne Lok im Abschnitt. Ohne Lok sollten etwa 5 V anliegen, mit Lok deutlich unter 1,5 V (Schaltschwelle beim 5-V-Arduino).
  4. Melder messen: Den Widerstand zwischen DATA und GND am Stromfühler messen, ebenfalls mit und ohne Lok.
  5. Empfindlichkeit einstellen: Mit dem Poti verschieben Sie die Einschaltschwelle. Richtung „+“ wird der Melder unempfindlicher, Richtung „−“ empfindlicher.
  6. Anderen Eingang testen: Zum Ausschluss eines defekten Pins einen anderen Eingang verwenden.
Stromfühler 1x3A, Gleisbelegtmelder mit Federklemmen, Ober- und Unterseite

Stromfühler 1x3A

Ein Gleisabschnitt bis 3 A, Empfindlichkeit einstellbar, Federklemmen.

Stromfühler 8x3A mit acht Potentiometern und Federklemmen

Stromfühler 8x3A

Acht Gleisabschnitte, je Ausgang einstellbar – ideal für Schattenbahnhöfe.

Häufige Fragen

Kann ich den Stromfühler gleichzeitig an Arduino und s88-N Rückmelder anschließen?

Nein, das ist ein Entweder-oder: Ein Meldeausgang wird entweder an einen s88-N Rückmelder oder an einen Arduino angeschlossen – nicht an beide gleichzeitig.

Funktioniert das auch mit einem 3,3-V-Board wie ESP32 oder Raspberry Pi Pico?

Ja, das Prinzip ist gleich: Der Ausgang schaltet nur nach GND, der Pull-up kommt dann an 3,3 V statt 5 V.

Warum flackert die Anzeige, wenn ein Zug einfährt?

Meist ist der Pull-up zu klein oder der interne Pull-up zusätzlich aktiv. Hilft das nicht, können Sie den Zustand im Sketch kurz entprellen – zum Beispiel erst nach mehreren gleichen Messungen übernehmen – oder die Empfindlichkeit am Poti nachstellen.

Wie viel darf ich am Ausgang anschließen?

Der Meldeausgang verträgt bis 35 V DC und 50 mA. Für einen Arduino-Eingang mit Pull-up reicht das weit; Lasten wie Relais oder Lampen gehören nicht direkt an den Ausgang.