Modellbahn Lichtschranken

Mit MCP23017 gehen 16 I/Os. Gibt es auch als MCP23S17 für SPI (ist ja auch ein Bus). Wenn man den SPI-Bus einbremst, wäre das auch noch eine Alternative. Da habe ich aber auch keine praktische Erfahrung.

Bin gerade über I2C-Tranceiver mit CAN-Bus-Hardware gestolpert. Was im Auto funktioniert, sollte auch für eine Modellbahn gut sein, vermute ich.

Hallo,

Den Canbus nutze ich ja schon für die Railuino Software... Ich weiß nur nicht ob sich das ein bisschen gegenseitig Ärger macht...

Gruß,
Ludwig

Ludwig98Mueller:
wenn ich also Portexpander nehmen würde, kann ich an die I2C Schnittstelle zusätzlich 8 I/O Pins hinhängen, oder geht da auch mehr?

Wie agmue schon schrieb, kannst du auch den MCP23017 einsetzen, oder auch mehrere von den Portexpandern.
Damit kannst du deinen Arduino um reichlich Ein- bzw. Ausgänge erweitern.

Wegen der Master/Slave Kommunikation ist das Timing möglicherweise kritisch. Ohne Meldeleitung (Interrupt vom MCP23017) ist Polling durch den Master notwendig. Das muß so häufig geschehen, daß auch das kürzeste Signal sicher erkannt wird. Wie lange schließt beispielsweise der Reedkontakt beim Überfahren durch eine Lokomotive? Was wäre der kürzeste zu erkennende Zustand?

Hier möchte ich nochmal die verteilte "Intelligenz" erwähnen. Anstelle von MCP23017 wäre auch ein Nano oder ein ProMini mit 19 I/Os, davon zwei als I2C, denkbar. Per Software könnte man sicherstellen, daß keine Information verloren geht. Nano und ProMini bieten auch RX/TX an, die zu RS485 gewandelt werden könnten. Der Mega hat ja schöne viele serielle Schnittstellen für eine Sterntopologie. Nano/ProMini könnten auch selbständig Informationen senden, wenn sich an den Eingängen was tut. Dadurch würde das Polling überflüssig.

Tja, gar nicht so einfach :slight_smile:


Anm.: Die Links sind nur Illustrationen.

Von deinen Erzählungen her scheinst du diese Dokumentation zu kennen:

Railduino

Der dort angesprochene S88 Bus kenne ich nicht aber der scheint mir wegen der 6 benötigten Adern etwas umständlich zu sein.

Hallo,

mein bisheriges Vorhaben ist so:

  • 1 Raspberry Pi 3 B mit Touchscreen als Rechenzentrale
  • 1 Arduino Uno für die Steuerung der Modellbahn mit CanDiyshield
  • 1 Arduino Mega 2560 zur Steuerung der Weichen
  • 1 Arduino Mega 2560 zur Feststellung wo die Loks sind.

Die Kommunikation soll über RX und TX stattfinden, wiringPi auf dem Raspberry Pi unterstützt dies auch. Mit dem Arduino habe ich hier schon viel Erfahrung. Theoretisch kann ich doch alle RX Leitungen der Arduinos zusammenlegen und an den Raspi bei TX hinhängen, alle TX der Arduinos mit dem RX des Raspis mit einem Levelshifter verwenden oder?

Dann kann ich ja theoretisch mit dem Raspi an die Arduinos nacheinander einen Statusbefehl durchgeben, wo welcher Zug z.B. ist über Reedkontakte. Dann antworten diese mir. Dann kann ich ja problemlos noch einen Nano oder ProMini dazuschalten oder?

Gruß,
Ludwig

Hallo Scherheinz,

ja die habe ich gesehen und fand es scheiße... Ich konnte damit nicht richtig viel anfangen...
Habe mir dann die c't hacks Ausgabe besorgt und damit habe ich mir dann mit Hilfe des Arduino Forums den Uno mit der Märklin verbinden können.
Auch hier wird der S88 Bus vorgeschlagen.

Gruß,
Ludwig

Das geht nicht so einfach. Deine Schnittstelle ist eine Punkt-zu-Punkt Verbindung, du kannst da nicht einfach mehrere Teilnehmer dranhängen.

Mit Dioden und entsprechendem Protokoll könnte es schon gehen ::slight_smile:

oder einem OR Logig Baustein ?

Ludwig98Mueller:
Hallo Scherheinz,

ja die habe ich gesehen und fand es scheiße... Ich konnte damit nicht richtig viel anfangen...
Habe mir dann die c't hacks Ausgabe besorgt und damit habe ich mir dann mit Hilfe des Arduino Forums den Uno mit der Märklin verbinden können.
Auch hier wird der S88 Bus vorgeschlagen.

Gruß,
Ludwig

Das ist ja auch nur eine Erklärung und keine Anleitung. Ich habe die c't hacks auch damals gelesen und etwas im Netz danach gestöbert.

Scherheinz:
Das geht nicht so einfach. Deine Schnittstelle ist eine Punkt-zu-Punkt Verbindung, du kannst da nicht einfach mehrere Teilnehmer dranhängen.

Okay, d.h. ich muss dann einen Mega als Kopplungsstück z.B. nutzen und mit dem dann die ganzen anderen Geräte bedienen?

Das kannst du oder mehrere kleinere billige Arduinos oder mit Portexpandern die dir schon vorgeschlagen wurden. Für deine Eisenbahn führen viele Wege nach Rom. :slight_smile:

Hallo,

mal was anderes. Möchtest du dir wirklich deine Eisenbahnplatte mit oberirdisch sichtbaren Lichtschranken versauen?

Hallo,

wenn ich das richtig sehe, kann ich hierüber den Mega mit 4 weiteren Geräten verbinden oder? Dann muss ich halt hierauf eine entsprechende Software programmieren, sodass die wichtigen Daten für das Display des Raspis zum Raspi kommen, den Rest kann ich entweder direkt auf diesem einen Arduino verarbeiten oder halt auch an den Raspi schicken oder?

Ich hab nochmal nachgedacht, bin auf einen Denkfehler gestoßen, im Prinzip brauche ich nicht pro Weiche 3 Rückmelder, sondern es reichen auch zwei wenn wir von einer normalen 1-2 Wege Weiche ausgehen.

Doc_Arduino:
Hallo,

mal was anderes. Möchtest du dir wirklich deine Eisenbahnplatte mit oberirdisch sichtbaren Lichtschranken versauen?

Nein, das haben wir schon in den letzten paar Texten geklärt

agmue:
Reed Kontakte sind wie Taster, die ziehen keinen Strom, sondern schalten "ein" oder "aus". (Möglicherweise verwechselst Du das mit Reed-Relais?) Mit dem Reed-Kontakt schaltest Du den Arduino-Eingang gegen GND und initialisierst den Eingang durch INPUT_PULLUP mit einem internen PullUp-Widerstand von ca. 50 kOhm, bei Störungen auch mit einem externen kleineren.

Bei der Menge Eingänge würde ich über ein Bussystem oder verteilte "Intelligenz" nachdenken, machst Du wömöglich längst :slight_smile:

Ich werde es mit Reedkontakten umsetzen, die kann ich ja in die Schiene mittig einsetzen und an die Loks unten dran Magnete anbringen, sodass wenn diese drüberfahren der Kontakt kurzzeitig geschlossen wird.
Da werde ich dann z.B. diese hier verwenden: Der sollte es ja eigentlich tun, den könnte ich ja sogar dann wie eine Schwelle lackieren. SOllte ja auf die magnetischen Eigenschaften keine Auswirkung haben oder?

Gruß,
Ludwig

Hallo,

du sagtest, du hast die Lichtschranken schon da. Deswegen meine bedenken.
Reedkontakte würde ich nun wiederum ebenfalls nicht verwenden. Die prellen. Mist.
Da ich auch an einer Modellbahnanlage arbeite, nehme ich Hallsensoren und Magneten an der Lokunterseite.
Ganz saubere Sache. Südpol nach unten zeigend und in die Schwellenlücken TLE4905 verbauen.
Wenn du davon 2 nebeneinander baust und den Magneten verlängerst, kannste auch eine Richtungsauswertung einprogrammieren. Stichwort Gray-Encoder. Auch eine ganz saubere Sache.

Hallo Doc,

du meinst diese hier oder: TLE 4905L: Hallsensor, digital, uni- - bipolar, 3,8 - 24 V bei reichelt elektronik

Und dann von denen mit kleinem Abstand hintereinander zwei einbauen?
Dann bekomme ich ja sogar eine Geschwindigkeit wenn ich das richtig sehe, weil ich die Zeit messen kann und auch noch die Strecke kenne oder?

Aber wenn ich die Lokdaten sowieso im Raspi speichere wo mit welcher Richtung diese sich bewegt/steht ist eine zweite Hallsonde doch eigentlich überflüssig oder?

oder kannst du bitte mal ein Bild posten wie du es umgesetzt hast?

Gruß,
Ludwig

Hallo,

mit den Sensordaten kannste alles machen was du dir vorstellen kannst.
Ich habe derzeit eine 2m Teststrecke mit 3 Sensorpaaren.
Geschwindigkeiten messe ich schon. Nächste Ausbaustufe ist automatische Geschwindigkeitsregelung.
Wenn auf dem Abschnitt nur 60km/h gefahren werden soll, bin ich unabhängig davon zu wissen welche Lok auf dem Gleis fährt. Ich fahre mit einem mir bekannten Regelungswert an, messe für den Sektor die echte Geschwindigkeit, rechne den neuen Wert zur Geschwindigkeitsregelung aus und stelle den dann ein.
Die km/h messe ich natürlich über einen längeren Abstand, nicht über die 11mm vom Sensorpaar.
Die Richtungsauswertung nutze ich hier damit ich weis ob beschleunigt oder gebremst werden soll.
Falls du ein Sensorpaar verbaust mit dem Zweck zur Richtungsauswertung, dann müssen die Sensoren/Magneten so
angebracht sein, dass das Magnetfeld die gesamte Länge / Bereich der Sensoren abdeckt.
Wenn du die Richtungsauswertung nicht benötigst, dann kannste das natürlich lassen mit Paarweise.
Die Magneten werden am Ende mit Patex Repair oder Multi angeklebt.

anfahren_bremsen

Die Sensoren kann man natürlich und sauberer verbauen, ist klar, Versuchsaufbau eben.
Wenn die Kabel nach unten weg gehen sieht man nichts mehr. In dein HO Schienen haste mehr Platz.

TLE4905_Sensorpaar.jpg
Lok_mit_Magnet.jpg

Hallo Doc,

das sieht echt gut aus!
ABer ich glaube bei mir kommt eben das Problem dazu, dass ich zwischen den neuen H0 C-Gleisen einfach nicht sehr viel Platz habe. Ich würde daher doch eher dazu tendieren, Reedkontakte einzubauen, da ich diese doch um einiges besser verstecken kann, und eben das Mittelleiterpunktmaß nicht zum Problem wird.

Oder so wie hier montieren:
Aber mit dem Mittelleiter könnte das zum Problem werden der unten drunter ist...

Oder haben die mittig einfach drei winzige Löcher gebohrt und dann die drei Metallstäbe durchgeschoben?

Und der TLE4905 den kann ich mit einem Inputpulldown an einen digitalen I/O hängen oder? Weil überall steht Inputpullup, ich müsste doch den Output wieder abbauen oder ist der Outputwert bei keinem Magnetfeld gleich VIN?

Gruß,
Ludwig

Ludwig98Mueller:
Und der TLE4905 den kann ich mit einem Inputpulldown an einen digitalen I/O hängen oder? Weil überall steht Inputpullup, ich müsste doch den Output wieder abbauen oder ist der Outputwert bei keinem Magnetfeld gleich VIN?

Hast Du schon mal ins Datenblatt geschaut? Der Ausgang ist open collector und benötigt einen PullUp-Widerstand, entweder mittels INPUT_PULLUP den im Arduino eingebauten oder einen externen. Ein vorhandenes Magnetfeld zieht den Ausgang also auf LOW. Das ist nicht ungewöhnlich und für das Programm egal. Ich finde den Hallsensor klasse :slight_smile:

Hallo,

welche 3 Metallstäbe? Das Ding hat die Form eines kleinen Transistors.
Auf Seite 15 stehen die Maße. Datenblatt
Der Ausgang des Sensors benötigt einen Pullup. Das hat nichts mit dem Input vom µC zu tun. Den Input_Pullup vom µC habe ich extra noch aktiviert. Wegen Kabellänge. Wenn du wie ich einen LED mit Vorwiderstand als Sensor Pullup verbaust, haste gleichzeitig eine optische Detektanzeige.

Wenn du für einen Readkontakt Platz hast, dann sollte doch für den Sensor auch Platz sein. Ich kenne aber deinen Schienensystem nicht wirklich.

Wenn du doch Reedkontakte nehmen möchtest oder mußt, dann teste erstmal welches Magnetfeld die benötigten. Auf jeden Fall mehr wie ich hier mit den kleinen Minimagneten. Ich kenne die so, dass man mit Lackdraht einen Spule um die Glaskörper wickelt damit sie schalten. Oder ein deutlich größerere Magnet ran muß. Probiere es und die bessere Lösung für dich nimmste. Muß ja nicht für jeden alles passen. War nur eine Idee.