Go Down

Topic: Projet : Dolly autonome avec 2 steppers (Read 1 time) previous topic - next topic

Kanter

#15
Apr 25, 2019, 07:11 pm Last Edit: Apr 25, 2019, 07:37 pm by Kanter
Bonjour

Aprés 3 semaines d'apprentissage et de tatonnement, me voila au stade suivant:

Definition de 3 états : demarrage, aller (reculer), retour (avancer)
Ajout de 2 limit switches à chaque extrémité du parcours du dolly
Utilisation prévue d'un capteur d'obstacle pour gérer l'arret du dolly et la rotation de la camera.
C'est plus simple à implementer que le capteur de couleur prévu au départ

Le tout dans une machine à état assez rudimentaire :
le dolly change de sens quand le bouton est enfoncé (et non relâché, nuance que j'ai compris :) )
Pour le moment je m'occupe seulement du comportement du stepper stepper_ar

Pouvez-vous m'indiquer ce qui coince dans ce code ?

Avec un immense merci !!!

Code: [Select]

#include <AccelStepper.h>
#include "simpleBouton.h" // http://forum.arduino.cc/index.php?topic=375232.0

// Define Constants
// Define step constants
#define FULLSTEP 4
#define HALFSTEP 8

#define motorPin1  8     // Blue   - 28BYJ48 pin 1
#define motorPin2  9     // Pink   - 28BYJ48 pin 2
#define motorPin3  10    // Yellow - 28BYJ48 pin 3
#define motorPin4  11    // Orange - 28BYJ48 pin 4

#define motorPin5  4     // Blue   - 28BYJ48 pin 1
#define motorPin6  5     // Pink   - 28BYJ48 pin 2
#define motorPin7  6     // Yellow - 28BYJ48 pin 3
#define motorPin8  7     // Orange - 28BYJ48 pin 4

// Define two motor objects
// The sequence 1-3-2-4 is required for proper sequencing of 28BYJ48
AccelStepper stepper_ar(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);// moteur en charge de l'avance et recul du dolly
AccelStepper stepper_camera(HALFSTEP, motorPin5, motorPin7, motorPin6, motorPin8);//moteur pivotant la caméra, à coder plus tard
 
simpleBouton bouton_aller(2);
simpleBouton bouton_retour(3);

enum State_enum {DEMARRAGE, ALLER, RETOUR};//etat du dolly stepper_ar
enum Sensors_enum {NONE, BUMPER_ALLER, BUMPER_RETOUR};//etats des 2 bumper limit swicht
 
void state_machine_run(uint8_t sensors);
void demarrage();
void aller();
void retour();
uint8_t read_IR();
uint8_t state = DEMARRAGE;

void setup() {

//Serial.begin(9600);

//Serial.begin(9600);

stepper_ar.setMaxSpeed(700.0);
stepper_ar.setAcceleration(400.0);
stepper_camera.setMaxSpeed(700.0);
stepper_camera.setAcceleration(400.0); 

}
 
void loop(){
state_machine_run(read_IR());

bouton_aller.actualiser();//limit switch 1
bouton_retour.actualiser();//limit switch 2

stepper_ar.run();
stepper_camera.run();
}
 
void state_machine_run(uint8_t sensors)
{
  switch(state)
  {   
    case ALLER:
      if(sensors == BUMPER_RETOUR){
       aller();
        state = RETOUR;
      }
      break;
 
    case RETOUR:
      if(sensors == BUMPER_ALLER){
        retour();
        state = ALLER;
      }
      break;
  }
}
 
void demarrage()//demarrage du dolly
{
stepper_ar.moveTo(1000);//4096 = 2 tours
stepper_ar.setSpeed(400);
}

void aller()//trajet aller apres avoir activé le bouton_aller
{
stepper_ar.moveTo(1000);//4096 = 2 tours
stepper_ar.setSpeed(400);
}
 
void retour()//trajet retour apres avoir activé le bouton_retour
{
stepper_ar.moveTo(-1000);//4096 = 2 tours
stepper_ar.setSpeed(-400);
}

uint8_t read_IR()
{
if (bouton_retour.vientDEtreRelache())aller();
if (bouton_aller.vientDEtreRelache())retour();
}

Go Up