samedi 23 février 2013

Contrôler la vitesse d'un moteur pas à pas au moyen d'un potentiomètre (Arduino)

L'objectif:  utiliser un Arduino pour contrôler la vitesse de rotation d'un moteur pas à pas au moyen d'un potentiomètre (ou d'un joystick):  lorsque le potentiomètre se trouve à sa position centrale, le moteur ne tourne pas.  Il tourne de plus en plus rapidement dans le sens horaire à mesure qu'on tourne le potentiomètre dans une direction, et tourne de plus en plus rapidement dans le sens antihoiraire à mesure qu'on tourne le potentiomètre dans l'autre direction.

La Stepper Library est accompagnée d'un exemple intitulé "stepper_speedControl" qui accomplit à peu près cette tâche, sauf que le moteur tourne toujours dans la même direction (la vitesse est nulle à une position extrême du potentiomètre, et maximale à l'autre position extrême).  Au départ, j'ai supposé que ma tâche consistait à apporter quelques modifications mineures à ce sketch pour obtenir le comportement souhaité.
Malheureusement, cette première approche n'a pas très bien fonctionné.  L'exemple "stepper_speedControl" règle la vitesse au moyen de la routine "setSpeed" de la Stepper Library.   Malheureusement, tel qu'indiqué dans l'entête de l'exemple, l'Arduino est lent à répondre aux commandes du potentiomètre lorsque setSpeed est réglé à une faible valeur.  Le pire, c'est lorsque qu'on règle setSpeed à zéro:  l'Arduino se met alors à attendre pendant un délai qui semble sans fin.  Inutile de modifier la position du potentiomètre:  l'Arduino ne la vérifiera même pas.

À la place, j'ai donc choisi de régler la vitesse de rotation sans utiliser setSpeed:  le moteur tourne d'un step à la fois, et la position du potentiomètre contrôle la durée du délai qui s'écoule entre deux rotations successives.  Le moteur se comporte exactement de la façon souhaitée.

Voici mon sketch:


Pour les branchements, du moteur au Arduino, vous suivez les instructions fournies ici pour un L293D ou ici pour un ULN2003.  Il ne reste plus qu'à ajouter un potentiomètre à l'entrée A0.

Yves Pelletier (Twitter: @ElectroAmateur)

1 commentaire:

  1. Bonsoir et merci pour votre Tito.
    Peut on adaptée le code pour un arduino avec une carte shield adafruit.
    Cordialement. Merci

    RépondreSupprimer