Modellbahn Drehscheibe Position speichern

Guten Morgen zusammen,

Ich bin seit wenigen Tagen aktiv im Arduino geschehen. Programmiere Beruflich auf und zu S7... bringt mir hier aber nichts wie ich feststellen musste - noch eher meine NC Kenntnisse von der Ausbildung (die sich aber sehr in grenzen halten)

Nun zu meinem Projekt:
eine Modellbahndrehscheibe von Handbetrieb auf "Automatikbetrieb" umrüsten.

Habe mir dazu ein Funduino UNO angeschafft mit einem Schrittmotor.

Funuino UNO

Schrittmotor

Anschließend dank Programmierbeispiele eben schnell ein Programm geschrieben.

wahrscheinlich zu kompliziert - aber funktioniert<<

Einzelne Taster stehen für einzelne Positionen an denen eine Lok von der / auf die Scheibe fahren können.
Die Berechnung basiert auf einer Variablen welche die aktuelle Position speichert. Diese ist aber nach dem ausschalten des Boards weg (oder?).
Die Scheibe sollte aber beim einschalten wissen an welcher Stelle sie steht.
Aktuell setzte ich die Variable "aktuellePos" zu beginn auf "0" - d.h. ich muss beim Ausschalten der Anlage immer daran denken die Scheibe auf die Position "0" zu fahren.

Nun meine Lösungen:

Ansatz 1:
Anstatt der "flüchtigen" Variablen in den Eeprom schreiben.
Theoretisch die einfachste Lösung
Da der Hersteller hier nur 10000 Speicherzyklen Garantiert hab ich mal nachgerechnet:
einmal die Woche 5h Modell Bahn spielen dabei ca alle 10min die Drehscheibe drehen.
ergibt 30x pro Woche - im Jahr also ca 1500 Bewegungen
selbst bei 2000 Bewegungen würde das Board also 5Jahre überleben - - damit könnte ich leben.

hierbei muss aber garantiert sein, dass der Wert tatsächlich nur bei einer Änderung geschrieben wird.
und eben dass wäre net wenn das jemand von euch kontrollieren könnte.

Ansatz 2:
Nach mehr als 2Minuten ohne Eingangsbefehl, fährt die Drehscheibe wieder auf ihre Position "0" zurück.
da hab ich keine Ahnung wie ich das Programm technisch einfangen soll, da ich eine Art zweiten Kanal
bräuchte in dem ein Delay von 120000ms herunter zählt. Denn wenn ich das ja in meinem Normalen
Programm reinschreiben würde, wäre das ganze ja für 2Minuten außer Gefecht... und würde dann auf
jeden Fall auf die Position "0" zurück kehren.

Ansatz 3:
Referenzfahrt:
Zu beginn könnte ich die Variable "aktuellePos" auf z.B. 360 setzten und dann schreiben:
if(aktuellePos == 360)
{
????
wie bekomme ich den Schrittmotor dazu nur solange zu fahren bis ein Endschalter anspringt?

Wäre echt cool wenn ihr mir helfen könntet.

Danke Dom

Drehscheibe.ino (8.97 KB)

Schrittmotoren neigen dazu, unter gewissen Umständen Schritte zu "verlieren". Persönlich würde ich da eher auf eine Lösung mit mechanischen Entschaltern oder ähnlichem zur Positions-Erkennung arbeiten. Dann gibt es auch kein Problem, wenn während des Verfahrens mal der Strom ausfällt. In dem Fall brauchst Du ohnehin einen mechanischen Referenz-Punkt-Schalter. Da kannst Du dann auch gleich ein paar mehr für jede Zielposition vorsehen.

Ich kann mir für sowas vorstellen:

  • Reflexlichtschranke
  • Reedrelais/Magnet

Dann hast du wie mgcss schreibt auch den/die nötigen Referenzpunkt(e)

Wie groß ist die Drehscheibe in natura, und gibt's da Möglichkeiten mechanisch Positionsdetektoren anzudocken?

dj-rie:
Wäre echt cool wenn ihr mir helfen könntet.

Mach auf jeden Fall etwas, das langlebig und wartungsfreundlich ist. Also zum Beispiel nichts, das mit Optik zu tun hat (zum Putzen habe ich nicht mal alle 5 Jahre Lust).

Klaus' Anregung mit Reedrelais/Magnet finde ich super.

Gruß

Gregor

PS: Schrittmotor finde ich ungünstig, weil so ein Ding dauernd Strom zieht. Ich würde eher etwas mit Servo(s) anstreben.

Hallo Dom, willkommen im Forum! Kompliment, mal ein ordentlicher Themeneinstieg :slight_smile:

Anstelle Stepper könntest Du auch AccelStepper als Programmbibliothek nutzen, dann gibt es noch Beschleunigungsrampen zusätzlich.

Die S7 kannst Du überwinden :slight_smile: Wenn Du hier im Forum nach "agmue anleitung" suchst, stößt Du auf das Thema endlicher Automat (Ablaufsteuerung).

Zu Ansatz 1: Die vier Positionen passen in ein Byte. Ein EEPROM hat mehrere davon. Wenn Du alle 5 Jahre die Speicheradresse verschiebst, überlebt Dich der Arduino. Möchtest Du die Scheibe vererben oder in 5 Jahren vergeßlich, kannst Du auch Adafruit I2C Non-Volatile FRAM Breakout - 256Kbit / 32KByte verwenden.

dj-rie:
Die Scheibe sollte aber beim einschalten wissen an welcher Stelle sie steht.

Daraus entsteht meinen Ansatz 4: Im drehenden Teil befestigst Du einen kleinen Laser, der durch Löcher im festen Teil vier Fototransistoren entsprechend den vier Anschlußgleisen trifft. (Andere berührungslose Sensoren gehen auch!) Da im Normalfall der drehende Teil nicht irgendwo sondern gegenüber einem Gleis steht, sollte beim Einschalten ein Fototransistor beleuchtet sein. Damit ist die Position bekannt. Ist kein Fototransistor beleuchtet, so ist ein Suchlauf zu einem Fototransitor als Referenz notwendig. Die Verwendung eines Schrittmotors macht aber dennoch Sinn, da die Bewegung kurz vor dem Ziel abgebremst werden kann. Mit ein paar Sollschritten mehr als notwendig schaltest Du ab, wenn der Laser den Transitor trifft.

wie bekomme ich den Schrittmotor dazu nur solange zu fahren bis ein Endschalter anspringt?

loop() sollte so schnell sein wie ein Schritt deines Schrittmotors dauert, oder schneller (wenn der Motor grade steht). Dann fährst du einen Schritt, falls der Endschalter noch nicht erreicht ist. Oder falls du deine gewünschte Position noch nicht erreicht hast.

Einfach, oder ?

michael_x:
loop() sollte so schnell sein wie ein Schritt deines Schrittmotors dauert, oder schneller (wenn der Motor grade steht). Dann fährst du einen Schritt, falls der Endschalter noch nicht erreicht ist. Oder falls du deine gewünschte Position noch nicht erreicht hast.

Einfach, oder ?

ja tatsächlich das wäre ein guter Lösungsansatz.

mgcss:
Schrittmotoren neigen dazu, unter gewissen Umständen Schritte zu "verlieren".

ist das wirklich so???
es versteht sich das die Gleise möglichst genau zueinander ausgerichtet sein sollten wenn ein Zug darüber rollt.

Klaus_ww:
Wie groß ist die Drehscheibe in natura, und gibt's da Möglichkeiten mechanisch Positionsdetektoren anzudocken?

Im Durchmesser 111mm in der Höhe nur 4mm

dj-rie:
[Größe ist] Im Durchmesser 111mm in der Höhe nur 4mm

Wie möchtest Du das bastlerisch umsetzen? Wie wird die Drehscheibe denn momentan betätigt?

Gruß

Gregor

Mit einem Schrittmotor sehe ich das etwas schwierig da diese Nativ zuwenig Schritte haben um so genau aufzulösen.
Abhilfe schafft da ein Getriebe. Du kannst Den Schrittmotor bei erreichter Position auch ausschalten (Strom wegnehmen) Dann kannst Du aber keinen Microschritt-Treiber verwenden.

Du kannst aber auch einen Gleichstrommotor mit Getriebe nehmen.

Bei einem Schrittmotor brauchst Du einen Sensor für den nullpunkt. Von diesem machs Du x Schritte zur ersten Position usw. Bei einem Gleichstrommotor brauchst Du für jede Position einen Sensor.

Sensoren können sein:
Endschalter, Gabellichtschranken, Reflexionslichtschranken, Magnet und Hallsensor,

Gabellichtschranken sind genügend Schnutzresistent daß sie nicht verstauben. Ansonsten hilft da ein kurzer Sprüher Druckluft.

Grüße Uwe

Hallo Uwe,
dieser Motor hat ein Getriebe. Aus der funduino-Anleitung: "Der Motor entwickelt dabei ein relativ hohes Drehmoment. Dies wird durch ein Getriebe realisiert, welches innerhalb des Metallgehäuses vor dem eigentlichen Schrittmotor verbaut wurde. Dadurch wird es in dieser kompakten Bauweise überhaupt erst möglich, dass sich eine ganze Umdrehung der Antriebswelle auf 2048 Einzelschritte aufteilen lässt. Ein kleiner daraus resultierender Nachteil ist die langsame maximale Drehgeschwindigkeit."

111mm*pi/2048 = 1mm

Das dürfte trotz Getriebe nicht reichen, die Schienen exakt voreinander zustellen.

agmue:
Hallo Uwe,
dieser Motor hat ein Getriebe. Aus der funduino-Anleitung: "Der Motor entwickelt dabei ein relativ hohes Drehmoment. Dies wird durch ein Getriebe realisiert, welches innerhalb des Metallgehäuses vor dem eigentlichen Schrittmotor verbaut wurde. Dadurch wird es in dieser kompakten Bauweise überhaupt erst möglich, dass sich eine ganze Umdrehung der Antriebswelle auf 2048 Einzelschritte aufteilen lässt. Ein kleiner daraus resultierender Nachteil ist die langsame maximale Drehgeschwindigkeit."

111mm*pi/2048 = 1mm

Das dürfte trotz Getriebe nicht reichen, die Schienen exakt voreinander zustellen.

Kommt drauf an; wenn die verschiedenen äußeren Schienen genua im 1mm Raster sind dann gehts.

Grüße Uwe

Hallo,

dein Bild führt zu einer Fleischmanndrehscheibe 6150: FLM 6150 Handdrehscheibe – MoBaDaten

Ich würde einen Antrieb verwenden, der die Rastungen verwendet. Da könnte man einen Gleichstromgetriebe- oder auch den Schrittmotor mit einer Achse mit gewisser Flexibilität verwenden. Der Motor braucht die Position nur ungefähr zu treffen, die Rastung sorgt für die Präzision.
Außerdem wird der Fahrstrom auf das gewählte Gleis geschaltet. Das könntest du zum Auslesen der aktuellen Position verwenden.

Die Beschreibung sagt:

  • Sie versorgt die gewünschten Gleisabgänge jeweils nur dann mit Fahrstrom, wenn die Drehbühne dorthin gedreht wird und einrastet

Wie rastet die Drehscheibe ein?

Da die Drehscheibe 24 Positionen hat sind das 15°

Grüße Uwe

kulturbereicherer:
Aber einen vielleicht guten Tipp kann ich dir geben. F-RAM
Adafruit SPI Non-Volatile FRAM Breakout - 64Kbit / 8KByte : ID 1897 : $5.95 : Adafruit Industries, Unique & fun DIY electronics and kits

Ja, finde ich auch, siehe #4, wobei ich I2C SPI vorziehen würde. Das hängt aber von der restlichen Peripherie ab.

uwefed:
Wie rastet die Drehscheibe ein?

Zum "Rasten" gebraucht die Drehscheibe einen kleinen Plastikpinöbl (mir fällt kein anderes Wort ein) der unterhalb der Gleisabgänge in ein kleines Loch rutscht.
Ich habe zusätzlich zu dem Getriebe im Schrittmotor noch zwei Zahnräder genommen mit einem Verhältnis von 1:1,5
Dadurch entsprechen exakt 256 Schritte des Motors - 15° der Drehscheibe.

agmue:
Zu Ansatz 1: Die vier Positionen passen in ein Byte. Ein EEPROM hat mehrere davon. Wenn Du alle 5 Jahre die Speicheradresse verschiebst, überlebt Dich der Arduino.

Da hast du Recht. So hab ich es jetzt auch gemacht. Funktioniert hervorragend.

mgcss:
Schrittmotoren neigen dazu, unter gewissen Umständen Schritte zu "verlieren".

Theoretisch sollte sich das doch aber ausgleichen, da die Drehscheibe immer den kürzesten Weg wählt, also manchmal rechtsrum und manchmal linksrum läuft.