MultiStepper-Beispiel der AccelStepper Library mit 28BYJ-48 5V Stepper

Edit
Die MoBaTools leisten mindestens das Gleiche, man muß keine Bibliothek umbasteln und man kann sogar das ‘beliebte’ delay() behalten - wenn man denn will.
Da ich hier nicht mehr aktiv weiter entwickel, die MoBaTools aber zur Zeit noch täglich überarbeitet werden, sollte man Sich Diese anschauen, wenn man (beliebig viele) 28BYJ-48 5V, ‘normale Stepper’ oder Servos am Arduino anstöpseln will.
Auch LED-Zeugs und einen Kurzzeit-Timer (Eieruhr) beinhaltet diese Lib - auf jeden Fall einen Blick wert!

Hi

Vorweg:
Das ist ein recht frühes ‘Konstrukt’ und stellt in keinster Weise einen ‘So soll Das’-Zustand dar.
Dieser Sketch soll nur Anderen helfen, Ihre 28BYJ-48 Stepper am Arduino ‘zum Rennen’ zu bekommen.

Was soll’s werden: AquaBeads-Sortierer (5mm Perlen, Die mittels Wasser verklebt werden).
Der fC hatte die Packung doch gut geschüttelt geliefert … mittlerweile habe ich einen Defekt an meiner CNC, weshalb das Projekt eh auf Eis liegt.

Was Es bisher ist:
Ansteuerung zwei dieser Motoren unabhängig voneinander, Zielwert-Übergabe per Terminal - um Damit auch ‘spielen’ zu können.

Noch sind wild Durchnummerierungen, Array’s und STruct gemischt - ‘tut aber schon so laufen’ - wirklich nur eine Möglichkeit, mehrere (hier 2) 28BYJ-48 simultan per Arduino anzutreiben.

Da der Sketch selber recht lang ist (Zeichen-Limit), nur das ‘So wird damit geschwätzt’ direkt im Post.
Diese Befehle gelten für die Version aus #7, die einzelnen Sketche bringen die dort funktionierenden Befehle aber jeweils mit (h/H im Terminal).

void helper(void) {
  Serial.println(F("X        Offset (Tara)"));
  Serial.println(F("G/S      go/stop"));
  Serial.println(F("o/u/b    Motorwahl Oben, Unten, Beide"));
  Serial.println(F("R        Dauerlauf Rechts"));
  Serial.println(F("L        Dauerlauf Links"));
  Serial.println(F("M        Maxspeed"));
  Serial.println(F("B        Beschleunigung"));
  Serial.println(F("P/p      Pins Power ON/off"));
  Serial.println(F("H/h      diese Hilfe"));
  Serial.println(F("?        Status der Motoren"));
  Serial.println(F("k(Grad)  Zielposition kurzer Weg"));
  Serial.println(F("l(Grad)  Zielposition links"));
  Serial.println(F("r(Grad)  Zielposition rechts"));
  Serial.println(F("s(Step)  Ziel-Schritt"));
  Serial.println(F("0...9 -  Zieleingabe"));
  Serial.println(F("c/C      Zahl leeren"));
  Serial.println(F("!! Die Zahl muss VOR der Zuweisung eingegeben werden !!"));
  Serial.println(F("100-os -> 100, -100, obere Motor, Setze Schritt (auf -100)"));
  Serial.println(F("Der Wert wird nach Zuweisung wieder auf Null gesetzt"));
}

Bitte nicht zu sehr schimpfen, bin von zarter Natur :wink:

MfG

Edit
PS: Hier, warum die Werte der Stepper-Pins ‘gekreuzt’ sind:
es-geht-doch-schrittmotor-28byj-48-mit-der-original-arduino-stepper-library/
Ist also nicht auf meinen Mist gewachsen :wink:
(Dort wird eine blockierende Stepper-Lib benutzt, also nur ein Motor zur gleichen Zeit)

Edit 2
In #5 gibt’s den Sketch - ohne Compiler-Warnungen - vom 13.04.19
In #7 funktioniert auch der kopfüber-Stepper - vom 14.04.19

Edit 3
AccelStepper - den Namen korrigiert (nur 1 L)

AquaBeads_Sortierer.zip (3.94 KB)

Reserved

postmaster-ino: Bitte nicht zu sehr schimpfen, bin von zarter Natur ;)

Davon habe ich aber noch nichts gemerkt ;)

Sorry aber auf die Steilvorlage musste ich reagieren.

Gruß Tommy

... ich kann Das halt nicht so zeigen ... ;)

postmaster-ino:
Bitte nicht zu sehr schimpfen, bin von zarter Natur :wink:

Ich versuche es ::slight_smile:

Bei mir wirft der Kompiler verschiedene Warnungen aus, denen solltest Du Deine Aufmerksamkeit widmen.

Die vertauschten Pins sind Dir jetzt verständlich, bald aber nicht mehr, daher finde ich klarerer:

#include <AccelStepper.h>
//                                                IN1 IN2 IN3 IN4
AccelStepper stepper_oben(AccelStepper::FULL4WIRE, 8, 10, 9, 11); //28BYJ-48 - mittleren zwei Pins vertauschen
AccelStepper stepper_unten(AccelStepper::FULL4WIRE, 2, 4, 3, 5); //dito

Hast Du Dir schon mal das neue Beispiel MultiStepper.pde mit #include <MultiStepper.h> angesehen? Das zusammen mit

const byte oben = 0;
const byte unten = 1;

könnte mir gefallen.

Hi

Das Beispiel hat was - wobei ‘neu’ und .pde sich wohl her ausschließen.
Anmerkung: In dem Beispiel werden Stepper gruppiert, beide Stepper erreichen das Ziel gleichzeitig (wird wohl auf Breseham zurück gehen).

Habe heute Mal wieder etwas ‘gespielt’.
Dem Beispiel sind die Möglichkeiten hinzugekommen, die Beschleunigung und die Maximal-Geschwindigkeit einzustellen.
Weiter habe ich an den links/rechts/kürzeste Weg gefeilt - solange kein Stepper ‘Kopf steht’, klappt Das jetzt auch ohne Zusatz-Funktion - im Sketch in #0 habe ich noch stur per While den Ziel-Step ‘hochgezählt’, bis der errechnete Winkel passte.
Nun berechne ich den Abstand in beiden Richtungen, damit den Kürzeren und benutze Diesen, wenn gewünscht.
l (kleines L) Drehung links (im Winkelsinn) bis zum Zielwinkel
r - dito, nur rechts herum
k - der kürzere Weg wird eingeschlagen

Bei l/r/k habe ich noch ein Problem, wenn ein Stepper ‘kopfüber’ betrieben werden soll - wird bei mir durch ‘stepper[0].negiert=true;’ eingestellt.
Die Laufrichtung bei den anderen Funktionalitäten passt, beim Drehen auf Ziel (also k/l/r) dreht der ‘kopfüber’-Motor aber
0->90 falsch herum
90->0 richtig herum

Das konnte ich noch nicht korrigieren, hab’s noch nicht gefunden.

Der Sketch kompiliert ohne Warnungen.
Zuvor hatte ich Variablen IN einem case deklariert, Das ergibt diese, oben erwähnten Warnungen (die Variablen sind in den anderen case ebenfalls ‘vorhanden’, aber der Wert ist nicht definiert, deshalb die Warnung - ein Umklammern, wie im INet gelesen, soll Abhilfe schaffen, macht’s aber hier nicht - die Variablen sind jetzt außerhalb des switch/case, somit Alles gut)

Der Sketch wieder im Anhang, Hilfe via ?/h/H im Terminal

MfG

AquaBeads_Sortierer.zip (4.25 KB)

postmaster-ino: Das Beispiel hat was - wobei 'neu' und .pde sich wohl her ausschließen.

Ich hatte bislang AccelStepper 1.30 im Einsatz. Nun habe ich mir den aktuellen Stand 1.59 geholt, wo der Inhalt von MultiStepper nach MultipleSteppers gewandert ist und der Inhalt von MultiStepper den für Dich relevanten Teil enthält. In Deinem Sketch sehe ich "MultiStepper.pde" zitiert, aber mit dem alten Inhalt, daher fand ich den Hinweis notwendig. Anstelle von "neu" - für Dich und mich - hätte ich auch "aktuell" - 8.2015 - schreiben können.

postmaster-ino: Der Sketch kompiliert ohne Warnungen.

Bei mir jetzt auch :)

Hi

Habe heute den ganzen Tag mit dem Nano gespielt - anscheinend ist es mir gelungen, auch den kopfüber stehenden Stepper jetzt korrekt anzusprechen.
Ziel war es bei diesem Sketch, daß ich beide Motoren ansprechen kann, in Schritt oder Winkel positionieren kann um so den mechanischen Aufbau meines ‘Sortierer’ zu testen.

Die zwei Stepper werden extern mit 5V versorgt und nehmen bei mir bis zu 440mA.
Dazu ist der Jumper, Der normal die Versorgung der Ausgänge (und der LEDs) mit Vdd verbindet, auf den mittleren zwei Pins gesteckt (sind Beides Vdd), der linke Pin ist mit GND des Arduino und des Netzgerät verbunden, der Rechte mit den 5V des Netzgerät.
Von Links nach Rechts: GND Vdd Vdd VLed - per Jumper sind normal die beiden rechten Pins gebrückt.
Links liegen dann die Pins IN1-4 (von Oben nach Unten) und rechts ist der Stecker, wo der Stepper eingesteckt wird wie auch die LEDs.

Um meine Stepper auch von Hand ‘gerade rücken’ zu können, habe ich noch eine Möglichkeit geschaffen, die Stepper-Pins auf INPUT zu stellen - dadurch geht der Treiber aus (0,00A) und die Stepper wehren Sich nicht mehr so arg gegen ein Verdrehen.
Das wird mit P und p gemacht (o war ja schon für oben vergeben, weshalb der Kompiler O und o für on/off nicht zulassen wollte).

Achja, das Takten (T) ist dafür gedacht, daß der Stepper IMMER eine ganze Umdrehung fährt, unterbrochen von einer Pause.
So kann man recht schnell sehen, ob man 28BYJ48 mit 1:2048 erwischt hat, oder mit einer krummen Übersetzung - Meine sind Alle 1:2048.

In der Hoffnung, daß Das noch Jemand Anders gebrauchen kann - der Sketch ist ‘wie Er ist’ - der Nano ist sehr voll gestopft, daran dürften die Unzahl an Serial.print nicht ganz unschuldig sein (ein Teil ist per F-Makro unschädlich gemacht - der Sketch läuft bisher ohne Probleme, auch über Stunden und kompiliert ohne Warnungen).

‘Unschönheiten’ dürfen hier natürlich genannt, eigene Verbesserungen gerne gezeigt werden.
Ob ich den Sketch daraufhin überarbeite, ist aber eher fraglich - da Er So meinen derzeitigen Ansprüchen genügt.
Zum Antesten eines oder zweier 28BYJ48 mit AccellStepper sollte Das so zumindest ein Anfang sein.

MfG

AquaBeads_Sortierer.zip (5.41 KB)