Hier noch das Programm: Es soll eine gerade Strecke fahren dann eine Kurve dann wieder gerade Strecke usw.
//2 Motoren X Schritte bei 1 Motor dann 2 Motor x Schritte
// Definieren der Pins für den ersten ULN2003 Treiber Achtung: PINS gedreht wegen falscher stepper bibliothek stepper 1.1.3 Installation one this device
const int in1 = 8;
const int in2 = 9;
const int in3 = 10;
const int in4 = 11;
// Definieren der Pins für den zweiten ULN2003 Treiber Achtung: PINS gedreht wegen falscher stepper bibliothek stepper 1.1.3 Installation one this device
const int in5 = 4;
const int in6 = 5;
const int in7 = 6;
const int in8 = 7;
// Definieren der Schrittwerte für den Schrittmotor <link>28BYJ-48</link>
const int stepsPerRevolution = 2048; // Der <link>28BYJ-48</link> hat 2048 Schritte pro Umdrehung
// Initialisieren der Stepper-Bibliothek
#include <Stepper.h>
Stepper myStepper1(stepsPerRevolution, in1, in3, in2, in4); // Initialisieren des Schrittmotors1
Stepper myStepper2(stepsPerRevolution, in5, in7, in6, in8); // Initialisieren des Schrittmotors2
void setup() {
// Setzen der Pins als Ausgänge Motor1
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Setzen der Pins als Ausgänge Motor2
pinMode(in5, OUTPUT);
pinMode(in6, OUTPUT);
pinMode(in7, OUTPUT);
pinMode(in8, OUTPUT);
}
void loop() {
delay(1000);
// x Schritt weiter
myStepper1.setSpeed(15); // Geschwindigkeit einstellen (in Umdrehungen pro Minute)max. 15 stabil
myStepper2.setSpeed(15); // Geschwindigkeit einstellen (in Umdrehungen pro Minute)max. 15 stabil
myStepper1.step(2048); // x Schritt weiter vorwärts
myStepper2.step(-2048); // x Schritt weiter vorwärts
delay(1000);// Verzögerung X für stabil
myStepper1.step(2048); // x Schritt weiter Kurve
myStepper2.step(0);
delay(300);
myStepper1.step(7243); // x Schritt weiter vorwärts
myStepper2.step(-7243); // x Schritt weiter vorwärts
delay(1000);
myStepper1.step(2048); // x Schritt weiter Kurve
myStepper2.step(0);
delay(300);
myStepper1.step(7243); // x Schritt weiter vorwärts
myStepper2.step(-7243); // x Schritt weiter vorwärts
delay(1000);
myStepper1.step(2048); // x Schritt weiter Kurve
myStepper2.step(0);
delay(300);
myStepper1.step(7243); // x Schritt weiter vorwärts
myStepper2.step(-7243); // x Schritt weiter vorwärts
delay(1000);
}
//Ende
Hallo,
nutze eine andere Lib für die Ansteuerung der der Motoren. Die von Dir verwendete arbeitet blockierend das Program läuft erst weiter wenn die Schritte abgearbeitete sind.
Die Lib Mobatools oder AccelSteppe können das besser.
28 BYJ-48 gibt es als 5V und als 12V Version. 9V, auch mit dem Spannungsabfall am ULN2003, ist dann entweder zu viel oder zu wenig.
Wobei 9V bei einem 12V Motor funktionieren kann, dieser aber weniger Kraft hat bzw bei einem geringeren Bremsmoment stehen bleibt. DH der Motor hat weniger Kraft als er haben könnte.
Grüße Uwe
Ja die Spannungsversorgung muss ich mich noch drun kümmern. Das Fahrzeug soll vorerst ein Quadrat abfahren 1m x1m
Es soll noch ein HC SR 04 später dazukommen.
Die Motoren haben 5V DC hatte wohl meine Brille nicht auf, haben jedenfalls die 9V überlebt. Laufen sehr gut mit handy powerbank, 5V/2A, 5200mAH.
Danke nochmals.
//Robo 2 Motoren , getestet:ok 24.2.24
// Robo fährt im Quadrat 0,5mx0,5m endlos
#include <MobaTools.h>
const int i=0;
const int FULLROT1 = 2048;
const int FULLROT2 = 2048;
MoToStepper Step1(FULLROT1); // Motor 1
MoToStepper Step2(FULLROT2); // Motor 2
const byte stPn1[] = { 4, 5, 6, 7 }; // Pins für Motor 1
const byte stPn2[] = { 8, 9, 10, 11 }; // Pins für Motor 2
void setup() {
Step1.attach(stPn1[0], stPn1[1], stPn1[2], stPn1[3]); // Motor 1 an digitalen Ausgängen anschließen
Step2.attach(stPn2[0], stPn2[1], stPn2[2], stPn2[3]); // Motor 2 an digitalen Ausgängen anschließen
Step1.setSpeed(300); // Geschwindigkeit von Motor 1 = 30 U/Min
Step1.setZero(); // Referenzpunkt für Motor 1 setzen
Step2.setSpeed(300); // Geschwindigkeit von Motor 2 = 30 U/Min
Step2.setZero();//Referenzpunkt Motor2
}
void loop() {
// Motor 1 und 2 bewegt sich vorwärts
Step1.doSteps(14500);//ca. 0,5m
Step2.doSteps(-14500);
while (Step1.moving()); // Warten, bis Motor 1 die Bewegung abgeschlossen hat
Step1.doSteps(2200); // Motor 1 Kurve links empirisch ermittelt
Step2.doSteps(2200);// Motor 2 läuft gegenläufig dadurch kurzer Kurvenradius
while (Step1.moving()); //warten bis 1 die Bewegung abgeschlossen hat
Step1.stop();//Motor1 anhalten
while (Step2.moving()); // Warten, bis Motor 2 die Bewegung abgeschlossen hat
Step2.stop(); // Motor 2 anhalten
}