Go Down

Topic: Débutant qui galère avec 2steps, 2servos, et 4 potentiomètre  (Read 733 times) previous topic - next topic

proautobot

Me re-voila ( l'acharné qui ferais mieux de réviser ses maths ).

J'ai réussi plus ou moins à piloter mes moteurs pas à pas avec des boutons poussoir, elle est vraiment bien cette bibliothèque. Je peux les piloter en même temps, cela manque de précision tout de même. En plus les boutton colle aux doigts et se "déclips" de la breadboards.

Voici mon code:
 
Code: [Select]
//Attention aux fil, ils risque d'être arraché car il n'y a pas de fin de course et donc aucune position initial ou autre.

#include <AccelStepper.h> // bibliothèque pour contrôler en même temps plusieurs moteurs pas à pas.
//#include <MultiStepper.h> //vérifier si utile//

AccelStepper mystepper1(8, 10, 12, 11, 13);// A unipolar stepper motor , controlled by 4 transistors.
AccelStepper mystepper2(8, 6, 8, 7, 9);

int bp1, bp2, bp3, bp4; //Variable des boutons poussoirs (bp).
boolean etatBp1, etatBp2, etatBp3, etatBp4; //Variable des états des boutons poussoirs.

void setup() {

  Serial.begin(9600); // établissement d'une communication à 9600 bauds.
  Serial.println("communication établie"); // <- afficher ce message.

  bp1 = 2; // attribution des pins.
  bp2 = 3;
  bp3 = 4;
  bp4 = 5;

  pinMode(bp1, INPUT_PULLUP); //lecture des pins en mode input_pullup avec résistance de 10K ohm intégrées à arduino
  pinMode(bp2, INPUT_PULLUP); // pour les bouttons poussoirs.
  pinMode(bp3, INPUT_PULLUP);
  pinMode(bp4, INPUT_PULLUP);

  mystepper1.setMaxSpeed(1000); //Sets the maximum speed. stepsPerSecond
  mystepper1.setAcceleration(300); // accelération en seconde²
  mystepper1.setSpeed(200); // paramètre de vitesse
  // mystepper1.moveTo(2048); //se déplacer vers 2048 = nombre de pas pour un tour.

  mystepper2.setMaxSpeed(1000); //Sets the maximum speed. stepsPerSecond
  mystepper2.setAcceleration(300); // accelération en seconde²
  mystepper2.setSpeed(200); // paramètre de vitesse
  // mystepper2.moveTo(2048); //se déplacer vers 2048 = nombre de pas pour un tour.


}

void loop() {
 
  etatBp1 = digitalRead(bp1); // étatBp = 0 ou 1, (valeur booléenne).
  etatBp2 = digitalRead(bp2);
  etatBp3 = digitalRead(bp3);
  etatBp4 = digitalRead(bp4);
 
 
                               //déplacement :
  if (etatBp1 == 0)            //bas
  {mystepper1.move(100);}
  mystepper1.run();            // activer les instruction de déplacement
                               
   if (etatBp2 == 0)           //Haut
  {mystepper1.move(-100);}
  mystepper1.run();           // activer les instruction de déplacement
 
   if (etatBp3 == 0)          //gauche
  {mystepper2.move(100);}
  mystepper2.run();          // activer les instruction de déplacement
 
  if (etatBp4 == 0)          //droite
  {mystepper2.move(-100);}   
  mystepper2.run();         // activer les instruction de déplacement
 
}


Cela vous plais ?

Maintenant le but ça va être d'enregistrer une série de mouvements et de les refaire en boucle.

En tout cas merci pour les info mécanique, cependant, avec stepper.h je pouvais faire le lien, mais avec accelstepper c'est plus compliqué.

Premier critère, je suis en demi pas (les fameux 8 ), mais je fait un tour avec 2048 pas quand même. accelstepper compte en pas et non en demi pas malgré le faite que le moteur soit paramétré en demi pas ?

Cette foit la vitesse max n'est pas de 300, avec stepper.h je décrochai au delà. Avec accelstepper.h je suis ici à 1000 et je peux monter encore. Ceci est possible grace à l'accélération progressive ? ou alors ce n'est plus la même unité de vitesse entre les deux bibliothèques ?

Mes moteurs sont bien plus chaud ( pas brûlant ), avec stepper.h je n'arrivais pas à soulever mon bras malgré le faite que j'arrivais à faire tourner le moteur à vide ( juste avant que tout parte en 3#@lle) maintenant je le lève sans problème.

la décélération altère sur la maniabilité, en effet lorsque je lâche le bouton , elle continue à déplacer considérablement le bras. C'est possible de l'arrêter net, sans risque électronique ?

pour finir bonne soirée à vous =).


 

ChPr

... la décélération altère sur la maniabilité, en effet lorsque je lâche le bouton , elle continue à déplacer considérablement le bras. C'est possible de l'arrêter net, sans risque électronique ? ...
Relisez la doc, toutes les unités y sont décrites.

Pour stopper net un mouvement, a priori, il faut redéfinir l'accélération à une valeur très grande et faire un stop();

Cordialement.

Pierre
Pourquoi faire simple alors qu'il est si facile de faire compliqué !

proautobot

Moi et l'anglais ...D'accord je vais relire. Je n'avais pas compris que l'on pouvait modifier l'accélération, le temps d'une action, merci je m'y colle.

Juste pour cerner mon niveau, je programme que depuis septembre dernier donc j'ai du boulot pour me perfectionner, j'ai un fablab non loin de chez moi, je devrais aller y faire un tour. ;)

Go Up