Modellbahn Lichtschranken

Hallo zusammen,

Ich habe zuhause eine Märklin H0. Ich habe die Eisenbahn so eingerichtet, dass ich diese mit dem Arduino Uno steuern kann. Mit einem Arduino Mega sollen IR Lichtschranken eingelesen werden.
Nun ist die Frage, wie ich diese IR LED's und Empfänger (https://www.amazon.de/pairs-Infrared-Diode-Emission-Receiver/dp/B00EFOTJZE/ref=sr_1_1?ie=UTF8&qid=1466251315&sr=8-1&keywords=ir) auf der Platte monieren kann. Ich habe eine Höhe über der Platte von 30mm, sodass die Eisenbahnen erkannt werden. Ich habe mir schon überlegt ob ich es über kleine Holzsockel löse, die ich einbore sodass die LED und Receiver fest stehen. Einen eigenen 3D Drucker habe ich leider nicht, sonst würde ich die Dinger eben mit SolidWorks zeichnen und ausdrucken. Mir wurde auch schon vorgeschlagen die LEDs über kleine PVC Röhrchen zu montieren, jedoch hat das ein Baumarkt nicht.

Hat jemand noch eine Möglichkeit für mein Problem (ich habe 100 LEDs und 100 Receiver die ich einfassen muss)

Gruß,
Ludwig

Hast du die Teile denn schon? Ich hättees eher mit Reed Kontakten gemacht die zwischen die Gleise passen.
Wie groß ist die Anlage denn das du so viele brauchst? Ich denke mal die Teile sollen optisch nicht zu sehen sein, oder?

Hallo,

ich habe die Teile schon, es sind 25 Weichen, aber ich brauche pro Weiche 3 + nochmal welche für Bahnhöfe etc, die Anlage umfasst so um die 10 m^2.

Die Reed-Kontakte hättest du dann per Loch durch die Schiene gemacht und dann an die Lok unten einen Magnet hin? Und die Reed Kontakte dann so, dass diese nicht allzu viel Strom ziehen. Sowieso muss ich diese dann wie einen Schalter einfragen über einen Eingang oder?

Gruß,
Ludwig

Ludwig98Mueller:
Und die Reed Kontakte dann so, dass diese nicht allzu viel Strom ziehen. Sowieso muss ich diese dann wie einen Schalter einfragen über einen Eingang oder?

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:

Hallo nochmal,

ja sry, hatte mich verdenkt... Reedkontakt ist ja so aufgebaut, dass zwei Drähte nahe zusammen sind und durch einen Magnet endgültig zusammengezogen werden, sodass ein Kontakt entsteht. Reed Relais vergessen wir gleich wieder...

Ich hatte es eigentlich vor über ein Bussystem zu verwirklichen, S88 Bus wäre eine Option, wenn ich mir die Module anschaue die ich zur Verfügung habe sind diese leider auch sehr teuer...

Haste da nen Tipp wo man günstig was findet?

Gruß,
Ludwig

Ludwig98Mueller:
Haste da nen Tipp wo man günstig was findet?

Was mir spontan einfällt:

  • I2C: Vorteil es gibt viele fertige Bausteine (Portexpander usw.); Nachteil konzipiert für kurze Strecken, braucht Hardware (bsp. P82B715P) für längere Strecken. I2C als Hausbus
  • RS485: Geht auch über lange Distanzen, ist aber eigentlich eine Punkt-zu-Punkt-Verbindung, kein Bus. Mit dem Arduino den RS485 Bus nutzen
  • CAN: Wird im Auto verwendet, sollte eigentlich gut funktionieren. Leider habe ich bislang keine praktische Erfahrung damit. Lesestoff

Hallo,

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?

Gruß,
Ludwig

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?