Arduino: Schrankensteuerung - DCC-Ansteuerung für Betrieb und Justage

Bereich für alle Themen rund um die Modellbahn-Elektronik und elektr. Umbauten für Analogbetrieb.
Benutzeravatar

Threadersteller
MicroBahner
InterCityExpress (ICE)
Beiträge: 2436
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 69

Arduino: Schrankensteuerung - DCC-Ansteuerung für Betrieb und Justage

#1

Beitrag von MicroBahner »

Hallo liebe Stummies,
dieser Thread wendet sich an alle, die sich mit der Programmierung des Arduino befassen (wollen).

Auslöser für mich war der Beitrag von Karin (Tauberspatz), die ja ganz neu in der Programmierung ist, und sich eine Schrankensteuerung basteln wollte.
Da der Arduino hier ja recht beliebt ist, habe ich mir auch mal einen kleinen Arduino Micro besorgt, um mich ein wenig in die Besonderheiten des Arduino einzuarbeiten. Für den Einsteiger bietet das doch wesentlich weniger Hürden - vor allem, da er sich nicht direkt um die Hardwareprogrammierung der AVR Prozessoren kümmern muss.

Mich interessiert nun, ob man eine Schrankensteuerung mit Servos nicht doch einigermaßen ruckelfrei hinbekommt. Servos sind ja eigentlich nicht für so langsame Bewegungen konzipiert. Ihr eigentliches Ziel ist, eine vorgegebene Position möglichst schnell anzufahren und dann aktiv zu halten.
Ausserdem dachte ich, es wäre vielleicht für den einen oder anderen interessant, wie man etwas mehr aus dem Arduino herauskitzeln kann. Besonders dadurch, dass man den bei Anfängern doch sehr beliebten delay-Befehl vermeidet (ja, wenn's exakt sein soll, geht's sogar ohne millis() und micros() :D ).

Bei Interesse würde ich dann hier mit euch gemeinsam eine Schrankensteuerung entwickeln, so dass jeder am Ende das Programm auch wirklich versteht und an eigene Bedürfnisse anpassen kann. Das wird sich sicher eine Weile hinziehen, ist also nichts für Leute, die ihre Schranke schon bald einbauen wollen. Damit sollte es aber auch Allen möglich sein 'mitzukommen' und das ganze dann auch wirklich nachvollziehen zu können. Rückfragen und Diskussionen sind ja auch ausdrücklich erwünscht.

Wer sich schon etwas besser mit dem Programmieren auskennt ist dann auch gern aufgerufen, sich hier einzubringen, denn ich möchte wahrlich nicht von mir behaupten, die Programmierweisheit 'mit Löffeln gefressen' zu haben :roll: . Allerdings gibt es ja bekanntermaßen viele Wege nach Rom, und auf einen werden wir uns dann schon einigen. Im Zweifelsfalle bestimme ich dann wo's langgeht :mrgreen: .

Ziel soll eine Steuerung mit folgenden Eigenschaften sein:
  • Bewegung der Schranken mit Servos (mal seh'n ob das ruckfrei klappt? - bin selbst gespannt)
  • je ein eigener Servo für jeden Schrankenbaum, so dass leicht unterschiedliche Bewegungen möglich sind. Ausserdem lassen sich so die Endpositionen für jeden Schrankenbaum getrennt einstellen. Das ist auch mechanisch einfacher, als ein Servo für beide Schrankenbäume.
  • Einfache Einstellung der Endpositionen der Servos mit 1 Taster je Servo
  • ein einfacher Eingang (Schalter) zum Schliessen/Öffnen der Schranken. Bei einer 2-gleisigen Strecke kann dass dann einfach per Belegtmelder angesteuert werden. Eine spätere Erweiterung für 1-gleisige Strecken ist denkbar, dann geht das aber nicht mehr mit einem Eingang.
  • Impulsausgung zur Ansteuerung eines Läutewerkes
  • Ausgang für Wechselblinker mit weichem Auf- Abblenden
Ich werde meinen Arduino Micro dafür verwenden, sollte aber genauso mit jedem anderen funktionieren.
(Einen 'Mini'-Klon gibt's schon ab 4,50€ - der hat dann allerdings noch keinen direkten USB-Anschluß zur Programmierung). Die Mechanik werde ich hier nicht aufbauen, aber das könnt ihr alle ja perfekt selbst.

Den Sketch würden wir dann hier schrittweise von einem ersten Test der Servoansteuerung bis zur kompletten Schrankensteuerung ausbauen. Es dürfte reichen, den jeweils aktuellen Code immer hier einzustellen. So umfangreich wird es nicht werden, dass wir dazu eine spezielle Codeverwaltung benötigen.

Ich würde mich freuen, wenn es ein paar Interessenten gäbe, die mitmachen. Ansonsten werde ich das erstmal für mich realisieren, und dann gegebenenfalls irgendwann :redzwinker: das Endergebnis vorstellen.
Zuletzt geändert von MicroBahner am Fr 23. Okt 2015, 16:27, insgesamt 18-mal geändert.

Benutzeravatar

garti62
InterCity (IC)
Beiträge: 597
Registriert: Di 8. Nov 2011, 20:59
Nenngröße: H0
Stromart: digital
Steuerung: MS2
Gleise: Selbstbau
Wohnort: Harz
Alter: 58

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#2

Beitrag von garti62 »

Hallo Franz-Peter,

interessante Idee, für die es bestimmt so einige Interessenten gibt. Du weißt ja, daß ich damals meine Schranken mit einem Schrittmotor angetrieben habe und es damit recht "ruckelfrei" lief. Die Mechanik war zugegebenerweise etwas grobschlächtig, aber das kann man ja durchaus filigraner lösen. Ich hab mal zwei links zu diesem Thema rausgesucht, einfache Schrittmotorsteuerung mit Arduino unter Verwendung dieses unipolaren Schrittmotors mit integriertem Getriebe. Bewegt sich preislich in der selben Größenordnung wie ein Servo. Wäre vielleicht eine Überlegung wert, oder?

Schöne Grüße
Ulli
erste Versuche: Weichenbau

Benutzeravatar

Schachtelbahner
CityNightLine (CNL)
Beiträge: 1676
Registriert: Fr 6. Apr 2012, 12:55
Nenngröße: H0
Stromart: DC
Steuerung: Selectrix
Gleise: Selbstbau/Tillig Eli
Wohnort: RLP
Alter: 73
Kontaktdaten:
Deutschland

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#3

Beitrag von Schachtelbahner »

Hi Franz Peter.

Die Sache ist nach meinem Geschmack, ich bin dabei. Mein BÜ wird ja noch mit Hand gesenkt und da hebe ich jedes mal Angst dass bei Fremo Treffen die Schranke überdreht wird. Also dein Werk kommt gerade recht.
Grüße von Kurt
dem Schachtelbahner

Nicht vom Leben träumen, sondern Träume erleben.
http://www.fremo-saarlorlux.de/
30 Videos auf meinem Kanal
http://www.youtube.com/results?search_q ... hner&sm=12

Benutzeravatar

Der Ruinenbaumeister
EuroCity (EC)
Beiträge: 1197
Registriert: Fr 1. Apr 2011, 13:40
Nenngröße: H0
Stromart: AC
Kontaktdaten:

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#4

Beitrag von Der Ruinenbaumeister »

Ich frage mich, ob man nicht das Läutwerk ins Programm integrieren könnte. Der Arduino kann schließlich auch direkt einen Lautsprecher ansteuern.
Gruß
Clemens

Mein Blog.


MiKra95
S-Bahn (S)
Beiträge: 12
Registriert: Di 19. Mai 2015, 22:50
Nenngröße: N
Stromart: digital
Wohnort: Mainz
Alter: 41
Deutschland

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#5

Beitrag von MiKra95 »

Servus Franz-Peter,

die Sache hier gefällt mir - einerseits wollte ich mich ohnehin schon mal mit Arduino und co beschäftigen, andererseits soll's bei mir auch einen BÜ geben.
Bin dabei! :)

Gruß
Micha

Benutzeravatar

Threadersteller
MicroBahner
InterCityExpress (ICE)
Beiträge: 2436
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 69

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#6

Beitrag von MicroBahner »

Hallo,
erstmal vielen Dank für euer Interesse an meinem Projektvorschlag.

@Ulli: Die Ansteuerung mit einem Schrittmotor ist sicher eine interessante Alternative. Was mich ein wenig abschreckt, ist der hohe Bedarf an IO's. Sollen beide Schrankenbäume unabhängig angesteuert werden, braucht man allein dafür 8 IOs. Gut - ist kein grundsätzliches Problem, gegebenenfalls müsste man die IO_s über I2C oder Schieberegister erweitern. Dürfte aber auch so reichen, wenn man die Analogeingänge mitbenutzt.
Bei Schrittmotoren gibt man ja keine absoluten Positionswerte aus, weshalb man einen Referenzpunkt benötigt. Wie hast Du das gelöst?
Dass ich mit Servo's starten wollte, hat im wesentlichen 2 Gründe: Einmal interessiert es mich einfach, ob man das zufriedenstellend hinbekommt. Wobei da die Qualität des Servos sicher eine große Rolle spielt - mit dem Billigservo, mit dem ich es früher schon mal probiert hatte geht es definitiv nicht. Ein Digital-Servo sollte es schon sein. Zum zweiten will ich ein bisschen die Ansteuerungsmöglichkeiten eines Servos demonstrieren. Man kann mit Servo's in unserem Hobby einfach eine ganze Menge machen. Diese Schrittmotore werden ich mir aber auch mal besorgen.

@Clemens: Dass man mit dem Arduino Töne erzeugen, und an einem Lautsprecher ausgeben kann habe ich gelesen. Was da aber möglich ist, ist doch recht eingeschränkt und ich wüsste nicht wie man damit einen halbwegs vernünftigen Glockenton erzeugen kann. Kennst Du da noch weitere Möglichkeiten?

@Kurt+Micha: Da haben wir also schon 2 Interessenten :D :D . Habt ihr schon mal was mit Arduino gemacht, oder müsstet ihr die HW erst noch beschaffen? Es wäre gut zu wissen, wo bei Euch die 'Ausgangsbasis' ist.


Nach dem Vorschlag von Ulli hier einmal eine Gegenüberstellung der Bü-Antriebsmöglichkeiten aus meiner Sicht:
  1. Servos:
    Vorteile:
    • Einfache Ansteuerung durch den Arduino. Für jeden Servo ist nur 1 Port notwendig
    • Es werden absolute Positionsinformationen ausgegeben, die der Servo dann eigenständig anfährt. Daher ist keine Positionsrückmeldung erforderlich
    • Einfacher mechanischer Aufbau
    Nachteile:
    • Ein Servo ist konstruktionsbedingt eigentlich nicht für langsame gleichmäßige Bewegung ausgelegt. Es kann daher zu Rucklern kommen
    • Die Auswahl des Servos ist kritisch, da nicht jeder (billige) Servo geeignet ist
    • Beim Start des Programms kann es zu einer schnellen Bewegung kommen, wenn sich der Servo nicht in der Position befindet, die die Software annimmt.
  2. Schrittmotor:
    Vorteile:
    • Günstig, der von Ulli vorgeschlagene Schrittmotor kostet nur 4,95€
    • Langsame, gleichmäßige Bewegung bei genügend kleiner Schrittweite möglich. Da es keinen Anschlag gibt, lässt sich die Schrittweite durch Untersetzung im Prinzip beliebig klein machen ( der vorgeschlagene Motor hat 2048Schritte/Umdrehung, was locker ausreichen sollte)
    Nachteile:
    • Aufwändigere Ansteuerung, 4 Ports je Motor
    • Es werden nur relative Positionsinformationen ausgegeben. Es ist daher eine Positionsrückmeldung erforderlich, oder zumindest ein Referenzpunkt mit Rückmeldung, der beim Start des Programms angefahren wird
    • Durch die Positionsrückmeldung aufwändigere Mechanik
  3. Getriebemotor:
    Vorteile:
    • Durch kontinuierliche Bewegung des Motors prinzipbedingt ruckelfrei (wenn die Mechanik nicht hakt :wink: ).
    • rel. einfache Ansteuerung über 2 Ports:1x PWM für Motordrehzahl, 1xDigi für Drehrichtung.
    • Noch günstig, kleine Getriebemotoren gibt es schon für ca 6€. z.B. hier
    Nachteile:
    • Man braucht einen zusätzlichen Ansteuerbaustein, da der in den Getriebemotoren normalerweise nicht integriert ist.
    • Es wird nur eine Motorspannung, aber keine Positionsinformation ausgegeben. Daher ist im Betrieb immer eine Positionsrückmeldung erforderlich. Entweder kontinuierlich über ein angeflanschtes Poti, oder über 2 Endschalter.
    • Aufgrund der Positionsrückmeldung aufwändige Mechanik.
Ich würde vorschlagen, dass wir erstmal mit einem Servo starten. Der Aufbau ist da definitiv am einfachsten. Klar, je länger der Schrankenbaum, um so kritischer wird es mit dem Ruckeln, denn da fällt es mehr auf. Erste Versuche mit einem kleinen Digitalservo waren ermutigend, eine moderne Halbschranke sollte auf jeden Fall hinzubekommen sein. Wie das mit längeren Schrankenbäumen wird muss sich zeigen. Ich werde die nächsten Tage mal ein Video von meinen ersten Versuchen einstellen.
Mit den Erfahrungen, die dabei gewonnen werden, kann man dann auch andere Servoanwendungen schreiben. Z.B. eine Weichensteuerung - 8 Servos/Weichen sollte ein Arduino locker schaffen.

Benutzeravatar

Der Ruinenbaumeister
EuroCity (EC)
Beiträge: 1197
Registriert: Fr 1. Apr 2011, 13:40
Nenngröße: H0
Stromart: AC
Kontaktdaten:

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#7

Beitrag von Der Ruinenbaumeister »

Ich kenne mich mit der Tonwidergabe durch Arduinos nicht aus, aber ich habe schon Projekte gesehen, bei der sie genutzt wurde. Ich würde mich daher nach den Tutorials im Internet richten.

Bei den Antrieben würden mir noch zwei Konzepte einfallen:
  • Pneumatisch gedämpfter Doppelspulenantrieb:
    Vorteile:
    • Einfache Ansteuerung
    Nachteile:
    • Lautstärke
  • Memorydraht:
    Vorteile:
    • Lautlos
    • Einfache Ansteuerung: 1 Port reicht, PWM ist optional
    Nachteile:
    • Geschwindigkeit nur grob einstellbar
    • Wenige Bezugsquellen für Drähte
Gruß
Clemens

Mein Blog.

Benutzeravatar

moppe
Metropolitan (MET)
Beiträge: 4465
Registriert: So 7. Aug 2011, 08:16
Nenngröße: H0
Stromart: DC
Steuerung: G&R ana/digi - Z21/Lenz/ESU
Gleise: 2L
Wohnort: Norddeutsche Halbinsel.
Kontaktdaten:
Dänemark

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#8

Beitrag von moppe »

Billigservos für Schranken ist kein Problem, schau mal hier:


Gar nicht mit Arduino, sondern PIC und der Sound ist von ein EPROM...


Klaus
"Meine" Modellbahn: http://www.modelbaneeuropa.dk
Dänisches Bahnforum: http://www.baneforum.dk

Benutzeravatar

Schachtelbahner
CityNightLine (CNL)
Beiträge: 1676
Registriert: Fr 6. Apr 2012, 12:55
Nenngröße: H0
Stromart: DC
Steuerung: Selectrix
Gleise: Selbstbau/Tillig Eli
Wohnort: RLP
Alter: 73
Kontaktdaten:
Deutschland

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#9

Beitrag von Schachtelbahner »

Hallo in die Runde.

Um alles zu sagen, ich habe davon keine Ahnung, wissen weniger als null. Ich weiß nur dass es mit den Arduino geht und das ganz gut und der Servo gar nicht so kritisch ist, hoffe ich jedenfalls. Irgendwelche Programme habe ich auch nicht.

Hier ist mein BÜ mit einem schönem langen Baum, zu Zeit noch mit Handbetrieb.

https://www.youtube.com/watch?v=8fyoAbCPUWE

@ Klaus, die Schranke fällt zu schnell, das muss langsamer sein.
Grüße von Kurt
dem Schachtelbahner

Nicht vom Leben träumen, sondern Träume erleben.
http://www.fremo-saarlorlux.de/
30 Videos auf meinem Kanal
http://www.youtube.com/results?search_q ... hner&sm=12


Eisenhorn
Ehemaliger Benutzer

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#10

Beitrag von Eisenhorn »

Moin,

da will ich mich doch auch mal einklinken.

Die Arduino Servo lib ist ja schon nicht schlecht, als ersten Ansatz könnte man mittels schleife die Position ändern. Ist halt mehr das quick and dirty
Prinzip. Bessere wäre ein Timerinterrupt bei der man regelmässig den Anfahrpunkt ändert.

Ansonsten baut man halt was auf die Timer lib auf.

Man sollte bei Programmieren natürlich drauf achten das es auf möglichst vielen Boards funktioniert.

So das war mal mein Einstiegsbeitrag.

Gruß,
Lars

Benutzeravatar

Threadersteller
MicroBahner
InterCityExpress (ICE)
Beiträge: 2436
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 69

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#11

Beitrag von MicroBahner »

Hallo Clemens,
Der Ruinenbaumeister hat geschrieben:Ich kenne mich mit der Tonwidergabe durch Arduinos nicht aus, aber ich habe schon Projekte gesehen, bei der sie genutzt wurde. Ich würde mich daher nach den Tutorials im Internet richten.
Genau diese Tutorials haben mich zu meiner Einschätzung gebracht. Was man da zu hören bekommt, klingt nicht so, als könnte man daraus einen vernünftigen Glockenton zaubern.

Zu deinen Konzepten: einen pneumatischen Doppelspulenantrieb kann man wohl kaum selbst bauen. Hast Du da Beschaffungsquelllen?
Der Memorydraht war mal eine Zeit bei der Moba sehr 'In' für langsame Bewegungen, ist aber irgendwie aus der Mode gekommen. Könnte an den Beschaffungsproblemen liegen, die Du ja auch ansprichst.


Hallo Klaus,
Wie ich schon ganz am Anfang geschrieben habe: es gibt viele Wege nach Rom :D :wink: . Klar, was ich hier vorhabe ist nicht der einzige Lösungsweg. Ich bin aber wie Kurt der Meinung, dass sich deine Schranke etwas zu schnell bewegt. Und je langsamer es gehen soll, um so mehr kommt die Qualität der Servos ins Spiel.


Hallo Kurt,
gehe ich dann recht in der Annahme, dass Du eher am Endergebnis interessiert bist, als am Weg dorthin ? :redzwinker:


Hallo Lars,
Eisenhorn hat geschrieben:Bessere wäre ein Timerinterrupt bei der man regelmässig den Anfahrpunkt ändert.
Das ist das Ziel, und ich habe auch schon einen Test-Sketch geschrieben, der so arbeitet. Man kann sich da in den Timer der Servolib mit einklinken, so dass man den Anfahrpunkt exakt in dem Zyklus ändert, in dem die Servolib die Impulse ausgibt. Da die Impulse in der Lib softwaremäßig erzeugt werden, lässt sich ein kleiner Jitter nicht vermeiden, und gute digitale Servos reagieren bereits darauf. Gegebenenfalls werde ich auch den Weg gehen die Impulse mit der HW des Timers zu erzeugen. Dann kann man zwar nur 2 Servos ansteuern, und ist auch auf fixe Ports angewiesen. Der Jitter sollte dann aber verschwinden.

Allerdings war die eigentliche Idee dieses Threads, auch die Arduinointeressierten mitzunehmen, die noch nicht so fit im Programmieren sind, und deshalb hätte ich den Sketch dann schrittweise entwickelt und erstmal mit der eher einfachen 'Schleifenmethode' angefangen. War halt so ein bisschen wie ein Tutorial gedacht.
Das Interesse daran hält sich bisher aber noch in engen Grenzen :roll:

Benutzeravatar

SiKZorro
InterRegio (IR)
Beiträge: 239
Registriert: Mi 10. Mai 2006, 12:16
Nenngröße: H0
Stromart: digital
Steuerung: ECOS und CS2
Gleise: K-Gleis, LGB
Wohnort: Karlsfeld
Alter: 61
Kontaktdaten:
Kroatien

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#12

Beitrag von SiKZorro »

Hallo,

genau dieses Projekt hatte ich mir für den Arduino auch vorgenommen.
Leider hat sich gezeigt das meine Programierfähigkeiten doch begrenzt sind. :oops:

Ich würde aber gerne als Betatester fungieren, Bahnübergang, Arduino und Servos
stehen bereit.

Grüße

Zvoni


spielbahn
Ehemaliger Benutzer

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#13

Beitrag von spielbahn »

MicroBahner hat geschrieben:.......
Allerdings war die eigentliche Idee dieses Threads, auch die Arduinointeressierten mitzunehmen, die noch nicht so fit im Programmieren sind, und deshalb hätte ich den Sketch dann schrittweise entwickelt und erstmal mit der eher einfachen 'Schleifenmethode' angefangen. War halt so ein bisschen wie ein Tutorial gedacht.
Das Interesse daran hält sich bisher aber noch in engen Grenzen :roll:
Bis jetzt viele gute Worte - wann geht es los?
Werde - soweit mir möglich - mithelfen....

Benutzeravatar

Threadersteller
MicroBahner
InterCityExpress (ICE)
Beiträge: 2436
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 69

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#14

Beitrag von MicroBahner »

Hallo Zvoni,
super wenn Du dich einbringst. Betatester braucht man immer :D . Vielleicht kannst Du ja im Laufe des Projekts auch deine Programmierfähigkeiten noch verbessern :wink: .
Kannst Du ein bisschen zu deinem Testequipment sagen, vielleicht ein Bild einstellen, wie deine Schranke aufgebaut ist. Welchen arduino und was für Servos hast Du?


Hallo Uli,
spielbahn hat geschrieben:Bis jetzt viele gute Worte - wann geht es los?
oh je, jetzt auch noch Streß :mrgreen: :mrgreen: . Ich denke, Du gehörst auch nicht unbedingt zu denen, die hier ein Tutorial bräuchten :redzwinker:
Nach den Alternativvorschlägen, die bisher gemacht wurden, werde ich meinen Schaltplan bezüglich der verwendeten Ports nochmal überdenken um in 'zukunftssicherer' zu machen. Dann stelle ich ihn mit einem ersten Sketch ein. Ich bin mir nur noch nicht sicher, ob es Sinn macht, im Sinne eines Tutorials erstmal mit einfachen Programmiertechniken zu beginnen. Wenn eh nur 'alte Hasen' dabei sind, könnte man ja auch gleich 'in die Vollen' gehen :wink: . Vielleicht hätte ich nicht 'Gemeinschaftsprojekt' drüberschreiben sollen. Das klingt so nach 'Arbeit für alle' :mrgreen: .Das hier ist der Sketch zu dem Video unten, mit dem ich Wechselblinker und Servoansteuerung mal getestet habe:
schrankensteuerung_05.zip

@all
Hier mal ein kleines Video zu meinen derzeitigen Versuchen. Ein improvisierter 'Schrankenbaum' ist direkt am Servohebel befestigt. Links unten sieht man auch 2 Leds, die als Wechselblinker fungieren. Eine richtige Ablaufsteuerung gibt es noch nicht, die kommt im Laufe des Projektes.


Benutzeravatar

SiKZorro
InterRegio (IR)
Beiträge: 239
Registriert: Mi 10. Mai 2006, 12:16
Nenngröße: H0
Stromart: digital
Steuerung: ECOS und CS2
Gleise: K-Gleis, LGB
Wohnort: Karlsfeld
Alter: 61
Kontaktdaten:
Kroatien

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#15

Beitrag von SiKZorro »

MicroBahner hat geschrieben:Kannst Du ein bisschen zu deinem Testequipment sagen, vielleicht ein Bild einstellen, wie deine Schranke aufgebaut ist. Welchen arduino und was für Servos hast Du?
Hallo Franz-Peter,

ich habe den Bahnübergang von Faller, den muss ich noch auf Servobetrieb umbauen. Servos habe ich die von ESU!
Zum programmieren habe ich einen Arduino UNO.
Unter die Anlage wollte ich später aber billige China-Klone setzen.

Grüße

Zvoni

Benutzeravatar

Schachtelbahner
CityNightLine (CNL)
Beiträge: 1676
Registriert: Fr 6. Apr 2012, 12:55
Nenngröße: H0
Stromart: DC
Steuerung: Selectrix
Gleise: Selbstbau/Tillig Eli
Wohnort: RLP
Alter: 73
Kontaktdaten:
Deutschland

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#16

Beitrag von Schachtelbahner »

Hallo Franz Peter.

Natürlich bin ich primär am Ergebnis interessiert, aber der Weg dorthin sollte man zumindest auch verstehen. Was ich nicht machen will ist an den Gedärmen der Bausteine rumbasteln, sprich die IC umprogramieren, für mich ist wichtig der Programmablauf und die Befehle dazu, alles andere geht mir zu Tief in die Materie wozu mir die Grundlegenden Kenntnisse fehlen. So ganz null ist es nicht bei mir. Die Befehlskette ist ja fast wie Basic und damit hatte ich vor 35 Jahren mal mit rumgebastelt.

Zu deinem Versuchsaufbau. Es funktioniert ja wunderbar mit dem Servo, kein ruckeln, kein wackeln. Beim ersten Durchlauf ist auch die Geschwindigkeit Optimal. beim zweiten zu schnell. Jetzt müsste nur noch eine Glocke läuten, aber eine richtige, keine aus der Konserve. So Modern bin ich nun doch nicht, so richtig Altbacken finde ich da besser.
Grüße von Kurt
dem Schachtelbahner

Nicht vom Leben träumen, sondern Träume erleben.
http://www.fremo-saarlorlux.de/
30 Videos auf meinem Kanal
http://www.youtube.com/results?search_q ... hner&sm=12


PaSchu
Ehemaliger Benutzer

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#17

Beitrag von PaSchu »

Die erste Geschwindigkeit ist mir zu langsam, die zweite ist schon realistischer.
Wobei sich die Frage stellt wie wird die Schranke im Original angetrieben?


Eisenhorn
Ehemaliger Benutzer

Re: Arduino: Schrankensteuerung mit Servo - ein Gemeinschaftsprojekt?

#18

Beitrag von Eisenhorn »

MicroBahner hat geschrieben:
Allerdings war die eigentliche Idee dieses Threads, auch die Arduinointeressierten mitzunehmen, die noch nicht so fit im Programmieren sind, und deshalb hätte ich den Sketch dann schrittweise entwickelt und erstmal mit der eher einfachen 'Schleifenmethode' angefangen. War halt so ein bisschen wie ein Tutorial gedacht.
Das Interesse daran hält sich bisher aber noch in engen Grenzen :roll:
Hallo Franz-Peter,

Dann hatte ich da was nicht ganz verstanden :D
Dann sollte wir/du darauf achten Möglichst viele Standart Arudino Sachen zu nutzen, und wie im ersten Beitrag geschrieben auf Möglichst vielen Boards laufen lassen.


Viele Grüße,
Lars

Benutzeravatar

Threadersteller
MicroBahner
InterCityExpress (ICE)
Beiträge: 2436
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 69

Arduino: Projekt Schrankensteuerung - Gedanken zur Servoansteuerung

#19

Beitrag von MicroBahner »

Hallo,
Schachtelbahner hat geschrieben:Beim ersten Durchlauf ist auch die Geschwindigkeit Optimal. beim zweiten zu schnell.
PaSchu hat geschrieben:Die erste Geschwindigkeit ist mir zu langsam, die zweite ist schon realistischer.
:D :D Man sieht eindeutig, dass das am Ende einstellbar sein muss :redzwinker:

@Zvoni: Wenn Du die Schranke umbaust, solltest Du darauf achten, dass für die komplette Schrankenbewegung auch möglichst der ganze Schwenkbereich des Servos genutzt wird. Sonst verstärkst Du das ruckeln. Klar, etwas Reserve für die Justierung braucht man natürlich. Bei meinem Testvideo ist der Schrankenbaum direkt befestigt, nutzt als 90° der Bewegung. Weniger sollte es nicht sein. Vielleicht kannst Du mit dem Testsketch ja schonmal deine Servos ausprobieren. Die vorläufige Schaltung siehst Du hier, da kannst Du erkennen, wo die Bedientaster und die Servos angeschlossen werden. Die Potis und die Leds brauchst Du noch nicht. Im Testsketch wird die Bewegung mit den Tastern an D8 und D9 gestartet, und die Geschwindigkeit mit dem Schalter an D7 verändert.
In meinem arduino ist ein anderer ATMega verbaut als bei dir, es müsste aber trotzdem funktionieren.
China Klone sollten kein Problem sein, ich habe nichts anderes :redzwinker: .

@Kurt: Am Ende soll schon ein Sketch entstehen, den man ohne weitere Änderungen einsetzen kann. Allerdings musst Du den dann schon bei dir in den arduino IC übertragen. Gut, außer dem passenden arduino und der IDE braucht man nichts dazu.
Schachtelbahner hat geschrieben:aber der Weg dorthin sollte man zumindest auch verstehen.
Ich werde unten noch einige Gedanken zur Servoansteuerung zum Besten geben :wink:
Edit: noch zur Glocke: geplant ist ein Impulsausgang für die Glocke. Da kann man dann dranhängen was man will - entweder ein kleines Soundmodul, oder per Relais auch eine 'echte' Glocke.

@PaSchu: die Geschwindigkeit muss sicher einstellbar sein. Eine moderne Halbschranke bewegt sich sicher anders als ein langer handgekurbelter Schrankenbaum

@all:
Nun noch ein paar Gedanken zur Ansteuerung der Servos - insbesondere in unserem Fall, wo sie sich langsam bewegen sollen.
( Vorsicht harter Stoff :mrgreen: :mrgreen: )

Grundprinzip
Wie Servos grundsätzlich angesteurt werden dürfte inzwischen bekannt sein, dass wurde auch hier im Forum schon öfter thematisiert. Ein Impuls von (nominal) 1-2ms Länge, der alle 20ms wiederholt wird. Die Länge des Impulses bestimmt die Position des Servos. Ändert sich die Impulslänge, fährt der Servo selbständig die neue Position an. Und das tut er immer mit seiner maximalen Geschwindigkeit. Die Stellgeschwindigkeit kann man nicht beeinflussen! Wollen wir die neue Position langsam erreichen, müssen Zwischenschritte eingefügt werden. Sind das nur wenige, so wird der Servo sich von Schritt zu Schritt mit seiner maximalen Geschwindigkeit bewegen um dort kurz anzuhalten - es ruckelt.
Für eine möglichst kontinuierliche Bewegung müssen also so viel Zwischenschritte wie möglich eingeführt werden, wobei Positionsabstand und Zeit zwischen den Schritten konstant sein muss. Schneller als alle 20ms können wir dem Servo prinzipbedingt keine Positionsinfo übermitteln. Für ein optimales Ergebnis muss der Steuerimpuls also von Impuls zu Impuls immer um den gleichen Wert verändert werden bis die Zielposition erreicht ist.
Von der Ansteuerung her kann man nicht weiter optimieren. Jetzt kommt es nur noch darauf an, was der Servo daraus macht - und da gibt es erhebliche Unterschiede. Nicht alle Servos können diese kleinen Zwischenschritte so exakt positionieren, dass eine gleichmäßige Bewegung entsteht.

Programmtechnische Umsetzung
Damit wir im Sketch exakt von Impuls zu Impuls den Wert ändern können, muss man ein wenig verstehen, wie die Servolib funktioniert. Die Servolib benutzt einen 16-Bit Timer des ATMega. Das ist erstmal nichts anderes als ein Zähler der von 0 bis 65535 zählen kann. Der ist hier so eingestellt, dass er bei einem 16MHz Systemtakt alle 0,5µsec eins weiterzählt.
Ausserdem bietet die HW dieses Timer die Möglichkeit einen Wert vorzugeben, und ein Programm genau dann auszuführen, wenn der Zähler diesen Wert erreicht. Dies nutzt die Servolib. Beim Start des Zählers wird der Ausgang für den 1. Servo auf 1 gesetzt, und dieser Wert wird so eingestellt, dass das Programm genau dann ausgeführt wird, wenn die gewünschte Impulslänge erreicht ist. In diesem Programm wird dann der Impuls für den 1. Servo abgeschaltet und gleichzeitg der Impuls für den 2. Servo eingeschaltet. Der Zähler läuft dabei einfach weiter und der Vergleichswert wird neu so eingestellt, dass das Programm beim Ende des 2. Impulses erneut aufgerufen wird. Da wird dann der Ausgang des 2.Servos abgeschaltet und der für den 3. ... na ihr wisst schon. Das geht so lange, bis alle Impulse der eingerichteten Servos ausgegeben sind. Beim Ende des letzten Impulses wird der Vergleichswert so eingestellt, dass das Programm ausgeführt wird, nachdem der Zähler insgesamt 20ms gelaufen ist. Dann wird der Zähler wieder auf 0 gestellt, der Impuls für den 1. Servo eingeschaltet , und das Spiel beginnt von vorne.
Das schöne an dieser TimerHW ist nun, dass sie einen 2 Vergleichswert bietet, mit dem vollkommen unabhängig von 1. Vergleichswert ein anderes Programm aufgerufen werden kann, wenn dieser Wert erreicht wird. Die Servolib verwendet diesen 2. Vergleichswert nicht. In meinem Sketch habe ich diesen Vergleichswert nun so eingestellt, dass meine Routine immer genau nach 19.8ms Zählerlaufzeit aufgerufen wird - also kurz vor Ende des Zyklus. Bewegt sich die Schranke werden dann dort die Impulslängen um einen definierten Wert verändert und entsprechend im nächsten Zyklus ausgegeben. Damit können die Anforderungen aus dem oben beschriebenen Grundprinzip exakt erfüllt werden.
Ausserdem haben wir jetzt eine Routine die genau im 20ms-Rythmus aufgerufen wird, und damit kann man auch sonst noch nebenbei ein paar zeitgesteuerte Aufgaben erledigen. Z.B. das weiche Auf- Abblenden der Blink LED's

Haaalllo --- seid ihr noch da? Respekt, wer bis hierher durchgehalten hat, den scheint das Thema wirklich zu interessieren :D :D

P.S. - wenn ich mir das so durchlese... muss mal schauen ob ich ein Bildchen dazu malen kann. Ein Bild sagt ja bekanntlich mehr als tausend Worte. Das reiche ich dann noch nach.
Zuletzt geändert von MicroBahner am Mo 24. Aug 2015, 15:33, insgesamt 1-mal geändert.

Benutzeravatar

Threadersteller
MicroBahner
InterCityExpress (ICE)
Beiträge: 2436
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 69

Re: Arduino: Schrankensteuerung mit Servo

#20

Beitrag von MicroBahner »

Hallo Lars,
unsere Beiträge haben sich wohl gerade überschnitten :D
Im Moment bin ich noch etwas im Zweifel, ob ich nochmal mit einem ganz einfachen Programm anfangen soll, oder gleich mein Testprogramm als Basis hernehme, das wie oben beschrieben, ja schon etwas 'tiefer' einsteigt. Sollte aber immer noch auf fast allen Boards laufen, da Timer 1 weitgehend identisch ist


PaSchu
Ehemaliger Benutzer

Re: Arduino: Schrankensteuerung mit Servo - Gedanken zur Servoansteuerung

#21

Beitrag von PaSchu »

@PaSchu: die Geschwindigkeit muss sicher einstellbar sein. Eine moderne Halbschranke bewegt sich sicher anders als ein langer handgekurbelter Schrankenbaum
das fiel mir nach dem posten meines Beitrags auch ein. Aber ich denke das wird. :D


spielbahn
Ehemaliger Benutzer

Re: Arduino: Schrankensteuerung mit Servo - Gedanken zur Servoansteuerung

#22

Beitrag von spielbahn »

Hallo Franz-Peter,

kein Streß :D
Aber irgendwann ist genug geredet.....

Trotzdem von mir noch etwas "Gerede":
Ob das letztendlich mit eine ATMega 328 oder einem ATTiny 84 oder... läuft ist eigentlich zweitrangig - obwohl es sinnvoll wäre, das Ganze auf den UNO auszurichten, da dieser verbreitet und auch für Einsteiger einfach ist.
Zur Geschwindigkeit: Wenn ich alles richtig verstanden habe, soll hier nicht nur ein Sketch zum "Abkupfern" entstehen, sondern es soll jedem Interessierten möglich werden, diesen Sketch auch zu verstehen. Die Geschwindigkeit wird sicher nur einmal eingestellt. Wenn man den Sketch verstanden hat, wird es sicher kein Problem sein, diejenigen Parameter, die die Geschwindigkeit beeinflussen, seinen eigenen Bedürfnissen anzupassen. Eine Einstellung in dem Sinn, dass von außen über Taster/Poti die Geschwindigkeit variiert werden kann, halte ich für überflüssig - die stellt man einmal im Sketch ein.
Zu den Servos: Wenn das dann auch noch mit Billigservos geht, ist es perfekt.

PS: In deinem Video bewegt die Schranke sich doch schon ganz gut - Ruckeln vernachlässigbar.

Benutzeravatar

Threadersteller
MicroBahner
InterCityExpress (ICE)
Beiträge: 2436
Registriert: Mi 28. Nov 2012, 14:24
Nenngröße: H0
Stromart: analog DC
Steuerung: Microprozessor-Eigenbau
Gleise: Tillig
Wohnort: Mittelfranken
Alter: 69

Re: Arduino: Schrankensteuerung mit Servo - Gedanken zur Servoansteuerung

#23

Beitrag von MicroBahner »

Hallo Paschu,
PaSchu hat geschrieben:Aber ich denke das wird.
Danke fürs Vertrauen :D :D

Hallo Uli,
nee, nee, Streß mach ich mir keinen :D . Wenn mir die Lust vergeht, müsst ihr halt mal etwas warten :mrgreen: :mrgreen:
spielbahn hat geschrieben:es soll jedem Interessierten möglich werden, diesen Sketch auch zu verstehen.
So ist es gedacht 8)
spielbahn hat geschrieben:Wenn man den Sketch verstanden hat, wird es sicher kein Problem sein, diejenigen Parameter, die die Geschwindigkeit beeinflussen, seinen eigenen Bedürfnissen anzupassen.
Das ist ein durchaus überzeugendes Argument. Die IDE braucht man eh, um den Sketch zu laden. Solche Parameter kann man dann am Anfang des Sketches zusammenstellen, und jeder kann sie nach eigenem Geschmack anpassen :gfm:
spielbahn hat geschrieben:... obwohl es sinnvoll wäre, das Ganze auf den UNO auszurichten
Damit sollte es auf jeden Fall funktionieren. Der Uno und seine direkten Ableger (mini, Nano) basieren ja alle auf dem ATmega328. Die gibt es auch als günstige Klone. Ich habe zwar derzeit einen Micro, der auf dem ATmega32U4 basiert. Was Timer 1 angeht ist der aber kompatibel. Einen Nano habe ich mir auch schon bestellt - da sind wir dann wieder beim mega328.


@all:
hier die versprochene Skizze zur Pulserzeugung. Sie ist als Ergänzung zur obigen Beschreibung gedacht:
Bild

Die Erzeugung der Servoimpulse per Software, wie es die Servolib macht, hat allerdings auch einen Nachteil. Da auf dem Arduino ja auch noch andere Programme im Hintergrund ablaufen, kann es vorkommen, dass die Servoroutine nicht direkt gestartet wird wenn der Zählervergleichswert erreicht wird, sondern mit einer kleinen Zeitverzögerung. Dann wird natürlich auch der Impuls, der abgeschaltet werden soll, etwas länger und der Folgeimpuls etwas kürzer. Diesen Jitter kann man am Oszi gut beobachten, und ein exakt positionierender Servo reagiert auch darauf. Er bewegt sich dann minimal hin- und her obwohl der Impuls eigentlich konstant sein sollte (Später werde ich die Impulse in den Ruhelagen der Schranke abschalten).
Das ließe sich nur vermeiden, indem man die Pulse von der HW des Timer1 erzeugen lässt. Das ist grundsätzlich möglich, allerdings können dann nur 2 Servos angesteuert werden (was in unserem Fall ausreichend wäre) und die Pins, an denen die Impulse erscheinen sind fest und nicht wählbar.
Dann ist die ganze Programmierung der Servoansteuerung aber reine Handarbeit, denn ich kenne keine Lib, die so arbeitet. :cry:

Nachdem es mit meinem Servo ( der ein rel. billiger Digitalservo ist ) ja schon brauchbar funktioniert, werde ich erstmal bei der Arduino-Servolib bleiben.

Benutzeravatar

garti62
InterCity (IC)
Beiträge: 597
Registriert: Di 8. Nov 2011, 20:59
Nenngröße: H0
Stromart: digital
Steuerung: MS2
Gleise: Selbstbau
Wohnort: Harz
Alter: 58

Re: Arduino: Schrankensteuerung mit Servo - Beschreibung der Servoansteuerung

#24

Beitrag von garti62 »

Hallo Franz-Peter,

es geht doch schon ganz ordentlich los hier, auch wenn Du bisher der einzige bist, der wirklich schon was greifbares gemacht hat :wink: . Das Ergebnis sieht jedenfalls schon sehr gut aus. Was ist das denn für ein Servo?
Zu Deiner Frage, wie ich das mit dem Referenzpunkt beim Schrittmotor gelöst habe: gar nicht. Der Schrittmotor fährt zwischen zwei Variablen, die mittels Programmiertaster verändert werden können, hin und her. Die Zahl der Schritte ergibt sich aus der Differenz. Die Variablen sind im eprom gespeichert. Außerdem wird jedesmal, wenn ein Endpunkt erreicht ist, ein Marker im eprom gesetzt. Daher weiß das Programm auch nach dem Aus- und Wiedereinschalten, an welchem Endpunkt der Motor steht, ob die Schranke aktuell auf oder zu ist. Ein Problem würde es nur geben, wenn man den Motor manuell verstellen würde, aber wer macht das schon. Bis jetzt gab es jedenfalls keine Probleme, auch ein Nachjustieren der Endlagen war noch nicht erforderlich.
Leider kann ich zu Deinem Projekt nichts wirklich konstruktives beitragen, ich mach meine Sachen in Basic (damit kann man einen Arduino natürlich auch programmieren) und muß mir die originale Arduino-Umgebung erst mal genauer ansehen. Übrigens kann ich mit meinem Basic-Compiler den CTC-Modus oder die Hardware-PWM ganz einfach programmieren, das sollte doch in der Arduino-Umgebung auch irgendwo vorgesehen sein. Schließlich sind die Timer mit die wichtigsten Bausteine eines Mikrocontrollers.
Ich werde auf jeden Fall hier weiter dabeibleiben und schauen, was sich ergibt.

Viel Erfolg auch weiterhin
wünscht Ulli
erste Versuche: Weichenbau


Eisenhorn
Ehemaliger Benutzer

Re: Arduino: Schrankensteuerung mit Servo - Gedanken zur Servoansteuerung

#25

Beitrag von Eisenhorn »

Moin Franz-Peter,
MicroBahner hat geschrieben: Dann ist die ganze Programmierung der Servoansteuerung aber reine Handarbeit, denn ich kenne keine Lib, die so arbeitet. :cry:
du vielleicht nicht, aber ich :D
http://playground.arduino.cc/ComponentLib/Servotimer1


Oben schreibst du das die Pause genau 20ms betragen muss, das stimmt nicht die Pause kann problemlos verkürzt werden.
Die Pause kommt einfach aus der Funkübertragung in der Pause wurden die anderen Servo positionen übertragen.

Viele Grüße,
Lars

Antworten

Zurück zu „Elektrik und Elektronik“