Modellbahnsteuerung per GPIO

  • Hallo Zusammen,


    ich arbeite gerade an einer Modellbahnsteuerung und benötige für einen Teil der Steuerung euren Input, bzw. einen Tipp ob es sowas vielleicht schon Out of the Box gibt.

    Aber erstmal grundlegend, was ich bisher gebastelt habe.


    Ich habe damit begonnen eine analoge H0 Modellbahn aufzubauen. Um die Anlage später mal in einem Automatikbetrieb mit Schattenbahnhof laufen zu lassen, wäre der einfachste Weg es digital zu machen. Das ist ziemlich teuer und macht mir als Bastler auch nur wenig Spaß.


    Ich möchte die Anlage mit einem Python Programm und einem Pi steuern. Das funktioniert auch schon :)

    In dem folgenden Bild könnt ihr sehen wie es grundsätzlich im Moment funktioniert.



    Ich habe in einen Gleis die Bahnschwelle gegen einen Reedschalter getauscht und unter die Lok einen Magneten geklebt. Fährt die Lok jetzt darüber wird der Kontakt geschlossen und der Pi bekommt ein Signal. Das Python Programm schaltet nun über ein Relay die Spannung ab, wartet 3 Sekunden und schaltet die Spannung wieder zu. Das war relativ simpel und lässt sich auch prima

    erweitern und später Weichen und Signal zu steuern. Des Weiteren sind die Reedschalter den Bahnschwellen so ähnlich, das man es mit bloßem Auge kaum erkennt.


    Nun aber zu meinen 2 Fragen.


    Der Trafo der Modellbahn liefert die Gleichstromversorgung für die Gleise und wird über ein Drehregler gesteuert. Bei dem jetzigen Aufbau fährt die Lok immer mit der gleichen Geschwindigkeit. Das sieht gerade beim Halten und Anfahren nicht wirklich schön aus. Ich möchte gern etwas hinter das Relay bauen, womit ich die Spannungen aus dem Trafo per Python Programm langsam erhöhen, bzw. langsam verringern kann. Somit wäre ein realistisches Halten und Anfahren möglich. Ich dachte da an etwas wie einen steuerbaren Dimmer oder ähnliches. Leider habe ich nicht wirklich was sinnvolles im Netz gefunden, daher meine Frage gibt es das oder wie könnte ich das anders realisieren.


    Meine zweite Frage, wie viele Ein- und Ausgänge kann ich per GPIO ansteuern, bzw. abfragen und lässt sich das ggf. erweitern.


    Vielen Dank für Eure Unterstützung.


    VG

  • Go to Best Answer
  • Du könntest ein PWM-Signal erzeugen und damit über einen Transistor den Strom in kurzer Folge ein- und ausschalten. So bekommst du "im Durchschnitt" eine geringere Spannung. Ggf. brauchst du noch einen Kondensator zur Glättung und eine Freilaufdiode, weil womöglich die Spulen des Lok-Motors Spannungsspitzen erzeugen, die für den Transistor nicht so gut sind.


    Du hast wirklich ein System mit Gleichspannung? Ich hatte früher eine Märklin, die hatte Wechselspannung.

    Wie funktioniert bei deiner Gleichspannung die Richtungsumkehr? Wird da einfach umgepolt? Das ginge mit einem Transistor nicht so einfach. Da könntest du eine H-Brücke einsetzen (vielleicht ein fertiges Motortreibermodul) oder ein AC-Solid State Relais.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Edited once, last by Gnom ().

  • Wenn das Teil genügend Strom für die Lok liefern kann, müsste das gehen. In der Beschreibung steht 1A, mit Kühlkörper bis zu 5A. Ich nehme aber an, dass das eher heißt, 5A nur kurzzeitig für Spitzen. Nach dem Datenblatt des IRF520 ist der Strom stark abhängig von der Gate-Source-Spannung und liegt bei Ugs = 5V nur zwischen 1 und 2 A. Du müsstest also erst mal wissen, wie viel Strom deine Lok braucht.

    Und wie gesagt - das geht nur mit Gleichspannung in einer Richtung - wenn du die Umpolen willst, um Rückwärts zu fahren, klappt das nicht.


    Das Teil von Amazon kann offenbar höhere Ströme schalten. Müsste ggf. also auch gehen.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • mmh, an das Rückwärts fahren habe ich gar nicht gedacht, aber wichtig wäre das schon. Kennst du für das Szenario auch etwas?

  • Wird da einfach die Spannung am Gleis umgepolt? Dann müsstest du wohl eine H-Brücke/Motortreiber einsetzen.

    Hier findest du ein ganz nettes Video zu einem einfachen Treibermodul. Auch hier wieder die Frage nach dem nötigen Strom...

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Der L298N kann 2A. Der sollte auf jeden Fall auch gehen.

    Aber es wäre, wie schon mehrfach gesagt, die Frage, wie viel Strom denn deine Lock braucht. Es macht wenig Sinn, die Leistungsdaten des Treibers zu diskutieren, wenn man den Bedarf nicht kennt.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Hallo Zusammen,


    es sind ja nun ein paar Tage und ich habe so einiges probiert. Sagen wir es mal so, dass was ich haben wollte geht jetzt. Aber warum es nur so geht und nicht anders, ist für mich ein Rätsel. Jetzt fragt ihr euch sicherlich wie. :denker:


    Ok dann kommt jetzt mal der Aufbau und im Anschluss die Erklärung und Probleme die ich umgehen musste.


    Komponenten


    - PI

    - L298N von Conrad (Anleitung)

    - 4 - Port Relaymodul Conrad

    - 16V/0,7A DC Netzteil von Piko

    - Reed-Schalter im Gleis




    Eigentlich soll das Treibermodul von Conrad in der Lage sein die Richtung über IN1 und IN2 zu drehen, so das ein Vor- und Rückwärtsfahren funktionieren sollte. Ich habe Stunden dran gesessen, aber er schaltet einfach nicht IN1 und 2. Das einzige was zuverlässig funktioniert ist die PWM Steuerung über EN1. (also die Geschwindigkeitsregelung). Ich war schon kurz davor das Ding wegzuwerfen, aber dann fing ich an über die ganzen Steckbrücken nachzudenken.

    Also Anleitung nochmal raus und gucken was die eigentlich machen. mmh aber gefunden habe ich dazu nix. Also schei... drauf, es funktioniert ja eh nicht, dann spielen wir jetzt rum und tatsächlich ist es so, Nehme ich J1 und 2 raus passiert nichts. Stecke ich dann einen der beiden fährt meine Bahn los in die eine Richtung. Ziehe ich den ersten und stecke den zweiten fährt sie in die andere Richtung. Cool dachte ich mir aber ich kann ja nicht immer da sitzen und

    den Jumper Stecken. Also nahm ich mir ein Relayboard und baute den Test-Code so das es automatisch funktioniert.


    Das ist alles nur zum Test, nicht das sich Pythonentwickler jetzt beschweren.


    Wie im Quellcode zu sehen frage ich noch den Reedschalter ab. Und hier ist ein riesen Problem an dem ich gerade hänge. Der Eingang gibt permanent ein

    Signal,obwohl der Schalter gar nicht geschlossen ist. Ich habe gelesen das dies mit den Pull_Up bzw. Pull_Down Widerständen gelöst werden könnte,

    da die Eingänge sehr empfindlich sind. Da wäre ich für Tipps dankbar.


    Das mal so grob der Zwischenstand. Das mit den Reedschaltern muss ich unbedingt gelöst bekommen, denn gestern habe ich die ersten Weichen geliefert bekommen und würde gerne an der Logik für den Schattenbahnhof tüffteln. Nur so lange ich keine validen Signale vom Gleis bekommen, brauch ich damit nicht beginnen.


    VG

    • New
    • Best Answer

    Irgendwas stimmt an deiner Schaltung grundsätzlich nicht. Du hast das Relais angeschlossen, um die Pullups des Muduls ein und aus zu schalten. Das ist wirklich nicht der Sinn der Sache.


    Wenn ich die Anleitung von Conrad richtig verstehe, kannst du die Jumper 1-4 abziehen. Sie sind Pullup-Anschlüsse, die die Eingänge IN1-4 auf HIGH ziehen - die brauchst du nicht. Wenn die GPIOs des Pi rchtig programmiert sind (output), geben sie high oder low an die EIngänge In1-4.


    IN 1 und 2 sind für die Drehrichtung von Motor 1 zuständig.

    Entweder stellst du 1 auf high und 2 auf low (vorwärts) oder andersrum (rückwärts).


    Mit EN1 kannst du dann die Geschwindigkeit regeln.


    Im Dokument von der Conrad-Produktseite ist auch ein Beispielcode. Daraus ist eigentlich gut ersichtlich, worum es geht.

    Du kannst dir auch mal ein Datenblatt zum L298N suchen, da ist genauer beschrieben, wie der Chip funktioniert.


    Jumper CSA und CSB sind für eine Optionale Strommessung - die lässt du drauf.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Edited 2 times, last by Gnom ().

  • ... und im Datenblatt ist auch ersichtlich, wie Du beide Halbbrücken verschaltest, um die Leistung zu erhöhen (um die thermische Belastung des Moduls zu vermindern).


    Der Reedkontakt wird wie ein Taster an den Pi angeschlossen. Davon gibt es aber zwei Versionen, Einen Öffner und einen Schliesser.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Das Modul läuft mit 5V Logikspannung. Das könnte deien Probleme erklären.

    Wenn du mit dem Pi 0 oder 3,3 V auf die Eingänge gibst, versteht das Modul beides möglicherweise als low. Der High-Logiclevel ist zwar im Datenblatt des L298N mt 2,3 V angegeben, aber das muss nicht unbedingt was heißen.

    5V vom Modul und 3,3 V vom Pi zusammen zu bringen, kann zu Schäden führen.


    Demnach solltest du folgendes probieren:

    - Die vier Jumper drauf lassen

    - die vier Relaisausgänge jeweils mit IN (1-4) und GND verbinden

    Jetzt solltest du mit den Relais die Eingänge korrekt schalten können. 1=low (Relais geschlossen) / 2=high (Relais offen) für vorwärts, umgekehrt für rückwärts.

    (Wenn deine jetzige Lösung funktionert, ist das eher Zufall.)


    Im nächsten Schritt würde ich die vier Relais ersetzen durch vier Optokoppler (vier mal LTV817 oder zweimal LTV827 oder einmal LTV847 oder sowas ähnliches).


    (Nachtrag: Wie sich gezeigt hat [#14], kommt das Modul mit den Pegeln des Pi zurecht. Und weil die Eingänge 1-4 hochohmig sind, besteht wohl auch keine Gefahr für den Pi. Die obige Konstellation ist also nicht nötig.)


    Es gibt übrigens noch eine andere, elegantere Relais-Lösung mit nur zwei Relais (für beide Motorausänge): die vier Jumper drauf lassen. IN1 und IN2 an die beiden Relaisausgänge (NO/NC) und den dritten (mittleren) RelaisAusgang (COM) an GND. Das Gleiche für IN3/IN4 mit dem zweiten Relais. (NO, COM, NC sind die drei Anschlüsse am Relaisausgang.) So kannst du mit einem Relais (also mit einem GPIO) die Drehrichtung des Motors umschalten.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Edited 2 times, last by Gnom ().

  • Also erstmal halten wir fest, ich bin zu blöd ne Anleitung zu lesen. Zweitens Danke an Gnom durch deinen Hinweis konnte ich das jetzt auf folgendes reduzieren und mit dem Code betreiben.




    Jetzt kann ich mich dann weiter mit dem Schalter beschäftigen.

  • afamaus

    Selected a post as the best answer.
  • #13


    Wie von GNOM beschrieben geht das drehen der Richtung auch mit 2 Relais und das war ja auch die Ausgangssituation (#1). Für einige Anwendungsgebiete ist das auch sicher ausreichend, aber mein Problem war das das Anfahren bzw. Anhalten der Lok. Wenn mein Plan mit Schattenbahnhof, Rangiergleisen, Bahnübergängen usw. aufgehen soll, dann muss ich mit verschiedenen Geschwindigkeiten fahren. Das geht dann nur mit PWM Modul.