dans le but de créer une maquette de convoyeur de bagage, j'ai besoin de faire tourner deux moteurs pas à pas en même temps sur une seule carte uno R3
malheureusement le programme que j'ai modifié me permet de faire tourner les moteurs que chacun leur tour.
les drivers sont des ULN2003
pouvez vous m'aider svp ?
//**************************************************************
//Commande de moteur pas-à-pas unipolaire 4 fils
//tiptopboards.com 05/12/2013
// Driver ULN2003 et moteur réducté au 1:64
//
//**************************************************************
//Inclure la librairie stepper.h
#include <Stepper.h>
#define STEPS 100
//Créer une instance de la classe stepper
//Le moteur (fils 1 2 3 4) est branché sur les sorties 8 9 10 11 de l'Arduino (et sur GND, +V)
Stepper small_stepper(STEPS, 8, 10, 9, 11); // Sens horaire
Stepper small_stepper1(STEPS, 4, 6, 5, 7); // Sens horaire
//Stepper small_stepper(STEPS, 11, 10, 9, 8); // Sens anti-horaire en inversant 8 et 11 (si on préfère)
int Steps2Take = 0; //Nombre de pas de rotation demandé au moteur
long temps =0; //Durée de rotation pour un tour
//************************************************************
// Pour un moteur de ce type : http://tiptopboards.com/151-moteur-pas-%C3%A0-pas-r%C3%A9duct%C3%A9-de-5v-4-fils-driver-.html
// 64 pas par tour, 4 phases, angle de 5.625° selon les spécifications du moteur
// Démultiplication 1:64 pour ce moteur réducté mécaniquement
// 360° / 5.625° * 64 = 4096 angles avec la démultiplication
// 360° / 5.625° * 64 * 4 bobines / 2 bipolaire = 2048 step / tour
void setup()
{
Serial.begin(9600); // 9600 bps
Serial.println("Test de moteur pas a pas");
}
void loop()
{
Serial.println("Moteur en marche ");
//Faire tourner le moteur
small_stepper.setSpeed(290); //Vitesse de 300 (max) réduire ce chiffre pour un mouvement plus lent
small_stepper1.setSpeed(290); //Vitesse de 300 (max) réduire ce chiffre pour un mouvement plus lent
//100 permet d'éavoir un couple élevé >300 le moteur vibre sans tourner
Steps2Take = 2048; // Une rotation complète avec 2048 pas (1 tour environ 4.5sec)
//Pour tourner à l'envers de 6 fois 1/30eme de tour, simplement multiplier Steps2Take par 6/30 et mettre un moins pour inverser le sens
// Exemple Steps2Take = -6*2048/30;
temps = millis();
small_stepper.step(Steps2Take); //Ca tourne
small_stepper1.step(Steps2Take); //Ca tourne
temps = millis()- temps ; //Chronomètre un rour complet 6.236 sec par tour à vitesse 200
Serial.println(temps); //Affiche le temps (en ms) pour un tour complet
}
je viens de récupérer ce code par contre je n'ai pas besoin des accélérations, je souhaite juste que les moteurs tournent indéfiniment
j'ai retiré cette partie
//Change direction at the limits
if (stepper1.distanceToGo() == 0)
stepper1.moveTo(-stepper1.currentPosition());
if (stepper2.distanceToGo() == 0)
stepper2.moveTo(-stepper2.currentPosition());
mais les moteurs tournent une seule fois puis s'arrêtent...
pourtant je suis dans une boucle c'est censé recommencer ?
/* YourDuinoStarter Example: 2 Stepper Motors
- WHAT IT DOES: Runs 2 28BYJ-48 stepper motors with AccelStepper Library
- Motors accelerate and decelerate simultaneously in opposite rotations
- SEE the comments after "//" on each line below
- Derived from example code by Mike McCauley
- modified by Celem for single stepper
- modified by lowres for two steppers
NOTE: This may not run 2 motors from USB.
May need separate +5 Supply for motors
- CONNECTIONS: See Pin definitions below
- V1.01 11/30/2013
Questions: terry@yourduino.com */
/*-----( Import needed libraries )-----*/
#include <AccelStepper.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define FULLSTEP 4
#define HALFSTEP 8
// motor pins
#define motorPin1 4 // Blue - 28BYJ48 pin 1
#define motorPin2 5 // Pink - 28BYJ48 pin 2
#define motorPin3 6 // Yellow - 28BYJ48 pin 3
#define motorPin4 7 // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)
#define motorPin5 8 // Blue - 28BYJ48 pin 1
#define motorPin6 9 // Pink - 28BYJ48 pin 2
#define motorPin7 10 // Yellow - 28BYJ48 pin 3
#define motorPin8 11 // Orange - 28BYJ48 pin 4
// Red - 28BYJ48 pin 5 (VCC)
/*-----( Declare objects )-----*/
// NOTE: The sequence 1-3-2-4 is required for proper sequencing of 28BYJ48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
AccelStepper stepper2(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);
/*-----( Declare Variables )-----*/
//none
void setup() /****** SETUP: RUNS ONCE ******/
{
stepper1.setMaxSpeed(1000.0);
stepper1.setAcceleration(50.0);
stepper1.setSpeed(300);
stepper1.moveTo(2048); // 1 revolution
stepper2.setMaxSpeed(1000.0);
stepper2.setAcceleration(50.0);
stepper2.setSpeed(300);
stepper2.moveTo(2048); // 1 revolution
}//--(end setup )---
void loop() /****** LOOP: RUNS CONSTANTLY ******/
{
//Change direction at the limits
if (stepper1.distanceToGo() == 0)
stepper1.moveTo(-stepper1.currentPosition());
if (stepper2.distanceToGo() == 0)
stepper2.moveTo(-stepper2.currentPosition());
stepper1.run();
stepper2.run();
}//--(end main loop )---
/*-----( Declare User-written Functions )-----*/
//none
//*********( THE END )***********
Bin c'est toi qui voit ... Faudrait peut-être essayer de comprendre ce que tu fais parce que la à part te pondre le code je vois pas ce que je peux faire de plus :
currentPosition() = renvoi la position actuelle
moveTo() = défini la position cible
distanceToGo() = renvoi le nombre de pas restant avant d'atteindre la cible définie dans moveTo()
run() = suivant les paramètres défini auparavant (typiquement accélération et vitesse) fait faire un pas au moteur
Tu conduis un train, qui doit aller à une gare qui est à 100 km. Donc je dois aller à : ma position actuelle + 100 km. Ensuite je fais marcher le ma loco jusqu'à ce que je sois arriver, soit jusqu'à ce que ma distance à parcourir soit égale à zéro (= destination - position actuelle).