Den Kondensator kannst du getrost weg lassen.
Ebenso kann man R3 weglassen und dafür R4 = 1,2 kOhm verwenden.
Weiterhin können R1 und R2 entfallen. Statt dem R2 muss dann allerdings der Pullup-Widerstand für den Arduino-Pin aktiviert werden.
Den Kondensator kannst du getrost weg lassen.
Ebenso kann man R3 weglassen und dafür R4 = 1,2 kOhm verwenden.
Weiterhin können R1 und R2 entfallen. Statt dem R2 muss dann allerdings der Pullup-Widerstand für den Arduino-Pin aktiviert werden.
Viele Grüße
Martin
- Mein Trennungsbahnhof: viewtopic.php?f=64&t=152275
- Drehscheibensteuerung auf Arduinobasis "LocoTurn": https://wiki.mobaledlib.de/anleitungen/b...v10/150_inhalte
Beiträge: | 1.633 |
Registriert am: | 22.09.2015 |
Ort: | Nämberch |
Gleise | Ohne Pickel |
Spurweite | H0 |
Steuerung | Mit Hirn und Verstand |
Stromart | DC, Digital |
Hallo an die Freunde der MobaTools,
derzeit entwickle ich eine neue Version der MobaTools. Folgendes sind die neuen 'Features' :
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Ich habe die V2.5.0 nun freigegeben, und sie wird im Bibliotheksmanger der Arduino IDE angeboten.
Fehler können natürlich weiterhin hier gemeldet werden, dann gibt's halt eine 2.5.1
P.S. Auch die Startseite habe ich mal aktualisiert
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo an alle MobaTools Nutzer.
Es gibt eine neue Version 2.6.0
Wesentliche Neuerung ist die Unterstützung der neuen UNO R4 Boards:
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo,
ich arbeite noch nicht all zu lange mit Arduino und bin vor kurzem auf die MobaTools gestoßen.
Dadurch konnte ich ein paar kleinere Projekte umsetzten die dank der dortigen Funktionen super funktionieren
Auf diesem Wege ein rieeeeeesiges Dankeschön an Franz-Peter für diesen unbezahlbahren Einsatz!!!
Momentan "plagt" mich jedoch ein Problem, dass ich nicht zum lösen bringe...
Der Aufbau ist mit einem Uno, einem Stepper, einem Taster und einer Lichtschranke für den Nullpunkt des Steppers.
Wenn der Taster für die Bewegungen auf LOW geht, soll der Stepper einen Arm nach unten bewegen. Geht der Taster wieder auf HIGH geht der Arm nach oben.
Für eine spätere Nachjustierung des unteren Punktes habe ich einen Justagetaster. Sobald dieser gedrückt wird, fährt der Arm langsahm nach unten bis der Justagetaster wieder losgelassen wird.
Der Punkt, an dem der Arm sich beim Loslassen der Justagetasters befindet, soll der neue untere Endpunkt sein.
Das Probelm: wenn ich den Aruino mit Strom versorge, bewegt sich der Arm nach drücken des Tasters wie gewünscht. Wenn ich nun nachjustiere, wird der untere Endpunkt korrekt übernommen.
Wenn ich allerdings den Uno von der Stromversorung trenne und wieder anstecke, dreht sich der Stepper nicht zu den abgespeicherten minus-Steps, sondern ins plus mit der korrigierten Stepperzahl....
Beim erneuten Nachjustieren beginnt das Spiel von Vorne...
Ich vermute, dass das mit dem von Franz-Peter erwähnten übermitteln des Vorzeichens aus # 652 zu tun hat. Allerdings bin ich nicht schlau geworden, ob das Vorzeichen nun mitglelesen wird oder ob das Vorzeichen selbst gesetzt werden muss.
Wo habe ich hier den Knoten - könnte mir da jemand helfen?
Vielen Dank vorab und schöne Grüße
Matthias
p.S.: Ich habe versucht den Code hier ins Forum zu stellen - habe dies aber nur mit Einfügen geschafft und das ist ja offensichtlich nicht richtig .... hier könnte ich auch noch Hilfe gebrauchen ...
Beiträge: | 26 |
Registriert am: | 20.06.2023 |
Ort: | Westösterreich |
Spurweite | H0 |
Stromart | DC |
Hallo Matthias,
Zitat von Matthias W. im Beitrag #655
Ich vermute, dass das mit dem von Franz-Peter erwähnten übermitteln des Vorzeichens aus # 652 zu tun hat.
Zitat von Matthias W. im Beitrag #655
p.S.: Ich habe versucht den Code hier ins Forum zu stellen - habe dies aber nur mit Einfügen geschafft und das ist ja offensichtlich nicht richtig
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter,
vielen Dank für Deine Antwort und Hilfe!
Ich habe bereits probiert, den Code unter dem Reiter Bearbeiten mit der Auswahl "für Forum kopieren" hier ins Forum zu stellen - hat jedoch nicht funktioniert ...
Und wenn ich mit der rechten Maustaste auswählen will, habe ich keine Auswahlmöglichkeit "frü Forum kopieren" .... mal schauen ob es so klappt.
Hier der Code, der wie beschrieben Probleme macht:
#include <MobaTools.h>
#include <EEPROM.h>
#define STEPS 4096 // Anzahl der Schritte des Motores ( 28BYJ-48 )
const byte Geschwindigkeit = 70; // Geschwindigkeit vom Stepper
int untererEndpunkt = -540;
const long obererEndpunkt = -20;
const byte endschalterPin = 2; // Zur Feststellung der Endposition - der Schalter verbindet den Pin mit GDN, wenn der Stepper die Lichtschranke erreicht hat
const byte Taster = 4; // Lichtschranke für Referenz
const byte JustageTaster = 18;
MoToStepper stepper(STEPS, FULLSTEP); // Einrichten des Steppers
void setup() {
stepper.attach(8, 9, 10, 11); // Nr. der Pins für den Stepper
pinMode(endschalterPin, INPUT_PULLUP); // Lichtschranke schaltet nach Gnd
pinMode(Taster, INPUT_PULLUP); // Taster für Stepperbewegung schaltet nach Gnd
pinMode(JustageTaster, INPUT_PULLUP);
stepper.setSpeed(10); // Geschwindigkeit in RPM*10
stepper.rotate(1); // Die Drehrichtung muss hin zum Schalter sein! 1 = gegen den UZS, -1 = im UZS
while (digitalRead(endschalterPin) == HIGH); // Warten bis der Endschalter anspricht
stepper.stop(); // anhalten
delay(500);
stepper.setZero(); // Momentane Position als Nullpunkt einrichten
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
untererEndpunkt = EEPROM.read(0); // Initialisierung der Stepper-Positionen aus dem EEPROM
}
void loop() {
// ------------------------- Justage -------------------------------
if (digitalRead(JustageTaster) == LOW) {
while (digitalRead(JustageTaster) == LOW) {
stepper.setSpeed(3); // Geschwindigkeit in RPM*10
stepper.doSteps(-5); // Langsames Weiterdrehen des Steppers während Justage
}
untererEndpunkt = stepper.readSteps(); // Speichern der neuen Position in der Variablen
EEPROM.write(0, untererEndpunkt); // Speichern der neuen Position im EEPROM Nummer "0"
}
// ------------------------ normaler Ablauf -------------------------
if (digitalRead(Taster) == LOW) {
stepper.setSpeed(Geschwindigkeit/2);
stepper.writeSteps(untererEndpunkt); // zum unteren Endpunkt bewegen
}
if (digitalRead(Taster) == HIGH) {
stepper.setSpeed(Geschwindigkeit);
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
}
}
Beiträge: | 26 |
Registriert am: | 20.06.2023 |
Ort: | Westösterreich |
Spurweite | H0 |
Stromart | DC |
Hallo Matthias,
ok, Du nutzt die IDE 2.x - da funktioniert das mit dem 'Kopieren für Forum' so nicht. Ich benutze die v2 IDE eigentlich fast nie, da die mir noch zu viele Macken hat . Meine Anleitung bezog sich auf die 1.8.9 IDE
Nun zu deinem Problem. Das dürfte an deiner Verwendung der EEPROM Lib liegen.
EEPROM.write(0, untererEndpunkt); // Speichern der neuen Position im EEPROM Nummer "0"
EEPROM.write schreibt immer nur ein einzelnes Byte, dein 'untererEndpunkt' ist aber ein int, und damit 2 byte lang. Das gleiche gilt dann auch für EEPROM.read(). Auch da wird nur ein einzelnes byte gelesen.
Versuch es stattdessen mal mit EEPROM.put() und EEPROM.get() - das funktioniert auch mit 'int'. Die Syntax bei get ist aber anders als beim read - siehe in der Arduino Referenz:
https://docs.arduino.cc/learn/built-in-libraries/eeprom/
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter,
Tip-top, jetzt funktioniert es so wie es soll - vielen Dank!
Eine Frage hätte ich noch: mit dem Unipolaren Stepper und dem Befehl myStepper.attachEnable(uint16_t delay); (oder im Falle des gezeigten Sketches stepper.attach ....) müssten ja die Stepperpins nach der Bewegung abzuschalten sein.
Wo genau beim Sketch muss ich diesen Befehl einfügen? Ich habe zwar die MobaTools Beschreibung auf Seite 8 gelesen, hab´s aber offensichtlich nicht kappiert ....
Besten Dank und Gruß
Matthias
Beiträge: | 26 |
Registriert am: | 20.06.2023 |
Ort: | Westösterreich |
Spurweite | H0 |
Stromart | DC |
Hallo Matthias,
super, dass es jetzt funktioniert.
Zitat von Matthias W. im Beitrag #659
Wo genau beim Sketch muss ich diesen Befehl einfügen?
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter,
ich habe den Befehl im setup() eingefügt - der Sketch lässt sich aber nicht kompilieren - habe ich offensichtlich falsch gemacht.
Könntest Du mir eventuell zeigen, wie ich den Befehl schreiben muss damit dieser passt??
Und gehe ich richtig in der Annahme, dass wenn die Pins dann nach der Bewegung stromlos geschalten werden, auch die LED´s auf der Motor-Platine ausgehen müssten?
So habe ich den Befehl eingefügt:
void setup() {
stepper.attach(14, 15, 16, 17); // Nr. der Pins für den Stepper
stepper.attachEnable(uint16_t delay);
pinMode(endschalterPin, INPUT_PULLUP); // Lichtschranke schaltet nach Gnd
pinMode(Taster, INPUT_PULLUP); // Taster für Stepperbewegung schaltet nach Gnd
pinMode(JustageTaster, INPUT_PULLUP);
stepper.setSpeed(10); // Geschwindigkeit in RPM*10
stepper.rotate(1); // Die Drehrichtung muss hin zum Schalter sein! 1 = gegen den UZS, -1 = im UZS
while (digitalRead(endschalterPin) == HIGH); // Warten bis der Endschalter anspricht
stepper.stop(); // anhalten
delay(500);
stepper.setZero(); // Momentane Position als Nullpunkt einrichten
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
EEPROM.get(0, untererEndpunkt); // Initialisierung der Stepper-Positionen aus dem EEPROM
}
Beiträge: | 26 |
Registriert am: | 20.06.2023 |
Ort: | Westösterreich |
Spurweite | H0 |
Stromart | DC |
Hallo Matthias,
Zitat von Matthias W. im Beitrag #6611
stepper.attachEnable(uint16_t delay);
stepper.attachEnable(100);
für eine Verzögerung von 100ms zwischen Ein/Ausschalten des Steppers und der Bewegung.
Und ja, die Leds gehen aus, wenn der Motor stromlos ist.
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter,
das ist ja nett ausgedrückt
Zitat von MicroBahner im Beitrag #662
Was Du da eingefügt hast, ist ( fast )ein Funktions-Prototyp, aber kein Funktionsaufruf.
Beiträge: | 26 |
Registriert am: | 20.06.2023 |
Ort: | Westösterreich |
Spurweite | H0 |
Stromart | DC |
Hallo Matthias,
Zitat von Matthias W. im Beitrag #663
Bei mir ist so die Pause vor den Bewegungen und nicht vor dem Abschalten der Pins....
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter,
hier der Sketch:
```cpp
#include <MobaTools.h>
#include <EEPROM.h>
#define STEPS 4096 // Anzahl der Schritte des Motores ( 28BYJ-48 )
const byte Geschwindigkeit = 70; // Geschwindigkeit vom Stepper
int untererEndpunkt = -540;
const long obererEndpunkt = -20;
const byte endschalterPin = 3; // Zur Feststellung der Endposition - der Schalter verbindet den Pin mit GDN, wenn der Stepper die Lichtschranke erreicht hat
const byte Taster = 4; // Lichtschranke für Referenz
const byte JustageTaster = 18;
MoToStepper stepper(STEPS, FULLSTEP); // Einrichten des Steppers
void setup() {
stepper.attach(14, 15, 16, 17); // Nr. der Pins für den Stepper
stepper.attachEnable(1000);
pinMode(endschalterPin, INPUT_PULLUP); // Lichtschranke schaltet nach Gnd
pinMode(Taster, INPUT_PULLUP); // Taster für Stepperbewegung schaltet nach Gnd
pinMode(JustageTaster, INPUT_PULLUP);
stepper.setSpeed(10); // Geschwindigkeit in RPM*10
stepper.rotate(1); // Die Drehrichtung muss hin zum Schalter sein! 1 = gegen den UZS, -1 = im UZS
while (digitalRead(endschalterPin) == HIGH); // Warten bis der Endschalter anspricht
stepper.stop(); // anhalten
delay(500);
stepper.setZero(); // Momentane Position als Nullpunkt einrichten
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
EEPROM.get(0, untererEndpunkt); // Initialisierung der Stepper-Positionen aus dem EEPROM
}
void loop() {
// ------------------------- Justage -------------------------------
if (digitalRead(JustageTaster) == LOW) {
while (digitalRead(JustageTaster) == LOW) {
stepper.setSpeed(3); // Geschwindigkeit in RPM*10
stepper.doSteps(-5); // Langsames Weiterdrehen des Steppers während Justage
}
untererEndpunkt = stepper.readSteps(); // Speichern der neuen Position in der Variablen
EEPROM.put(0, untererEndpunkt); // Speichern der neuen Position im EEPROM Nummer "0"
}
// ------------------------ normaler Ablauf -------------------------
if (digitalRead(Taster) == LOW) {
stepper.setSpeed(Geschwindigkeit/2);
stepper.writeSteps(untererEndpunkt); // zum unteren Endpunkt bewegen
}
if (digitalRead(Taster) == HIGH) {
stepper.setSpeed(Geschwindigkeit);
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
}
}
```
und ein Foto vom Aufbau habe ich angehängt - ist sehr provisorisch, funktioniert aber soweit .... ich hoffe das reicht so. Wenn ich den Aufbau aufzeichnen soll, bitte melden!
Die Nummer 1 ist die Stromversorgung von 5 V für den Stepper und die beiden Lichtschranken (Taster und Justagetaster).
Die Nummer 2 sind die Lichtschranken (grün/blau/lila als Taster - orange/braun/rot als Justagetaster)
Nummer 3 ist die Motorplatine des Steppers (28BYJ-48 mit der Platine ULN2003) - hier sieht man die LED´s die an bleiben.
Die Lichtschranke für den setZero() habe ich an die Stromversorgung vom Uno angeschlossen, da diese Kabel etwas kürzer sind.
Besten Dank für Deine Bemühungen und schöne Grüße
Matthias
Beiträge: | 26 |
Registriert am: | 20.06.2023 |
Ort: | Westösterreich |
Spurweite | H0 |
Stromart | DC |
Hallo Matthias,
so, jetzt habe ich die Ursache gefunden.
Hier:
// ------------------------ normaler Ablauf -------------------------
if (digitalRead(Taster) == LOW) {
stepper.setSpeed(Geschwindigkeit/2);
stepper.writeSteps(untererEndpunkt); // zum unteren Endpunkt bewegen
}
if (digitalRead(Taster) == HIGH) {
stepper.setSpeed(Geschwindigkeit);
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
}
ruftst Du ständig
stepper.writeSteps()
auf. Und das verhindert das Abschalten.
Ich muss da mal genauer nachschauen. Wenn writeSteps nicht tatsächlich zu einer Bewegung führt, sollte das Abschalten trotzdem funktionieren.
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Matthias,
ein Problem an deinem Code ist, dass Du nicht berücksichtigst, dass die MoToStepper Aufrufe nicht blockierend sind, und die eigentliche Stepperbewegung im Hintergrund abläuft. Für deinen Taster brauchst Du deshalb eine 'state change detection'. D.h. Du musst den Zeitpunkt des Drückens und Loslassens erkennen, und nicht einfach statisch abfragen. Das geht z.B. so:
Du definierst eine weitere globlae Variable:
byte tasterState = HIGH; // globale Variable für den Tasterzustand
und dann:
// ------------------------ normaler Ablauf -------------------------
if (digitalRead(Taster) == LOW && tasterState == HIGH) {
tasterState = LOW;
stepper.setSpeed(Geschwindigkeit / 2);
stepper.writeSteps(untererEndpunkt); // zum unteren Endpunkt bewegen
}
if (digitalRead(Taster) == HIGH && tasterState == LOW) {
tasterState = HIGH;
stepper.setSpeed(Geschwindigkeit);
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
}
Dann werden die if-Blöcke nicht ständig bei jedem loop() durchlaufen, sondern nur jeweils 1x beim Drücken bzw. Loslassen.
Ähnliches gilt auch für die Justage:
while (digitalRead(JustageTaster) == LOW) {
stepper.setSpeed(3); // Geschwindigkeit in RPM*10
stepper.doSteps(-5); // Langsames Weiterdrehen des Steppers während Justage
}
das doSteps(-5); kann nie wirklich ausgeführt werden, weil Du es in der while-Schleife im µs Takt immer wieder neu aufrufst.
So wäre es besser:
// ------------------------- Justage -------------------------------
if (digitalRead(JustageTaster) == LOW) {
stepper.setSpeed(3); // Geschwindigkeit in RPM*10
stepper.rotate(-1); // Langsames Weiterdrehen des Steppers während Justage
while (digitalRead(JustageTaster) == LOW );
stepper.stop();
untererEndpunkt = stepper.readSteps(); // Speichern der neuen Position in der Variablen
EEPROM.put(0, untererEndpunkt); // Speichern der neuen Position im EEPROM Nummer "0"
stepper.setSpeed(Geschwindigkeit);
stepper.writeSteps(obererEndpunkt); // zum oberen Endpunkt bewegen
}
Der komplette überarbeitete Sketch in WokWi.
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter,
zuerst einmal ein riesiges Dankeschön, dass du dir die Zeit nimmst um mir und hoffentlich ein paar mitlesenden zu helfen!
Ich habe den Sketch umgeschrieben und so funktioniert es tadellos. Ich habe vor längerer Zeit auch noch einen Sketch für eine Seilbahnsteuerung gemacht, bei der die Gondeln ja länger stehen bleiben und das Abschalten auch von Vorteil ist.
Auch hier konnte ich das erfolgreich umsetzen, was mich richtig gefreut hat!!
Zitat von MicroBahner im Beitrag #667
Der komplette überarbeitete Sketch in WokWi.
Beiträge: | 26 |
Registriert am: | 20.06.2023 |
Ort: | Westösterreich |
Spurweite | H0 |
Stromart | DC |
Hallo Matthias,
super dass es jetzt funktioniert, und ich etwas helfen konnte
Zitat von Matthias W. im Beitrag #668
diese Simulation habe ich so noch nie gesehen - die ist ja echt der Hammer!
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter
Mit deiner Moba Tools habe ich in Vergangenheit schon viele Bewegungen auf meiner Modellbahn realisieren können
und möchte mich nochmals für deine Arbeit bedanken.
Bisher habe ich bei jedem Projekt immer nur einen Arduino verwendet.
Bei meinem neuen Projekt benötige ich mehrere Servos und stehe vor dem Problem, die verschiedene Servos einen Namen zuzuordnen.
Meine Bitte an dich, kannst du mir mitteilen, wie ich die einzelne Servos einen Namen geben kann, oder wo ich einen Sketch finde,
aus dem ich mich schlau machen kann.
Danke im Voraus
Gruß Bernd
Beiträge: | 62 |
Registriert am: | 16.12.2018 |
Ort: | Kernen i.R. |
Spurweite | H0 |
Stromart | Digital |
Hallo Bernd,
wenn Du mehere Servos verwenden willst, geht das auch nicht viel anders als mehrere Variablen einzurichten:
MoToServo Servo1;
MoToServo Servo2;
Du könntest Sie sogar als Array einrichten:
MoToServo myServos[4]; // 4 Servos einrichten
Du musst dann natürlich auch noch jeden Servo konfigurieren ( z.B. mit attach(pinNr) den jeweiligen Anschlußpin festlegen ).
Bei Arrays z.B. so:
const byte servoPins[] = { 2, 3, 4 };
byte servoSpeed[] = {10, 10, 10 };
byte servoPos[] = {10, 10, 10 };
const byte servoAnz = sizeof(servoPins);
MoToServo myServo[servoAnz];
void setup() {
for ( byte i = 0; i < servoAnz; i++ ) {
myServo[i].attach(servoPins[i] );
myServo[i].setSpeed( servoSpeed[i] );
myServo[i].write( servoPos[i] );
}
}
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter
Herzlichen Dank für die ausführliche Antwort, mit der ich weitermachen kann.
Gruß Bernd
Beiträge: | 62 |
Registriert am: | 16.12.2018 |
Ort: | Kernen i.R. |
Spurweite | H0 |
Stromart | Digital |
Hallo an Alle,
ich bin bei Arduino ein totaler Anfänger, habe mir für mein Smartphone ein Drehregler gebastelt was soweit ganz gut ging mit hier und da was abgucken. Nun aber komme ich nicht weiter, ich möchte eine Segmentdrehscheibe ansteuern, habe dazu, zum testen, von den Mobatools den Sketch "Stepper_Reverencen" auf meinen Arduino Uno verschnitt geladen und mit einem Steckboard einen Testaufbau zusammengesteckt. Ein anderer Sketch zum Testen ob der Motor läuft wurde erfolgreich probiert. Nun zu meinen Problem, der Sketch "Stepper_Reverencen" funktioniert nur zum Teil. Ich kann die Referentfahrt machen und die Taster doppelbelegung ausführen mit Motor links rechts und Stop, was aber nicht geht sind die normalen Taster damit ich die Positionen anfahren kann. Als Stepdriver nutze ich den DRV8825.
Nach diesem Prinzip anfangs aufgebaut und getestet, was funktioniert hat:
https://starthardware.org/stepper-motor-mit-dem-drv8825-steuern/
Ich habe dann bei Wokwi die Schaltung endeckt, dort im Simulator funktioniert sie ja, aber bei mir nicht.
https://wokwi.com/projects/390427919821726721
Ich weiß das dort ein andere Treiber genutzt wird und dieser etwas anders angeschlossen ist.
Vielleicht kann mir hier jemand helfen.
Schöne Grüße
Stefan
Schöne Grüße
Stefan
Tillig Elite Gleis
Digitalsystem ECoS 50200, Switchpilot Servo
Datenformat: DCC mit ABC-Bremsstrecken
Decoder: ESU Lokpilot und Loksound 4,5
ESU-Programmer
Meine Kreation in Spur Z: Ommi 51 - Muldenkippwagen
Beiträge: | 191 |
Registriert am: | 14.01.2011 |
Ort: | Jena |
Gleise | Tillig Standart / Elite |
Spurweite | H0, Z |
Steuerung | Ecos 2 |
Stromart | DC, Digital |
Hallo Stefan,
Zitat von Kali im Beitrag #673
Ich kann die Referentfahrt machen und die Taster doppelbelegung ausführen mit Motor links rechts und Stop, was aber nicht geht sind die normalen Taster damit ich die Positionen anfahren kann.
viele Grüße
Franz-Peter
Ein 'elektromechanisches' Stellwerk
Der (ehemalige) 'Eisberg'
Beiträge: | 2.833 |
Registriert am: | 28.11.2012 |
Ort: | Mittelfranken |
Gleise | Tillig Elite |
Steuerung | Eigenbau |
Stromart | Analog |
Hallo Franz-Peter,
mir ist gestern im Bett noch ein Gedanke durch den Kopf geschossen, könnte es was mit den angegebenen Schritten und dem Poti zutun haben? Bei Doppelklick wird das Poti ja ignoriert, angegeben sind 800 Schritte pro Umdrehung bei 1/4 Microstep. Bei einem vollen Step wären es ja 200 Schritte. Nun habe ich, durch die 200, wohl überlesen, dass mein Motor nur 20 Schritte pro Umdrehung macht (Hat dann noch ein Getriebe 1/16).
Wären ja aber dann bei 1/4 Mstep 80 Schritte die ich angeben müsste oder?
Danke
Grüße
Stefan
Schöne Grüße
Stefan
Tillig Elite Gleis
Digitalsystem ECoS 50200, Switchpilot Servo
Datenformat: DCC mit ABC-Bremsstrecken
Decoder: ESU Lokpilot und Loksound 4,5
ESU-Programmer
Meine Kreation in Spur Z: Ommi 51 - Muldenkippwagen
Beiträge: | 191 |
Registriert am: | 14.01.2011 |
Ort: | Jena |
Gleise | Tillig Standart / Elite |
Spurweite | H0, Z |
Steuerung | Ecos 2 |
Stromart | DC, Digital |
Einfach ein eigenes Forum erstellen |