RE: Hilfestellung bei Servosteuerung per Arduino

#1 von MK-Matthias , 21.10.2018 20:24

Hallo liebe Forengemeinde.

Ich befasse mich aktuell mit dem Arduino um damit meine Weichen mit Servos zu steuern. Allerdings stelle ich mich offenbar zu dusselig an oder sehe den Wald vor lauter Bäumen nicht.

Ich verwende einen Arduino Uno R3 und dazu den 16-Kanal Servo Shield von Adafruit:
https://www.adafruit.com/product/1411

Die Beispielprogramme zu dem Shield sind kein Problem und sie funktionieren auch. Allerdings würde ich sie gerne verstehen, damit ich sie anpassen kann. Wenn nacheinander alle Servos in einer Endlosschleife angesteuert werden, ist das ja ganz nett, hilft mir bei der MoBa aber nicht weiter. Nach stundenlanger Internetrecherche finde ich zu Hauf die selben Sketches, aber kein einziges, bei dem ich jeweils ein einzelnes Servo per Taster oder von mir aus auch per Kippschalter ansteuern kann. Immer nur eine automatische Dauerschleife.
Oder Steuerung zwar per Taster, aber das Servo ohne Shield direkt an den Arduino angeschlossen.
Ein Beispielsketch mit Shield und Taster / Schalter habe ich bis jetzt nicht gefunden.

Hat da eventuell jemand Tipps für mich, welche (möglichst deutschsprachigen) Internetseiten da eventuell noch Informationen hergeben könnten?
Oder passende Suchbegriffe für Google?

Es geht mir auch nicht um einen Decoder. Das wäre aktuell noch ein paar Nummern zu schwierig für mich und kommt später mal. Ich möchte einfach nur einen Taster oder Schalter betätigen und eines der 16 Servos soll daraufhin seine Position ändern. Idealerweise im Anschluss an die Bewegung auch kein PWM-Signal mehr erhalten, damit es nicht brummt.


Viele Grüße
Matthias

H0e-Anlage "Am Abgrund entlang" im Treppenhaus:
viewtopic.php?f=50&t=103527

Meine kleine Gartenbahn in Spur "G":
viewtopic.php?f=47&t=180149&p=2139536#top


 
MK-Matthias
InterRegioExpress (IRE)
Beiträge: 421
Registriert am: 28.07.2013
Spurweite H0e, G
Stromart DC, Digital


RE: Hilfestellung bei Servosteuerung per Arduino

#2 von brotherherby , 21.10.2018 22:47

Warum möchtest du ein 16-Kanal Servo Shield von Adafruit verwenden?
Du kannst ja den Servo direkt an den Arduino anschliessen und ersparst dir das Interface.
An einen Uno-Clone hat man Platz für 4 Servo und 8 Eingänge für die Druckschalter.
Der Sketch ist einfach zu programmieren und den kannst du auch noch einstellen wie du willst.
Ich bin derzeit mit dem Gleichen beschäftigt und alles funktioniert super.
LG
Herbert


LG und
ciao

Herbert


brotherherby  
brotherherby
InterRegio (IR)
Beiträge: 102
Registriert am: 24.02.2011


RE: Hilfestellung bei Servosteuerung per Arduino

#3 von TecnoWorld , 21.10.2018 22:49

Mmh.
Du willst also alles fertig geliefert haben. Dann kauf doch was fertiges.

Wenn nicht, hier im Forum gibt es einen super Workshop zur Assembler Programmierung.

Oder nimm einen ATSAMD21, da kannst 12 16bit Timer steuern und den kannst in C programmieren.

Ich glaube nicht, das Du was passendes einfach so findest.


__________________________
LG aus Andalusien.
RailSolution - das Lichtprojekt von Modellbahnern für die Modellbahn


TecnoWorld  
TecnoWorld
InterRegioExpress (IRE)
Beiträge: 270
Registriert am: 11.03.2015


RE: Hilfestellung bei Servosteuerung per Arduino

#4 von schmiedi , 22.10.2018 09:34

Hallo Matthias,

mit Hilfe der MobaTools-Library (viewtopic.php?f=21&t=127899&hilit=mobatools) von Franz-Peter (MIcrobahner) kannst Du 16 Servos per Software steuern. Vielleicht ist das eine Alternative?

Viele Grüße,
Dieter

PS: Ich selber benutze keine Servos, kann also nichts Konkretes zur Anwendung beisteuern...


Der Zug zur Besichtigungstour "Rund um Steinen":


 
schmiedi
InterRegioExpress (IRE)
Beiträge: 446
Registriert am: 07.07.2015
Homepage: Link
Spurweite H0
Steuerung Arduino, Eigenbau
Stromart DC, Analog


RE: Hilfestellung bei Servosteuerung per Arduino

#5 von Bodo , 22.10.2018 11:59

Hallo Matthias,

Zitat

Ich befasse mich aktuell mit dem Arduino um damit meine Weichen mit Servos zu steuern. Allerdings stelle ich mich offenbar zu dusselig an oder sehe den Wald vor lauter Bäumen nicht.

Ich verwende einen Arduino Uno R3 und dazu den 16-Kanal Servo Shield von Adafruit:
https://www.adafruit.com/product/1411

Die Beispielprogramme zu dem Shield sind kein Problem und sie funktionieren auch. Allerdings würde ich sie gerne verstehen, damit ich sie anpassen kann. Wenn nacheinander alle Servos in einer Endlosschleife angesteuert werden, ist das ja ganz nett, hilft mir bei der MoBa aber nicht weiter.


da stellt sich leider tatsächlich die Frage, was Du mit "befassen" meinst ... wenn man etwas Programmiererfahrung hat, geben die beiden Beispiele (Servo am Arduino per Taster und Servo in Endlosschleife an dem 16-Kanal-Shield) alles notwendige preis. Da ich das ganze rudimentär schon zu einem DCC-Dekoder zusammengepackt habe, pflücke ich Dir im Laufe der Woche gerne die entscheidenden Programmteile wieder auseinander. Ein fertiges Programm für genau Deine Anforderungen werde allerdings auch ich nicht liefern können. Falls es dann doch per DCC statt Taster sein darf, kann ich Dir natürlich auch meine Beta-Version schicken.

Im Prinzip macht das m.E. mit dem 16-Kanal-Shield schon Sinn, wenn man mehrere Servos auf engem Raum antreiben will.

Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.471
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Hilfestellung bei Servosteuerung per Arduino

#6 von fbstr , 22.10.2018 12:53

Hallo Matthias,

ich habe auch erst Anfang 2017 mit Arduino angefangen.
Es ging um Servoansteuerungen mittels Taster aktiviert.
viewtopic.php?p=1640042#p1640042

Das habe ich mit tatkräftiger Unterstützung hier (besonders Franz-Peter) als Programmier-Dau hinbekommen.

Vielleicht hilft Dir das dort weiter.

Ich selber will seit Wochen eigentlich mit dem nächsten Schritt starten: Ansteuerung mit DCC
Dazu habe ich auch Bodo's Platinen besorgt, aber es kommt dauernd etwas zeitlich dazwischen.

Und das Servo-Shield hab ich nun auch besorgt und ist dann ebenfalls zu integrieren. Ich hoffe im Dezember wieder etwas den Kopf dafür frei zu bekommen. Ich werde Dich auf alle Fälle hier weiter beobachten...


Gruss
Frank
---------------------------------------------------------------------------------------------------------------------
MobaLedLib Wiki
Projekt "Bahnpark Augsburg"
Stummitreff BB: jeden 3. Freitag im Monat im Haus Sommerhof in Sindelfingen


 
fbstr
Metropolitan (MET)
Beiträge: 2.513
Registriert am: 28.08.2016
Ort: Stuttgart
Gleise Peco Code 75, Trix C
Spurweite H0, H0e
Steuerung YD7001, MobaLedLib, MirZ21, Lenz LZV100
Stromart DC, Digital


RE: Hilfestellung bei Servosteuerung per Arduino

#7 von MK-Matthias , 22.10.2018 13:18

Zitat

Warum möchtest du ein 16-Kanal Servo Shield von Adafruit verwenden?


Eigentlich vor allem wegen dem Platzbedarf des Arduino. Die Anlage ist geschlossen, also auch von unten verkleidet und darin ist sehr wenig Platz. Das Adafruit-Shield ist erst einmal ein Test, weil ich es gerade da habe, ich habe mir aber noch einen kleineren Servo-Controller bestellt, von dem über 60 Stück von nur einem Arduino angesteuert werden können.


Zitat

Du willst also alles fertig geliefert haben. Dann kauf doch was fertiges.


Nö, ganz und gar nicht. Das ausprobieren macht mir ja Spaß. Ich komme aktuell nur nicht weiter. Ich möchte auch eigentlich kein fertiges Sketch, sondern Tipps zu Seiten auf denen ich mich noch informieren kann. Es heißt immer, der Arduino ist ja sooo einfach. Das ist er auch sicherlich, wenn man bereits eine Programmiersprache beherrscht. Mir fehlt aber irgendwie ein für Laien verständlicher Übergang von den typischen "Anfänger-Sketches" wie "Blinken ohne delay" zu den wirklich anspruchsvollen und praxisbezogenen Programmen. Für mich steigt da der Schwierigkeitsgrad von sehr leicht auf viel zu kompliziert. Und zwar ohne Zwischenschritte.


Zitat

mit Hilfe der MobaTools-Library (viewtopic.php?f=21&t=127899&hilit=mobatools) von Franz-Peter (MIcrobahner) kannst Du 16 Servos per Software steuern. Vielleicht ist das eine Alternative?


Das werde ich mir mal anschauen. Vielen Dank.


Zitat

da stellt sich leider tatsächlich die Frage, was Du mit "befassen" meinst ... wenn man etwas Programmiererfahrung hat, geben die beiden Beispiele (Servo am Arduino per Taster und Servo in Endlosschleife an dem 16-Kanal-Shield) alles notwendige preis.


Mein Problem ist wohl einfach, dass ich noch nie programmiert habe.
DCC brauche ich erst einmal nicht. Die Anlage ist nur 2 Meter lang, da kann ich vor stehen bleiben.


Zitat

ich habe auch erst Anfang 2017 mit Arduino angefangen.
Es ging um Servoansteuerungen mittels Taster aktiviert.
viewtopic.php?p=1640042#p1640042


Vieen Dank. Da werde ich mich auch mal einlesen.


Viele Grüße
Matthias

H0e-Anlage "Am Abgrund entlang" im Treppenhaus:
viewtopic.php?f=50&t=103527

Meine kleine Gartenbahn in Spur "G":
viewtopic.php?f=47&t=180149&p=2139536#top


 
MK-Matthias
InterRegioExpress (IRE)
Beiträge: 421
Registriert am: 28.07.2013
Spurweite H0e, G
Stromart DC, Digital


RE: Hilfestellung bei Servosteuerung per Arduino

#8 von brotherherby , 22.10.2018 13:58

Alles klar und hoffentlich findest du das was du benötigst.
LG
Herbert


LG und
ciao

Herbert


brotherherby  
brotherherby
InterRegio (IR)
Beiträge: 102
Registriert am: 24.02.2011


RE: Hilfestellung bei Servosteuerung per Arduino

#9 von Bodo , 26.10.2018 17:35

Hallo Matthias,

hier mal die Mindestausstattung des Sketches für den Adafruit-Treiberbaustein ...
Statt der normalen Servo-Bibliothek muss die Standard-Bibliothek für I2C und den PCA9685 eingebunden werden. Dann muss der Baustein mit Adresse deklariert werden (hier pwm1 auf der Standard-Adresse). Im Setup muss dann einmal die Kommunikation gestartet und die Frequenz für den Baustein festgelegt werden. Innerhalb des Programms kann dann mit pwm1.setPWM(index, 0, position) das Servo am Anschluss "index" (0-15) mit der Pulslänge "position" (typischerweise 150-600, testen!) angesteuert werden.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 

#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm1 = Adafruit_PWMServoDriver(0x40);
...
 
void setup() {
..
pwm1.begin();
pwm1.setPWMFreq(50); // Frequenz ca. 50 bis 60 Hz.
...
}
 
void loop() {
...
pwm1.setPWM(index, 0, position); // Index 0-15, Position ca. 150 bis ca. 600 (aus 4096)
 
...
}
 
 



Viele Grüße, Bodo


Die Freiheit des Menschen liegt nicht darin, dass er tun kann, was er will, sondern dass er nicht tun muss, was er nicht will. (Jean-Jacques Rousseau)

Meine Anlage - Meine Dauerbaustelle
Platinen für Modellbahn- und Arduino-Anwendungen


 
Bodo
InterCityExpress (ICE)
Beiträge: 2.471
Registriert am: 28.04.2005
Homepage: Link
Gleise C-Gleis, Lenz 0
Spurweite H0, 0
Steuerung MS2 & CS2
Stromart Digital


RE: Hilfestellung bei Servosteuerung per Arduino

#10 von MK-Matthias , 31.10.2018 00:12

Super. Vielen Dank.


Viele Grüße
Matthias

H0e-Anlage "Am Abgrund entlang" im Treppenhaus:
viewtopic.php?f=50&t=103527

Meine kleine Gartenbahn in Spur "G":
viewtopic.php?f=47&t=180149&p=2139536#top


 
MK-Matthias
InterRegioExpress (IRE)
Beiträge: 421
Registriert am: 28.07.2013
Spurweite H0e, G
Stromart DC, Digital


RE: Hilfestellung bei Servosteuerung per Arduino

#11 von ArduinoFan ( gelöscht ) , 04.11.2018 09:12

Hallo Zusammen,

Ich will nicht verständnislos sein, aber bin ich im Digi-Welt bisschen Anfänger. Ich habe analog H0 Modelleisenbahn und möchte das digitalisieren. Meine echte Erwartung wäre dass echte Lösungen (Zentrale, Handregel, usw.) vermeiden. Ich habe die Steuerung wegen Signalen und Weichenantrieb mit AT2650 über Relaiskarten realisiert. Meine Lieblings Lösung ist eine Webseite, wobei ich diese Dingen steuern kann.

Zurück zur die Digitalisierung: Ich bin wegen Komponenten bisschen unsicher.

Ich sollte folgende beschaffen:

    Arduino UNO

    Trafo für Arduno

    Adafruit Motor-Stepper-Servo Shield


Wären diese Dingen genug?

Mein Plan wäre:

Eine Webseite, wobei man Grundmöglichkeiten erreichen kann, z.B.:

    + und – Tasten beschleunigen / verlangsamen

    0 – 9 ID für Lok eingeben

    usw.



Ich habe die Hauptfragen fast vergessen.

Kann man für digitale ELok über Arduino z.B. ohne SmartBox DCC Signalen erzeugen?

Kann ich fabrikeigene* digitale Lösungen so nicht vermeiden?

*fabrikeigene digitale Lösungen sind z.B. vor der PIKO oder von der ROCO

Darf ich kleine technische Unterstützung bitten?


ArduinoFan

RE: Hilfestellung bei Servosteuerung per Arduino

#12 von joda44 , 11.02.2019 15:26

Hallo Herbert ( falls Du das liest),
Das hier

Zitat

An einen Uno-Clone hat man Platz für 4 Servo und 8 Eingänge für die Druckschalter.



interessiert mich
Ich würde da für meine Segmentdrehscheibe einen Servo und 5 Taster für die Abgänge mit Steuern wollen.
Wenn du dies noch liest - villeicht darf ich bei Dir klauen?

Gruß
Andree


Märklin H0, digital m. 2xMS2
H0e 'noch' analog

Quetschthal - Es soll mal eine Bahn werden...


 
joda44
InterCity (IC)
Beiträge: 774
Registriert am: 04.05.2017
Ort: im schönen Schleswig-Holstein
Gleise Märklin (H0) , Roco (H0e)
Spurweite H0, H0e
Steuerung H0 AC(Digital), H0e analog
Stromart AC, DC, Digital, Analog


RE: Hilfestellung bei Servosteuerung per Arduino

#13 von MicroBahner , 11.02.2019 16:00

Hallo Matthias,
habe den Thread jetzt erst entdeckt und weis nicht, ob das noch aktuell ist.
Ich finde, dass das externe Servo-Shield zum Platzsparen nicht notwendig ist. Mit einem Nano kann man 16 Servos ansteuern. Sinnvoller finde ich dann, gegebenenfalls die Taster über einen I2C Portextender anzuschliessen. Dann müssen die ganzen Zwischenpostionen für eine langsame Servobewegung nicht über den I2C Bus gesendet werden.


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


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


RE: Hilfestellung bei Servosteuerung per Arduino

#14 von MK-Matthias , 12.02.2019 07:38

Hallo Franz-Peter. Danke für die Hilfe.
Dass der (oder das?) Servo-Shield eher für meine Zwecke eher unpraktisch ist, habe ich mittlerweile auch festgestellt. In erster Linie, weil ich die Weichen über Taster vor Ort stellen möchte, und der Arduino nicht genügend Eingänge so viele Taster hat wie ich sie für die Ansteuerung von mehreren dieser Shields brauchen würde. Und der Platzbedarf für ein Shield oder einen Nano ist eigentlich identisch.

Ich habe mittlerweile ein Sketch hinbekommen, mit dem ich die Servos für meine 6 Weichen steuern kann. Zusätzlich werden noch 6 Relais zur Herzstückpolarisation und zur (unechten) Rückmeldung am Stellpult geschaltet. Das war in meinem Fall einfacher als ein Kontaktschalter am Servo.
Da ich mit den Servos und den Relais bereits 12 Pins des Nano "verbraucht" habe, habe ich die Taster an den Analog-Pins angeschlossen. Immer zwei Taster an einen Analog-In, den Taster für Geradeausfahrt direkt, und den Taster für abzweigende Fahrt über je einen 10k-Widerstand. Das Ganze läuft bis jetzt absolut problemlos. Hier mal der Sketch:

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
 
#include <Servo.h>

//Konstanten
const int relais0 = 2; //Relais für Herzstück 0 an Pin 2 angeschlossen
const int relais1 = 4; //Relais für Herzstück 1 an Pin 4 angeschlossen
const int relais2 = 7; //Relais für Herzstück 2 an Pin 7 angeschlossen
const int relais3 = 8; //Relais für Herzstück 3 an Pin 8 angeschlossen
const int relais4 = 12; //Relais für Herzstück 4 an Pin 12 angeschlossen
const int relais5 = 13; //Relais für Herzstück 5 an Pin 13 angeschlossen
 
//Variablen
int eingangweiche0; //Taster Weiche 0 an Analogpin 0 angeschlossen
int eingangweiche1; //Taster Weiche 1 an Analogpin 1 angeschlossen
int eingangweiche2; //Taster Weiche 2 an Analogpin 2 angeschlossen
int eingangweiche3; //Taster Weiche 3 an Analogpin 3 angeschlossen
int eingangweiche4; //Taster Weiche 4 an Analogpin 4 angeschlossen
int eingangweiche5; //Taster Weiche 5 an Analogpin 5 angeschlossen
 
Servo meinServo;
Servo meinServo1;
Servo meinServo2;
Servo meinServo3;
Servo meinServo4;
Servo meinServo5;
 

void setup()
{
pinMode(relais0, OUTPUT);
pinMode(relais1, OUTPUT);
pinMode(relais2, OUTPUT);
pinMode(relais3, OUTPUT);
pinMode(relais4, OUTPUT);
pinMode(relais5, OUTPUT);
 
meinServo.attach(3); //Servo0 an Pin 3 angeschlossen
meinServo1.attach(5); //Servo0 an Pin 5 angeschlossen
meinServo2.attach(6); //Servo0 an Pin 6 angeschlossen
meinServo3.attach(9); //Servo0 an Pin 9 angeschlossen
meinServo4.attach(10); //Servo0 an Pin 10 angeschlossen
meinServo5.attach(11); //Servo0 an Pin 11 angeschlossen
 
//Startposition der Weichen
 
meinServo.write(130); //dreht nach rechts
delay(20);
digitalWrite(relais0, HIGH);
}
 
void loop()
{
eingangweiche0 = analogRead(A0); //Analogwert vom Pin A0 lesen
eingangweiche1 = analogRead(A1); //Analogwert vom Pin A1 lesen
eingangweiche2 = analogRead(A2); //Analogwert vom Pin A2 lesen
eingangweiche3 = analogRead(A3); //Analogwert vom Pin A3 lesen
eingangweiche4 = analogRead(A4); //Analogwert vom Pin A4 lesen
eingangweiche5 = analogRead(A5); //Analogwert vom Pin A5 lesen

//für Weiche 0 gerade:
if (eingangweiche0>=700 && eingangweiche0<=936)
{
meinServo.write(145); //Dreht nach links
delay(20);
digitalWrite(relais0, LOW);
}
//für Weiche 0 abzweigend:
else if (eingangweiche0>=940 && eingangweiche0<=1023)
{
meinServo.write(130); //Dreht nach rechts
delay(20);
digitalWrite(relais0, HIGH);
}
//für Weiche 1 gerade:
if (eingangweiche1>=700 && eingangweiche1<=936)
{
meinServo1.write(140); //Dreht nach links
delay(20);
digitalWrite(relais1, LOW);
}
//für Weiche 1 abzweigend:
else if (eingangweiche1>=940 && eingangweiche0<=1023)
{
meinServo1.write(120); //Dreht nach rechts
delay(20);
digitalWrite(relais1, HIGH);
}
//für Weiche 2 gerade:
if (eingangweiche2>=700 && eingangweiche2<=936)
{
meinServo2.write(157); //Dreht nach links
delay(20);
digitalWrite(relais2, LOW);
}
//für Weiche 2 abzweigend:
else if (eingangweiche2>=940 && eingangweiche2<=1023)
{
meinServo2.write(0); //Dreht nach rechts
delay(20);
digitalWrite(relais2, HIGH);
}
//für Weiche 3 gerade:
if (eingangweiche3>=700 && eingangweiche3<=936)
{
meinServo3.write(157); //Dreht nach links
delay(20);
digitalWrite(relais3, LOW);
}
//für Weiche 3 abzweigend:
else if (eingangweiche3>=940 && eingangweiche3<=1023)
{
meinServo3.write(120); //Dreht nach rechts
delay(20);
digitalWrite(relais3, HIGH);
}
//für Weiche 4 gerade:
if (eingangweiche4>=940 && eingangweiche4<=1023)
{
meinServo4.write(157); //Dreht nach links
delay(20);
digitalWrite(relais4, LOW);
}
//für Weiche 4 abzweigend:
else if (eingangweiche4>=700 && eingangweiche4<=936)
{
meinServo4.write(120); //Dreht nach rechts
delay(20);
digitalWrite(relais4, HIGH);
}
//für Weiche 5 gerade:
if (eingangweiche5>=700 && eingangweiche5<=936)
{
meinServo5.write(157); //Dreht nach links
delay(20);
digitalWrite(relais5, LOW);
}
//für Weiche 5 abzweigend:
else if (eingangweiche5>=940 && eingangweiche5<=1023)
{
meinServo5.write(120); //Dreht nach rechts
delay(20);
digitalWrite(relais5, HIGH);
}


}
 


Bei dem Sketch sind noch nicht alle Stellwinkel der Servos angepasst.

DCC ist noch nicht integriert, da ich hiermit erst einmal abwarten werde, bis ich eine "richtige" Zentrale habe. Aktuell fahre ich nur mit einer Lokmaus2 aus der Startpackung, damit kann ich glaube ich sowieso keine Weichen stellen.

Zitat

Mit einem Nano kann man 16 Servos ansteuern.

Das klingt sehr interessant. Wie bekomme ich das denn hin? Ich dachte, ich könnte für Servos nur die PWM-Pins nutzen?

@ Andree:
Das stelle ich mir ohne Kontakte an den Abgängen schwierig vor, da ein Servo nach meinen Erfahrungen nicht so exakt in Position gefahren werden kann. Ich lasse mich aber gern eines besseren belehren und drücke dir die Daumen dass es klappt.
Grundsätzlich sollte es (wenn das Servo genau genug ist) ja eigentlich mit einer einzigen if-Schleife funktionieren?


Viele Grüße
Matthias

H0e-Anlage "Am Abgrund entlang" im Treppenhaus:
viewtopic.php?f=50&t=103527

Meine kleine Gartenbahn in Spur "G":
viewtopic.php?f=47&t=180149&p=2139536#top


 
MK-Matthias
InterRegioExpress (IRE)
Beiträge: 421
Registriert am: 28.07.2013
Spurweite H0e, G
Stromart DC, Digital


RE: Hilfestellung bei Servosteuerung per Arduino

#15 von MicroBahner , 12.02.2019 10:28

Hallo Matthias,

Zitat


Zitat

Mit einem Nano kann man 16 Servos ansteuern.

Das klingt sehr interessant. Wie bekomme ich das denn hin? Ich dachte, ich könnte für Servos nur die PWM-Pins nutzen?


Indem Du meine MobaTools verwendest . Nun im Ernst, auch mit der Standard-Servo-Lib bist Du nicht an die PWM-Pins gebunden, die funktioniert auch an allen digitalen Pins. Bei meinen MobaTools kannst Du aber auch noch die Bewegungsgeschwindigkeit des Servo einstellen. Dann laufen die Weichen schön langsam um. Ansonsten sind die Aufrufe weitgehend kompatibel mit der servo.h, so dass Du an deinem Sketch nicht viel ändern müsstest.
Für die Taster und Relais könntest Du einen I2C Expander wie den MCP23017 oder den PCF8574 verwenden. Dann brauchst Du dafür nur 2 Pins am Arduino und hast tatsächlich 16 frei für die Servos.

Wenn Du alles mal über DCC ansteuern willst, wäre vielleicht auch mein DCC-Decoder was für dich.

P.S. Wenn Du dich mal ein wenig mit Arrays in C/C++ beschäftigst, kannst Du deinen Sketch wesentlich verkürzen, und viel Schreibarbeit sparen .


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


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


RE: Hilfestellung bei Servosteuerung per Arduino

#16 von MK-Matthias , 12.02.2019 12:12

Ich sehe schon, mit den MoBa-Tools werde ich mich wohl doch nicht erst dann befassen, wenn ich eine ordentliche Zentrale habe.

Ob ich mir jetzt schon IC2 zutraue weiß ich nicht so genau. Der Sketch aus meinem Post ist tatsächlich mein erster, bei dem ich wirklich jede Zeile verstehe und ihn deshalb nicht nur zusammenkopiert, sondern zu recht großen Teilen selber geschrieben habe. Zwar aufgebaut auf einem gegoogleten Sketch, von diesem ist jedoch nicht viel übrig geblieben.

Bis zu welchen Kabellängen wäre IC2 eigentlich einsetzbar? Mein Gleisbildstellpult für einen kleinen Bahnhof mit 6 Weichen wird per Sub-D-Kabel mit der Anlage verbunden. Damit es halbwegs handlich und auch bezahlbar bleibt, würde ich gerne bei einem maximal 25-poligen Stecker bleiben. Davon sind jetzt bereits 15 Pins für die 12 Taster und die 12 LEDs zur Rückmeldung belegt. Signale, Entkuppler usw. werden natürlich auch noch Pins benötigen. Da würde sich ein "intelligentes" Stellpult ja geradezu anbieten.
Das ist aber Zukunfsmusik. Erst einmal werde ich den ersten Schritt machen, bevor ich mich dem zweiten oder dritten zuwenden werde.


Viele Grüße
Matthias

H0e-Anlage "Am Abgrund entlang" im Treppenhaus:
viewtopic.php?f=50&t=103527

Meine kleine Gartenbahn in Spur "G":
viewtopic.php?f=47&t=180149&p=2139536#top


 
MK-Matthias
InterRegioExpress (IRE)
Beiträge: 421
Registriert am: 28.07.2013
Spurweite H0e, G
Stromart DC, Digital


RE: Hilfestellung bei Servosteuerung per Arduino

#17 von schmiedi , 12.02.2019 13:06

Hallo Matthias,

ich habe neulich auch meinen ersten MCP23017 verbaut, damit werden ein paar LEDs und ein 4x4-Keypad betrieben (also Input- und Output-Seite). Zur Ansteuerung habe ich eine Library passend zum Keypad benutzt, es gibt aber auch eine Adafruit-Library, die digitalRead und -Write() implementiert.

Folgende Seite fand ich als Elektronik-Noob sehr hilfreich: https://www.nikolaus-lueneburg.de/2015/1...-port-expander/

Bei den Kabellängen kann ich Dir nicht weiterhelfen, aber Google wird schon etwas Nützliches liefern

Viele Grüße und viel Erfolg,
Dieter


Der Zug zur Besichtigungstour "Rund um Steinen":


 
schmiedi
InterRegioExpress (IRE)
Beiträge: 446
Registriert am: 07.07.2015
Homepage: Link
Spurweite H0
Steuerung Arduino, Eigenbau
Stromart DC, Analog


RE: Hilfestellung bei Servosteuerung per Arduino

#18 von MicroBahner , 12.02.2019 14:00

Hallo Matthias,

Zitat

Ich sehe schon, mit den MoBa-Tools werde ich mich wohl doch nicht erst dann befassen, wenn ich eine ordentliche Zentrale habe.

Die MobaTools haben ja auch mit 'digtal' und 'DCC' noch gar nichts zu tun. Die sollen nur das Programmieren an der einen oder anderen Stelle erleichtern .

Zitat

Der Sketch aus meinem Post ist tatsächlich mein erster, bei dem ich wirklich jede Zeile verstehe und ihn deshalb nicht nur zusammenkopiert, sondern zu recht großen Teilen selber geschrieben habe.

Das ist doch schonmal ein guter Ausgangspunkt, super. Wie gesagt, das mit den Arrays würde ich mir dann an deiner Stelle als nächstes vornehmen. Wenn Du das verstanden hast, erleichtert es dir viele Dinge ungemein.

Zitat

Bis zu welchen Kabellängen wäre IC2 eigentlich einsetzbar?

Bei mir sind die längsten I2C Kabel vom Stellpult zu den Steuereinheiten 'vor Ort' so ca. 2-3m lang. Das geht absolut problemlos. Es gibt aber I2C-Treiberbausteine, mit denen man auch noch deutlich größere Abstände überbrücken kann.

Zitat

Damit es halbwegs handlich und auch bezahlbar bleibt, würde ich gerne bei einem maximal 25-poligen Stecker bleiben. Davon sind jetzt bereits 15 Pins für die 12 Taster und die 12 LEDs zur Rückmeldung belegt. Signale, Entkuppler usw. werden natürlich auch noch Pins benötigen. Da würde sich ein "intelligentes" Stellpult ja geradezu anbieten.

Wenn Du einmal mit dem Arduino angefangen hast, bietet sich das in der Tat an. Du sparst dabei extrem Leitungen zwischen Stellpult und Anlage.
Ich habe zwar einen 40-poligen Flachbandstecker zwischen Stellpult und Anlage, aber davon ist noch nicht mal 1/3 belegt. Bei Lötarbeiten am Stellpult kann man das einfach abstecken, und dann bequem am Basteltisch arbeiten.


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


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


   


  • Ähnliche Themen
    Antworten
    Zugriffe
    Letzter Beitrag
Xobor Einfach ein eigenes Forum erstellen
Datenschutz