Absoluter Neuling trifft Schrittmotor

Hallo liebes Forum!

Bitte schlagt mich nicht. Ich habe gesucht - aber die SuFu bringt eine Meldung, dass nichts gefunden wurde. Schwer vorstellbar; die Frage wurde bestimmt schon mal gestellt.

Ich habe mir dieses Set in der Bucht bestellt:

ATmega16U2 ATmega328P UNO R3+9G Micro Servo+ULN2003 Stepper Motor for arduino

Dabei ist dieses Shield für den Schrittmotor:

Die Frage ist klar: wie muss ich stecken, damit die sich Arduino und Shield verstehen? Einige Tutorials habe ich schon gelesen, aber da war noch nicht das passende dabei.

Ich bitte wirklich um Entschuldigung, dass ich das poste - aber ich kenne mich nicht aus und da es keine Doku und keinen Firmennamen von dem Shield gibt, weiß ich nicht, wonach ich suchen muss. Die Suche nach "UNL2003" bringt auch nichts, das ist ja nur der Chip.

Freue mich auf Antwort!
Liebe grüße
Braunbaer

Hallo,

dazu spuckt Google wirklich jede Menge Treffer aus, bei mir knapp 100.000. Gesucht habe ich nach "arduino ULN2003 Stepper Motor for arduino". Hier einer der Treffer: 28BYJ-48 Stepper Motor with ULN2003 driver and Arduino Uno – 42 Bots

Gruß,
Ralf

Das gleiche Set gibt's z.Zt. auch in Grün (was die Hintergrundfarbe betrifft), und beide teilen sich die gleiche Beschreibung auf ebay.com
(Die Beschreibung deutet an, dass es sich nicht um eine Arduino-Fälschung handelt, sondern du einen Nachbau gekriegt hast, der anders aussieht als auf dem Bild.)
Frag doch einfach höflich nach Dokumentation bzw. links dazu. Dass sie bei ebay diese Links nicht reinstellen ist einigermassen verständlich, eine schnelle und freundliche Antwort wirst du sicher bekommen. (ob hilfreich, bleibt abzuwarten)
Das Shield scheint nicht viel mehr als den ULN2003 zu beherbergen und die Ausgänge auf die Pins A..G zu geben und (geraten) 4 der 7 Kanäle auf den 5poligen Stecker für den Stepper Motor

Schau dir mal dies an

P.S.
Und stimmt, was seit ein paar Tagen nicht mehr geht, ist die Suche-Funktion innerhalb des Arduino Forums

Hallo,

Beim Verkäufer hatte ich mich gemeldet. Der hat sogar geantwortet :

Thanks for your reply.
Please understand we just a common seller and not specializer.

Thank you very much!

Sag ich doch : "eine schnelle und freundliche Antwort wirst du sicher bekommen. (ob hilfreich, bleibt abzuwarten)" :wink:
Den 5 Leitungen nach ist es wohl ein unipolarer Stepper. Musst du halt ausprobieren, welche 4 der 7 Eingänge auf dem Stepperkabel wie ankommen (tippe mal einfach auf 1 .. 4 ähnlich wie hier
http://www.tigoe.com/pcomp/code/circuits/motors/stepper-motors/

JA, grins.....

Ich werde es ausprobieren. Immerhin, die LED blinkt schon mal, mein erster SChritt war schon mal erfolgreich. Mir fehlt noch ein Steckbrett, grummel. Ich probiere am Wochenende mal weiter.

Danke ersteinmal; einige Hinweise habe ich ja nun.

LG
Braunbaer

http://www.instructables.com/id/BYJ48-Stepper-Motor/all/?lang=de ohne Bibliothek
Stepper Arduino Library, connecting Stepper Motors to Teensy mit Bibliothek

Grüße Uwe

Hurra, gefunden - danke für den Hinweis.

1000 Grüße
Braunbaer

Hilfe!

Ich kriegs nicht hin. Der Motor "zitter" oder "klackert", aber drehen tut er sich nicht.

Mit den Parametern habe ich schon rumgespielt - wie schon gesagt, ist das mit der Doku etwas mau. Ich habe auch diverse Codes ausprobiert. Klappt nicht.

Was mache ich falsch? Hat einer eine Idee? Was für informationen müsste ich noch liefern? Freue mich über einen Tipp!

Momentan habe ich gesteckt:
8 -> IN1
9 -> IN2
10 -> IN3
11 -> IN4

#include <Stepper.h>

// change this to the number of steps on your motor
#define STEPS 4096

// create an instance of the stepper class, specifying
// the number of steps of the motor and the pins it's
// attached to
Stepper stepper(STEPS, 8, 9, 10, 11);

void setup()
{
   Serial.begin(9600);
  // set the speed of the motor to 30 RPMs
  stepper.setSpeed(30);
}

void loop()
{

  // move a number of steps equal to the change in the
  // sensor reading
  stepper.step(200);

  Serial.println("Wait...");
  delay(2000);  

}

Versuch's mal mit einer kleineren Geschwindigkeit.
Grüße Uwe

Moin,

das habe ich auch probiert.

Geschwindigkeit und auch die Steps habe ich variiert. Ebenso die Pin-Belegung. "Trial and Error" habe ich wohl durch, da ist bestimmt ein Denkfehler bei mir.

Viele Grüße
Braunbaer

Hallo,

in dem Link, den ich Dir oben angegeben hatte, ist doch auch eine Library erwähnt, Infos, an welche Pins der Motor anzuschließen ist, und ein Demo-Sketch (der für einen Motor).

Hast Du die mal ausprobiert?

Gruß,
Ralf

Edit: Habe beim googeln noch folgendes gefunden: stepper(STEPS mit 8,10,11,9), 9,11,8,10), 10,8,9,11), und 11,9,10,8) soll funktionieren. Die anderen Kombinationen nicht.

Hi,

ja, auch das habe ich ausprobiert. Gleich als erstes, hat nicht funktioniert - und dann nicht weiter verfolgt. Jetzt habe ich aber noch etwas mehr gelernt und werde den Faden aufnehmen.

Was auffällt ist, dass der Stecke von dem Breakout Port im Vergleich zu meinem um 180° gedreht ist. Deswegen konnte das vermutlich nicht funktionieren.

Jetzt ist wieder Wochenende, ich setze mich nochmal dran!

Danke für den Input!

LG
Braunbaer

Hi,

ich habe von dieser Seite dieser Seite das folgende (leicht modifiziere) Skript verwendet:

#include <AccelStepper.h>
#define HALFSTEP 8

// Motor pin definitions
#define motorPin1  11     // IN1 on the ULN2003 driver 1
#define motorPin2  10     // IN2 on the ULN2003 driver 1
#define motorPin3  9    // IN3 on the ULN2003 driver 1
#define motorPin4  8    // IN4 on the ULN2003 driver 1

// Initialize with pin sequence IN1-IN3-IN2-IN4 for using the AccelStepper with 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);

void setup() {
  
  Serial.begin(9600);
  stepper1.setMaxSpeed(1000.0);
  stepper1.setAcceleration(100.0);
  stepper1.setSpeed(200);
  stepper1.moveTo(20000);

}//--(end setup )---

void loop() {

   //Change direction when the stepper reaches the target position
  if (stepper1.distanceToGo() == 0) {
    stepper1.moveTo(-stepper1.currentPosition());
  }
  
  stepper1.run();
  

   Serial.println("Wait...!");
   delay(2000);              // wait for a second
;              // wait for a second   
}

Die Libary habe ich runtergeladen, es wird ohne Fehlermeldung kompiliert. Geändert habe ich die Pins, weil ich gesteckt habe:
8 -> IN1
9 -> IN2
10 -> IN3
11 -> IN4

Leider tut sich nichts großartiges. Der Motor zuckt eine Winzigkeit, kaum merkbar. Ich sehe, dass auf meinem Breakout Board die Dioden leuchten:

D4 an,
1 Sekunde später D3 an
1 Sekunde später D4 aus
1 Sekunde später D2 an
1 Sekunde später D3 aus
1 Sekunde später D1 an
1 Sekunde später D2 aus

Es leuchten für 1 Sekunde 2 Leds , dann nur eine.

Tja, ich bin nun etwas ratlos. Hat vielleicht noch einer eine Idee? Mittlerweile bin ich bereit, den Motor mit Zubehör auch irgendwo hinzuschicken, vielleicht kriegt das einer von euch hin. Weiß nicht mehr weiter.

Viele Grüße
Braunbaer

braunbaer2003:
Weiß nicht mehr weiter.

Diese kleinen Mini-Steppermotoren sind doch supereinfach anzusteuern.
Vier Pins - das bekommt doch jeder hin, der fehlerfrei bis 4 zählen kann!

Und zwar OHNE irgendeine Library.

Beiliegend mal ein Demo-Sketch für folgende Verkabelung:
Treiber IN1 ==> Arduino Pin-8
Treiber IN2 ==> Arduino Pin-9
Treiber IN3 ==> Arduino Pin-10
Treiber IN4 ==> Arduino Pin-11
Treiber IN5 ==> unbeschaltet
Treiber IN6 ==> unbeschaltet
Treiber IN7 ==> unbeschaltet
Treiber IN8 ==> unbeschaltet
Treiber + ==> Arduino 5V
Treiber - ==> Arduino GND

Verkabelung klar?

Dann spielst Du einen Test-Sketch auf:

//declare variables for the motor pins
int motorPin1 = 8;    // Blue   - 28BYJ48 pin 1
int motorPin2 = 9;    // Pink   - 28BYJ48 pin 2
int motorPin3 = 10;    // Yellow - 28BYJ48 pin 3
int motorPin4 = 11;    // Orange - 28BYJ48 pin 4
                        // Red    - 28BYJ48 pin 5 (VCC)

int motorSpeed = 1200;  //variable to set stepper speed
int count = 0;          // count of steps made
int countsperrev = 512; // number of steps per full revolution
int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};

//////////////////////////////////////////////////////////////////////////////
void setup() {
  //declare the motor pins as outputs
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
  Serial.begin(9600);
}

//////////////////////////////////////////////////////////////////////////////
void loop(){
  if(count < countsperrev )
    clockwise();
  else if (count == countsperrev * 2)
    count = 0;
  else
    anticlockwise();
  count++;
}

//////////////////////////////////////////////////////////////////////////////
//set pins to ULN2003 high in sequence from 1 to 4
//delay "motorSpeed" between each pin setting (to determine speed)
void anticlockwise()
{
  for(int i = 0; i < 8; i++)
  {
    setOutput(i);
    delayMicroseconds(motorSpeed);
  }
}

void clockwise()
{
  for(int i = 7; i >= 0; i--)
  {
    setOutput(i);
    delayMicroseconds(motorSpeed);
  }
}

void setOutput(int out)
{
  digitalWrite(motorPin1, bitRead(lookup[out], 0));
  digitalWrite(motorPin2, bitRead(lookup[out], 1));
  digitalWrite(motorPin3, bitRead(lookup[out], 2));
  digitalWrite(motorPin4, bitRead(lookup[out], 3));
}

Und dann sollte der Motor immer im Wechsel eine Umdrehung links- und eine Umdrehung rechtsrum machen.

Edit/Nachtrag:
Und wenn Du eine Library verwendest, dann INFORMIERE Dich bitte über die Library, wie sie funktioniert!

Bei Deiner Verkabelung
8 -> IN1
9 -> IN2
10 -> IN3
11 -> IN4
lese ich heraus, dass die richtige Initialisierung mit Deiner Lieblings-Library dann so funktioniert:

Stepper stepper(STEPS, 8, 10, 9, 11);

Das ist nicht genau das, was Du in Deinem Programm stehen hast!

Oho jurs ^^

Zum Glück hats mich nicht anfangs so hart getroffen.
Nimms nicht persönlich braunbaer2003, jurs ist eigentlich immer sehr freundlich.
Mir hat er jedenfalls schon oft kompetent geholfen.

Wahrscheinlich hat jurs aber (wie immer) recht und dein Sketch hatte genau da den Fehler.
Das Beispiel von jurs wird übrigens funktionieren.
Also auch wenn er ein wenig forsch war - immerhin hat er geholfen :slight_smile:

Hallo Forum!

Ist nicht schlimm, ich bin keine Mimose und kann einen Stiefel ab! Und ja, ich bin Dank Jurs Hilfe weiter und sage auch Dankeschön!

Der Erfolg ist hier im Video zu sehen - aber ich bin nicht sicher, ob es das Erwartete ist. Der Motor macht keine ganze Umdrehung, nur ca. eine viertel Umdrehung.

Hier ist auch ein Bild von der Verkabelung:

Es ist zu sehen, dass das blaue Kabel zum Motor "unten" ist. Der Stecker passt nur in diese Richtung. Ist das ein Problem und ich muss die Belegung umdrehen?

PS: das blaue und schwarze Kabel, was an der Stromversorgung hängt, geht ins Nirgendwo; ich habe ein Kabel von einem PC-Lüfter genommen, um den Strom anzuklemmen.

Den Motor vom Arduino Board zu versorgen ist eine ganz, ganz schlechte Idee. Der sollte von einem eigenen Netzteil versorgt werden und man verbindest nur die Masse des Arduino mit Masse des Treiber-Moduls.

braunbaer2003:
Der Motor macht keine ganze Umdrehung, nur ca. eine viertel Umdrehung.

Mit dem von mir geposteten Sketch, der ohne Einbindung einer Library funktioniert?

In dem Fall verlängere mal das Mikrosekunden-Delay zwischen den Stepper-Impulsen etwas. Ich habe da 1200 stehen und rein rechnerisch von der Spezifikation her sollte der Wert nicht unter 1250 sein.

Probiers mal mit einer Verdoppelung auf:

int motorSpeed = 2400;  //variable to set stepper speed

Macht der Motor dann eine volle Umdrehung hin und her?

Ansonsten mal die Verkabelung prüfen: Du verwendest keine Breadboard-Testkabel und ich bin mir nicht sicher, ob Du mit Deinen Kabeln überall an den Kontakten eine einwandfreie Verbindung bekommst.

Ein einzelner solcher Stepper sollte ohne Probleme aus dem Arduino zu versorgen sein, ich habe eben mal gemessen: Mit dem von mir geposteten Sketch beträgt die durchschnittliche Stromaufnahme des Treibers mit laufendem Motor ca. 100 mA. Ich selbst verwende zum Testen chinesische Breadboardkabel vom Typ "20cm Dupont Line Cable Male to Female Jumper".

@braunbaer:
Die Zeile in "deinem" Testcode

int countsperrev = 512; // number of steps per full revolution

hast du gesehen?

Wer sagt dir, dass das zu deinem Motor passt ?