Go Down

Topic: Utilisation d'un moteur pas à pas et de deux capteurs de fin de course (Read 589 times) previous topic - next topic

15511

Bonjour la communauté,

c'est mon premier message, j'utilise très rarement (jamais meme) arduino, mais j'en ai besoin pour faire un petit banc de test et j'ai directement pensé à Arduino !

Je cherche à faire quelque chose de très simple, j'ai en ma disposition un moteur Nema 17 avec motoreducteur, deux capteurs de fin de course et un bouton (une carte arduino uno, et un driver easy driver)

Le fonctionnement :
j'appuie sur le bouton = le cycle de va et vient commence (le cycle doit durer X secondes)

le cycle = le moteur va dans un sens a une vitesse A et vient en contact avec le capteur de fin de course B puis repart dans l'autre sens a une vitesse A puis vient en contact avec le capteur de fin de course C puis la boucle continue jusqu'a la fin du cycle de x secondes

J'ai trouvé sur internet un code pour faire fonctionner le moteur sans capteur de fin de course, j'ai également trouvé un code avec l'utilisation de deux boutons, pour le faire fonctionner dans un sens puis dans l'autre (celui-ci ressemble le plus à ma solution !) :

https://www.youtube.com/watch?v=_IVT0AQ3TQQ
https://yadi.sk/d/U1Dxl6lvmKwLH



Code: [Select]
/* Pins to Configure the Displacement of the Stepper Motor (on the Easy Driver):
//////////////////////////////////////////////
// MS1 MS2 //
// //
// LOW LOW = Full Step //
// HIGH LOW = Half Step //
// LOW HIGH = A quarter of Step //
// HIGH HIGH = An eighth of Step //
// //http://garagelab.com/profiles/blogs/tutorial-controlling-the-displacement-of-a-stepper-motor-with-the
//////////////////////////////////////////////
*/
//Internal pullup na pinovima gde su tasteri, jedan kraj tastera ide na GND a drugi na input


#define step_pin 3    // Define pin 3 as the steps pin
#define dir_pin 2    // Define pin 2 as the direction pin
#define MS1 5     // Define pin 5 as "MS1"
#define MS2 4       // Define pin 4 as "MS2"
#define button1 7
#define button2 8


int direction;    // Variable to determine the sense of the motor
int steps = 500;      // Number of steps that you want to execute (for full steps, 200 = 1 turn)

void setup() {
   pinMode(MS1, OUTPUT);     // Configures "MS1" as output
   pinMode(MS2, OUTPUT);     // Configures "MS2" as output
   pinMode(dir_pin, OUTPUT);    // Configures "dir_pin" as output
   pinMode(step_pin, OUTPUT);    // Configures "step_pin" as output
   
   pinMode(button1, INPUT_PULLUP);
   pinMode(button2, INPUT_PULLUP);
   digitalWrite(MS1, LOW);      // Configures the steps division (see above)
   digitalWrite(MS2, LOW);    // Configures the steps division (see above)
   digitalWrite(dir_pin, LOW);   // Sense (HIGH = anti-clockwise / LOW = clockwise) - It can be also changed
   
}

void loop() {

   if (digitalRead(button1) == LOW || digitalRead(button2) == LOW) { // ako ni jedan taster nije pritisnut
  digitalWrite(step_pin, LOW);
  digitalWrite(step_pin, LOW);
   }
 
 
 if (digitalRead(button1) == LOW && digitalRead(button2) == HIGH) { // ako je taster 1 idle, a taster 2 pritisnut
    digitalWrite(dir_pin, LOW); // move in the LOW direction
    digitalWrite(step_pin, LOW);
    delay(3);
    digitalWrite(step_pin, HIGH);
    delay(3);
   
  } else if (digitalRead(button1) == HIGH && digitalRead(button2) == LOW) { // ako je taster 2 idle, a taster 1 pritisnut
    digitalWrite(dir_pin, HIGH); // move in HIGH direction
    digitalWrite(step_pin, LOW);
    delay(3);
    digitalWrite(step_pin, HIGH);
    delay(3);
  }
 
 
}


Mais je ne sais pas quoi changer pour faire fonctionner le code avec mes deux capteurs de fin de course et le bouton de lancement du cycle.

Pouvez vous m'aider dans cette tache ?

Merci d'avance

trimarco232

Bonjour,

les contacts de fdc étant fugitifs (puisque le curseur repart dans l'autre sens), il faut garder le dernier en mémoire pour savoir dans quel sens aller

vérifier aussi qu'avant toute action consécutive à une fdc, que celle d'en face a bien été libérée
 

Go Up