Aller au contenu


Photo
- - - - -

Faire avancer 2 moteurs avec AccelStepper


  • Veuillez vous connecter pour répondre
1 réponse à ce sujet

#1 Kaquaoify

Kaquaoify

    Membre occasionnel

  • Membres
  • Pip
  • 99 messages
  • Gender:Male
  • Location:Derrière mon pare-feu

Posté 17 mars 2015 - 08:31

Bonjour, toujours dans le cadre de mon robot, j'ai mes moteurs à faire avancer.

 

Pour cela j'utilise la carte adafruit motor shield v2.3 et la librairie AccelStepper.

 

J'ai fait ce programme dans l'espoir de faire avancer le robot, puis reculer, mais non... Les roues tournent en continu dans le sens horaire... Savez-vous ce que j'ai fait de faux ?

 

Merci beaucoup d'avance !

//Insertion des librairies
#include <AccelStepper.h>
#include <Wire.h>
#include <Adafruit_MotorShield.h>
#include "utility/Adafruit_PWMServoDriver.h"

//Adafruit Motor Shield v2.3 connecté sur l'Arduino Mega 2560 en port I2C #1
Adafruit_MotorShield AFMS(0x60); 


//2 moteurs pas à pas connectés avec une révolution de 200 pas
Adafruit_StepperMotor *mPAP1 = AFMS.getStepper(200, 1);
Adafruit_StepperMotor *mPAP2 = AFMS.getStepper(200, 2);

//Wrappers
void avant1()
{
  mPAP1->onestep(FORWARD, SINGLE);
}
void arriere1()
{
  mPAP1->onestep(BACKWARD, SINGLE);
}
void avant2()
{
  mPAP2->onestep(FORWARD, SINGLE);
}
void arriere2()
{
  mPAP2->onestep(BACKWARD, SINGLE);
}
//Insertion en objet AccelStepper. Les moteurs étants en miroir, j'inverse les wrappers
AccelStepper stepper1(avant1, arriere1);
AccelStepper stepper2(arriere2, avant2);


void setup() 
{
  AFMS.begin(1000); //Démarrage du moteur avec une fréquence de 1000Hz
  
  //Initialisation moteur 1
  stepper1.setMaxSpeed(1000);
  stepper1.setAcceleration(100);

  //Initialisation moteur 2
  stepper2.setMaxSpeed(1000);
  stepper2.setAcceleration(100);

}


void loop() 
{
avant(); //Avance de 100 pas et quand la fonction est finie, recule de 100 pas. 
arriere();
/*Diviser les différentes parties (avancer reculer, gauche droite, etc...) me permet d'être
plus soft sur le programme et choisir quel endroit je veux aller par succession de fonction*/

}

void avant() //Fonction d'avance de 100 pas
{
  stepper1.moveTo(100);
  stepper2.moveTo(100);
  stepper1.run();
  stepper2.run();
}

void arriere() //Fonction de recul de 100 pas
{
  stepper1.moveTo(-100);
  stepper2.moveTo(-100);
  stepper1.run();
  stepper2.run();
  stepper1.setCurrentPosition(0.0);
  stepper2.setCurrentPosition(0.0);
}

La théorie, c'est quand ça marche pas, mais on sait pourquoi.

La pratique, c'est quand ça marche, mais on sait pourquoi.

Quand la pratique rejoint la théorie, ça marche pas et on sait pas pourquoi


#2 darkzz

darkzz

    Membre occasionnel

  • Membres
  • Pip
  • 83 messages

Posté 14 avril 2015 - 11:57

Salut,

 

As-tu essayé d'autres exemples ? http://www.schmalzhaus.com/EasyDriver/Examples/EasyDriverExamples.html

 

Le code paraît pourtant correct !

 

Darkzz






0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users