Willkommen 

RE: Lokschuppentor mit Arduino und Servo

#1 von Lanz-Franz , 12.03.2020 13:42

Ich möchte hier kurz zusammenfassen, wie mein Lokschuppentoröffner aufgebaut ist.
Hauptsächlich an die gerichtet, die nach einer vollständigen Lösung suchen und in Arduinosteuerung (so wie ich) unerfahren sind.

Außer blinkende LED hatte ich bisher noch keine Erfahrung mit Arduino.
Als ich das Projektchen gestartet habe hab ich etliche Anleitungen im WWW gefunden, die leider nur bedingt funktionsfähig und vollständig sind. Möglicherweise gibt es die doch, habe sie nur nicht gefunden.
An dieser Stelle herzlichen Dank an die „MobaTool-Stummies“, mit deren Hilfe ich die Steuerung nach meinen Vorstellungen zum Laufen bringen konnte.
viewtopic.php?f=21&t=127899

Zum Einstieg ein kleines Filmchen.



Benötigtes Material
Servo
Arduino-Nano
zwei Minitaster

Geschaltet wird mittels zwei Minitaster für Tor-Auf und Tor-Zu.
Eine Schaltung zur Funktionsdemonstration von Servosteuerung und den zugehörigen Sketch fand ich hier.
https://www.youtube.com/watch?v=MxQkIrQ23TI
Durchaus empfehlenswert, hier wird schrittweise der Programmaufbau erklärt.
Erstes Problem, die Stellgeschwindigkeit ist viel zu hoch und lässt sich nicht verändern.

Dann habe ich bei den MobaTools hier im Forum auch einem Sketch zur Ansteuerung gefunden.

Aktueller Sketch mit allen Änderungen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
#include <MobaTools.h>
#include <EEPROM.h>
 

// Die Taster müssen so angeschlossen sein, dass der Eingang bei gedrücktem
// Taster auf LOW (=0) geht. Ansonsten muss im loop auf HIGH abgefragt werden
const int tasterPin1 = 2; // Taster1 Pin 2
const int tasterPin2 = 3; // Taster2 Pin 3
const int servoPin = 9; // Anschluß für den Servo, möglich sind 9 oder 10
// bei Werten, die sich im Programm nie verändern, sollte immer 'const' vorangestellt
// werden
//gegen Sevozucken Widerst.5K von Servosteur zu Vcc geschaltet
 
int tasterStatus1, tasterStatus2;
Servo2 meinServo;
 
void setup() {
pinMode(tasterPin1, INPUT_PULLUP); //tasterPin1 (Pin 2)
pinMode(tasterPin2, INPUT_PULLUP); //tasterPin2 (Pin 3)
meinServo.attach(servoPin, true ); //Servo an Pin 9
meinServo.setSpeed(5); // Das ist ein neuer Aufruf, mit dem die Geschwindigkeit
// eingestellt wird. Je größer die Zahl, umso größer
// die Geschwindigkeit. Bei 0 (defaultwert) verhält es
//sich wie bei der Standard Bibliothek
meinServo.write(EEPROM.read(0)); //"bewege" Servo zur letzten im EEPROM gespeicherten Position
}
 
void loop() {
tasterStatus1 = digitalRead(tasterPin1);
tasterStatus2 = digitalRead(tasterPin2);
 
if (tasterStatus2 == HIGH ) {
meinServo.write(50); //wird langsam drehen
EEPROM.write(0, 50); //schreibe Zielposition ins EEPROM
delay(100);
}
 
if (tasterStatus1 == HIGH) {
meinServo.write(120); //wird langsam drehen
EEPROM.write(0, 120 ); //schreibe Zielposition ins EEPROM
delay(100);
}
 
delay(20);
 
}
 




Klappte soweit, bis auf die Tatsache, das das Servo nach Erreichen der Endpositionen brummte.
Außerdem erreichte das Servo manchmal nicht die Endposition, wenn ein Taster nur kurz gedrückt wurde.

Aus: meinServo.attach(servoPin);
Wurde: meinServo.attach(servoPin, true );

Dann das nächste Problem. Das "Einschaltzucken", das bei verschiedenen Servos auftreten kann.
Abhilfe brachte die Programmänderung „Zielposition ins EEPROM schreiben“
EEPROM.write(0, 150);
und einen ca. 4K7 (war nicht vorhanden, statt dessen zwei Stück 10K parallel) großen Widerstand von Servoansteuerleitung zu +5V zu schalten.

Das Schaltbild dazu


Die Taster kann man auch an 0V anlegen. Man spart sich dann die Pulldownwiderstände.
Habe ich aber auch erst erfahren, nach dem ich die Schaltung schon aufgebaut hatte.


Bild Arduino

Für die Arduinokenner ist das wohl kalter Kaffee.
Irrtümlicherweise bin ich davon ausgeganngen, das die Versorgungsspannung 5V betragen würde und an GND und +5V angeschlossen würde.
Dem ist aber nicht so. Versorgungsspannung gehört an GND und VIN. Bei Vin hätte ich es vielleicht bemerkt.


Bilder von Außen und Innen




Die Schalter befinden sich unter den beiden stehenden blauen Tonnen. Sie können duch Druck auf die Tonnen betätigt werden.

Passend dazu noch...
Bei den MobaTools viewtopic.php?f=21&t=127899&start=425#p2082395ab #447
Und bei der Birkenbahn viewtopic.php?f=50&t=133452&start=300#p2084948ab #322

Anregungen, Fragen willkommen.

MfG Werner


mfG Werner -und immer 50mA Reserve imTrafo
Schmalspur 1:87 : Die Birkenbahn https://www.stummiforum.de/viewtopic.php?f=50&t=133452
Gartenbahn : https://www.stummiforum.de/viewtopic.php?...578793#p1578793


 
Lanz-Franz
CityNightLine (CNL)
Beiträge: 1.898
Registriert am: 19.01.2016
Ort: zwischen D-dorf und Köln
Gleise diverse
Spurweite H0m, G
Steuerung z21;Massoth_1210Z;RC
Stromart Digital


RE: Lokschuppentor mit Arduino und Servo

#2 von MicroBahner , 29.03.2020 22:47

Hallo Werner,
ein schönes Projekt . Vor allem die Betätigung über die Tonnen finde ich sehr kreativ - das habe ich so noch nicht gesehen
2 Anmerkungen dazu habe ich aber noch:

Zitat

Irrtümlicherweise bin ich davon ausgeganngen, das die Versorgungsspannung 5V betragen würde und an GND und +5V angeschlossen würde.

Das kann man grundsätzlich schon so machen. Auf den Nano's ist ( im Gegensatz zum UNO ) da auch eine Schutzdiode drauf, damit nichts passiert, wenn man gleichzeitig den PC über USB angeschlossen hat. Ob die auch bei jedem Clone drauf ist, weis ich natürlich nicht. Aber ich hatte auf jeden Fall noch keinen ohne.

Zum anderen: dein EEPROM.write. So wie Du das jetzt geschrieben hast, wird der Wert während des Tasterdrückens immer wieder ins EEPROM geschrieben. Die Zahl der Schreibzyklen ist aber begrenzt. Ok, 10000xschreiben geht jetzt durch das delay() auch nicht so schnell, aber trotzdem...
Wenn Du statt EEPROM.write den Aufruf EEPROM.update nimmst, wird vor dem Schreiben geprüft, ob der richtige Wert schon drinsteht ( Lesen kann man beliebig oft ). Dann wird dein EEPROM nur dann wirklich beschrieben, wenn Du den jeweils anderen Wert hineinschreibst. Das würde ich auf jeden Fall noch machen. Man muss ja nur das 'write' durch 'update' ersetzen.


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.695
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Spurweite H0
Steuerung Eigenbau
Stromart Analog


RE: Lokschuppentor mit Arduino und Servo

#3 von Lanz-Franz , 30.03.2020 10:08

Hallo Franz-Peter.
Danke für die Blumen und die Tipps.
Ich werde das bei Gelegenheit mal umsetzen.
Im Moment ist die Distanz vom PC zum Lokschuppen zu groß.
Der PC müsste erst unterm Schreibtisch vorgeholt werden.
MfG Werner


mfG Werner -und immer 50mA Reserve imTrafo
Schmalspur 1:87 : Die Birkenbahn https://www.stummiforum.de/viewtopic.php?f=50&t=133452
Gartenbahn : https://www.stummiforum.de/viewtopic.php?...578793#p1578793


 
Lanz-Franz
CityNightLine (CNL)
Beiträge: 1.898
Registriert am: 19.01.2016
Ort: zwischen D-dorf und Köln
Gleise diverse
Spurweite H0m, G
Steuerung z21;Massoth_1210Z;RC
Stromart Digital


RE: Lokschuppentor mit Arduino und Servo

#4 von Schneckenbergbahner , 03.04.2020 16:29

Hallo Werner

Super Arbeit.
So etwas ähnliches suche ich gerade auch.


LG
Uwe
"Schneckenberger Eisenbahn Gesellschaft", kurz SEG

https://www.youtube.com/channel/UCKrV7Xs...w_as=subscriber


Schneckenbergbahner  
Schneckenbergbahner
RegionalExpress (RE)
Beiträge: 69
Registriert am: 06.02.2020


RE: Lokschuppentor mit Arduino und Servo

#5 von lojo , 06.03.2021 10:24

Hallo Werner,

danke für deinen Beitrag.
Ich bin gerade dabei, die Möglichkeiten von Arduino zu recherchieren. Für den Einsteiger ganz schön kompliziert!
Mein erstes Ziel ist es, ein einflügeliges Formsignal mit einem Servo zu bewegen. Dabei geht es mir nur um den Bewegungsablauf. Ein Taster für Hp1, ein Taster für Hp0. Mehr nicht.
Eine Möglichkeit die Flügel zu bewegen habe ich inzwischen auf Youtube gefunden. Außerdem eine Lösung für die Steuerung der Geschwindigkeit. Nur wie ich das zusammenkriegen soll, ist mir nicht klar. Ich denke, da kann mir deine Lösung für die Schuppentore weiterhelfen. Ist ja prinzipiell das gleiche Problem.
Schuppentore am einständigen Lokschuppen wären dann das übernächste Ziel. Mal sehen ob ich´s schaffe.
Jedenfalls nochmals danke für deinen Bericht. Ein super Ergebnis.


Freundliche Grüße
lojo


 
lojo
InterRegioExpress (IRE)
Beiträge: 419
Registriert am: 27.08.2019
Gleise K-Gleis
Spurweite H0
Steuerung MS2
Stromart AC, Digital


RE: Lokschuppentor mit Arduino und Servo

#6 von Lanz-Franz , 06.03.2021 12:37

Kleiner Nachtrag zu den Servos.
Bei meiner Rübenverladung hatte ich das Problem, das das rechte Servo mit dem Aufdruck ANALOG nicht funktionierte.
Habe mir dann die linke Ausführung bestellt. Damit funktioniert es.



MfG Werner


mfG Werner -und immer 50mA Reserve imTrafo
Schmalspur 1:87 : Die Birkenbahn https://www.stummiforum.de/viewtopic.php?f=50&t=133452
Gartenbahn : https://www.stummiforum.de/viewtopic.php?...578793#p1578793


 
Lanz-Franz
CityNightLine (CNL)
Beiträge: 1.898
Registriert am: 19.01.2016
Ort: zwischen D-dorf und Köln
Gleise diverse
Spurweite H0m, G
Steuerung z21;Massoth_1210Z;RC
Stromart Digital


RE: Lokschuppentor mit Arduino und Servo

#7 von e69-fan , 19.03.2021 13:49

Hallo MicroBahner,

Zitat
Wenn Du statt EEPROM.write den Aufruf EEPROM.update nimmst, wird vor dem Schreiben geprüft, ob der richtige Wert schon drinsteht ( Lesen kann man beliebig oft ). Dann wird dein EEPROM nur dann wirklich beschrieben, wenn Du den jeweils anderen Wert hineinschreibst. Das würde ich auf jeden Fall noch machen. Man muss ja nur das 'write' durch 'update' ersetzen.



Ich habe den Sketch abgeändert - ist der so i.O.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 

/* https://stummiforum.de/viewtopic.php?f=21&t=178411
*/
 

 
#include <MobaTools.h>
#include <EEPROM.h>
 

// Die Taster müssen so angeschlossen sein, dass der Eingang bei gedrücktem
// Taster auf LOW (=0) geht. Ansonsten muss im loop auf HIGH abgefragt werden
 
const int tasterPin1 = 2; // Taster1 Pin 2
const int tasterPin2 = 3; // Taster2 Pin 3
const int servoPin = 9; // Anschluß für den Servo, möglich sind 9 oder 10
 
// bei Werten, die sich im Programm nie verändern, sollte immer 'const' vorangestellt
// werden
 
//gegen Sevozucken Widerst.5K von Servosteuerung zu Vcc geschaltet
 

int tasterStatus1, tasterStatus2;
MoToServo meinServo;
 
void setup() {
pinMode(tasterPin1, INPUT_PULLUP); //tasterPin1 (Pin 2)
pinMode(tasterPin2, INPUT_PULLUP); //tasterPin2 (Pin 3)

meinServo.attach(servoPin, true ); //Servo an Pin 9
meinServo.setSpeed(5); //Das ist ein neuer Aufruf, mit dem die Geschwindigkeit
//eingestellt wird. Je größer die Zahl, umso größer
//die Geschwindigkeit. Bei 0 (defaultwert) verhält es
//sich wie bei der Standard Bibliothek
meinServo.write(EEPROM.read(0)); //"bewege" Servo zur letzten im EEPROM gespeicherten Position
}
 
void loop() {
tasterStatus1 = digitalRead(tasterPin1);
tasterStatus2 = digitalRead(tasterPin2);
 
if (tasterStatus2 == HIGH ) {
meinServo.write(50); //wird langsam drehen
EEPROM.update(0, 50); //schreibe Zielposition ins EEPROM
delay(100);
}
 
if (tasterStatus1 == HIGH) {
meinServo.write(120); //wird langsam drehen
EEPROM.update(0, 120 ); //schreibe Zielposition ins EEPROM
delay(100);
}
 
delay(20);
 
}
 
 




mfg Wolfgang


Grüße aus der Heimat der E69


 
e69-fan
RegionalExpress (RE)
Beiträge: 56
Registriert am: 11.01.2014
Ort: Werdenfelder Land
Spurweite H0, H0e
Steuerung Lenz
Stromart Digital


RE: Lokschuppentor mit Arduino und Servo

#8 von MicroBahner , 20.03.2021 13:36

Hallo Wolfgang,
sollte so passen


viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der 'Eisberg'


 
MicroBahner
Metropolitan (MET)
Beiträge: 2.695
Registriert am: 28.11.2012
Ort: Mittelfranken
Gleise Tillig Elite
Spurweite H0
Steuerung Eigenbau
Stromart Analog


RE: Lokschuppentor mit Arduino und Servo

#9 von lojo , 27.03.2021 17:23

Hallo Werner,

im Beitrag #5 habe ich über meine Absicht in Arduino einzusteigen berichtet.
Heute kann ich dank deiner Beiträge über einen dreifachen Erfolg berichten: ein Formsignal, meinen einständigen Lokschuppen und einen Wasserkran sind jetzt arduinogesteuert mit Servos beweglich gemacht.
Manchmal braucht man einfach einen passenden Anstoß, wie der von dir.
Danke.


Freundliche Grüße
lojo


 
lojo
InterRegioExpress (IRE)
Beiträge: 419
Registriert am: 27.08.2019
Gleise K-Gleis
Spurweite H0
Steuerung MS2
Stromart AC, Digital


   

Messwagen - Selbstbau mit Atmel µC: ATtiny24 als Decoder
Fragen zu Märklin Goliath (auch zu Ersatzteilen)

  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
disconnected Foren-Chat Mitglieder Online 47
Xobor Einfach ein eigenes Forum erstellen
Datenschutz