est il possible d'avoir une plage de vitesse plus importante avec ce materiel ?

Bonjour,

Je débute, j’ai déjà mis un post il y a quelque jours, j’ai bien avancé dans la compréhension du moteur pas a pas et de la biblio stepper.h (notamment grâce a JPPbricole et quelques autres)

je possède une moteur pas a pas du kit de base le 28byj-48 accompagné de sa carte de contrôle ULN 2003 une carte elegoo uno et 2 interrupteur.

48*64 = 3072 pas par tour.

2 interrupteur on/off :
1 sur le pin 2 sers à avoir la vitesse de fonctionnement normal
1 sur le pin 8 sers à faire le retour arrière rapide

le moteur est branché sur les pins 3 5 6 9

le code et le branchement fonctionne parfaitement !

j’aimerais savoir si avec ce matériel là je peux espérer étendre la plage de vitesse ?
j’aimerais par exemple aller encore un peu plus lentement avec le fonctionnement normal (du genre 0.7 serait je crois idéal pour mes besoins au lieu du 1 actuel)

et avec le retour arrière si je pouvais aller plus vite au maximum du moteur si il y a plus bien sur.
pour le moment je suis limité à la valeur la plus faible a 1 et la valeur la plus haute a 10.

existe t’il une autre manière d’écrire ce code pour permettre l’évolution de ces vitesses ?
ou il faut que j’utilise une autre bibliothèque ou encore un autre matériel ?
(un nema 17 est en train d’arriver)

voici le code

#include <Stepper.h>
const int BoutonPlus = 2;     // bouton AV lent
const int BoutonMoinsMoins = 8; // bouton AR rapide

int EtatBoutonPlus = 0;
int EtatBoutonMoinsMoins = 0;

const int nbrDePasParTour = 48*64 ;


Stepper Moteur(nbrDePasParTour, 3, 5, 6, 9);

void setup() {
  //Initialisation du bouton en entrée
  pinMode(BoutonPlus, INPUT_PULLUP);
  pinMode(BoutonMoinsMoins, INPUT_PULLUP);

}

void loop()
{
  EtatBoutonPlus = digitalRead(BoutonPlus);
  EtatBoutonMoinsMoins = digitalRead(BoutonMoinsMoins);

  
  if (EtatBoutonPlus == LOW &&  EtatBoutonMoinsMoins == HIGH)
  {
    Moteur.setSpeed(1);                                 //Entre 1 et 10 (vitesse)
    for (int i = 0; i < 10; i++)                      //Avance de 10 pas
    {
      Moteur.step(1);
    }
  }



  else if (EtatBoutonPlus == HIGH &&  EtatBoutonMoinsMoins == LOW)
  {
    Moteur.setSpeed(10);                   //Entre 1 et 10 (vitesse)
    for (int i = 0; i < 10; i++)                      //Avance de 10 pas
    {
      Moteur.step(-1);
    }
  }
}

les branchements fonctionnent donc je pense pas besoin de photos mais si vous en avez besoin j’en met !

merci beaucoup !

hello

je suis surpris quand tu déclares ce nombre de pas moteur pour 1 tour: 48*64

as tu testé cet exemple de ta lirairie " stepper":

#include <Stepper.h>

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
// for your motor


// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

int stepCount = 0;  // number of steps the motor has taken

void setup() {
  // nothing to do inside the setup
}

void loop() {
  // read the sensor value:
  int sensorReading = analogRead(A0);
  // map it to a range from 0 to 100:
  int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
  // set the motor speed:
  if (motorSpeed > 0) {
    myStepper.setSpeed(motorSpeed);
    // step 1/100 of a revolution:
    myStepper.step(stepsPerRevolution / 100);
  }
}

tu peux aussi y lire :

Le moteur est relié aux broches numériques 8 à 11 de l’Arduino.
Un potentiomètre est connecté à l’entrée analogique 0.

Le moteur tournera dans le sens des aiguilles d’une montre. Plus la valeur du potentiomètre est élevée,
plus la vitesse du moteur est rapide. Parce que setSpeed () définit le délai entre les étapes,
vous remarquerez peut-être que le moteur réagit moins aux changements de la valeur du capteur à
faibles vitesses.

Bonjour Aquilae

Aquilae:
j'aimerais savoir si avec ce matériel là je peux espérer étendre la plage de vitesse ?

L'ensemble Stepper.h, 28byj-48 et carte de contrôle ULN 2003, c'est très bon pour avoir ses premiers "émois" avec un moteur pas à pas (MPAP)
Ce MPAP a un réducteur, ce qui peut géner au niveau vitesses "élévées", la carte de contrôle à base de ULN 2003 n'est pas vraiment un contrôleur mais c'est l'équivalent de simple transistors.

Dans un premier temps je te suggère de changer de bibliothèque pour AccelStepper à télécharger ici ou , une bonne documentation ici.

Pour ta carte ULN2003 tu utilisera le setup:
AccelStepper mystepper(4, pinA1, pinA2, pinB1, pinB2);

Dans un 2ème temps, un "vrai" contrôleur l'incontournable Pololu A4988, que l'on trouve à profusion.
Setup pour AccelStepper
AccelStepper mystepper(1, pinStep, pinDirection);

Après, le Nema17 comme MPAP.

Bonne bricole
Cordailement
jpbbricole

Aquilae:
j’aimerais savoir si avec ce matériel là je peux espérer étendre la plage de vitesse ?
j’aimerais par exemple aller encore un peu plus lentement avec le fonctionnement normal (du genre 0.7 serait je crois idéal pour mes besoins au lieu du 1 actuel)

Bonjour,

Un moyen simple (mais pas le plus optimisé) est d’ajouter un delay() dans ta boucle.

   for (int i = 0; i < 10; i++)                      //Avance de 10 pas
   {
     Moteur.step(1);
     delay(5);       // à ajuster
   }

Tu ajustes le delay() en fonction de la vitesse voulue.

Bonjour kamill

kamill:
Un moyen simple (mais pas le plus optimisé) est d'ajouter un delay() dans ta boucle.

Mon dieu "quelle horeur!" tu as raison "mais pas le plus optimisé", ça va générer un rotation en saccades, Mais il y a pire, freiner avec un doigt! :slight_smile:

Cordialement
jpbbricole

Non, si on met un delai de quelques milisecondes, on ne verra pas de saccades.

alors ! merci dfgh ! effectivement le 48*64 peut paraitre bizarre mais c'est ce que j'avais trouvé dans un code sur le net, et il me semblait visuellement que je gagnais en vitesse de retour rapide avec cet "artifice" après vérification je ne gagne pas en vitesse de retour rapide et je galère a régler la vitesse basse de fonctionnement "normal" et en remettant les caractéristique basique du moteur CAD 64 pas par tour je peux effectuer la vitesse de retour rapide à la même vitesse qu'avant (1 tour en 4sec) et je peu affiner la vitesse "lente" de fonctionnement à 1 tour par minute, je peux même baisser donc géniale !

merci d'avoir pointer cela ! (c'est tout moi d'aller chercher complexe alors que la simplicité est plus fonctionnelle ... :smiley: )

je teste ton code dfgh j'en apprendrais surement un peu plus ! (que je n'avais pas remarqué dans la biblio de base)

merci kamill mais je préfère éviter les delay qui sont bloquant je trouve si on a besoin de reprendre la main pendant un delay ... mais ça aurait pu être une solution il est vrai si je n'avait pas besoin que les réponses moteur soit disponible a tout moment ! :wink:

Merci Jpbbricole ! sous tes conseils dans un autre post j'ai déjà télécharger accelstepper et effectivement ça ouvre de nouveau horizon mais étant débutant je préfère continuer un peu a explorer les possibilités
de stepper.h histoire d'apprendre et si je peu maitriser cette biblio ce sera déjà ça de fait !

ensuite je me mettrais a accelstepper qui je pense répondra beaucoup plus à mes exigences !
le nema 17 (et un autre encore mieux) sont commandé et en chemin ! le pololu est commandé aussi !

je note les setup ! merci !

j'ai bien galéré pendant une semaine et là maintenant j'ai l'impression que ça devient plus claire et compréhensible, je crois que je commence a apprendre une nouvelle langue ! :stuck_out_tongue: ça me donne cette même impression en tout cas !

merci à tous de m'aider !

Aquilae

merci ! :wink:

Aquilae:
alors ! merci dfgh ! effectivement le 48*64 peut paraitre bizarre mais c'est ce que j'avais trouvé dans un code sur le net, et il me semblait visuellement que je gagnais en vitesse de retour rapide avec cet "artifice" après vérification je ne gagne pas en vitesse de retour rapide et je galère a régler la vitesse basse de fonctionnement "normal" et en remettant les caractéristique basique du moteur CAD 64 pas par tour je peux effectuer la vitesse de retour rapide à la même vitesse qu'avant (1 tour en 4sec) et je peu affiner la vitesse "lente" de fonctionnement à 1 tour par minute, je peux même baisser donc géniale !

Attention, "tricher" sur le nombre de pas par tour (pour son moteur 2048) pour "régler" la vitesse, c'est valable tant que l'on utilise un MPAP qu'en tant que simple moteur, mais dès que l'on utilise des fonctions plus ou moins évoluées comme tourne x tours, va à cette position, tourne de x degrés, c'est foutu!

C'est bien, tu avances pas à pas :slight_smile:

Bonne bricole
Cordialement
jpbbricole