Moteur pas à pas

arduino

Durant mes temps libres, j’ai expérimenté avec un Arduino et un moteur pas à pas. J’ai été surpris de la facilité d’utilisation de ce microcontrôleur. Il faut cependant être minutieux et éviter les mauvais mouvement, qui peuvent tout briser en un instant…

Premièrement, une petite description du Arduino, de Wikipedia: « Arduino est un circuit imprimé en matériel libre (les plans de la carte elle-même sont publiés en licence libre dont certains composants de la carte, comme le microcontrôleur par exemple, ne sont pas en licence libre) sur lequel se trouve un microcontrôleur qui peut être programmé pour analyser et produire des signaux électriques, de manière à effectuer des tâches très diverses comme la domotique (le contrôle des appareils domestiques – éclairage, chauffage…), le pilotage d’un robot, etc. C’est une plateforme basée sur une interface entrée/sortie simple. Il était destiné à l’origine principalement mais pas exclusivement à la programmation multimédia interactive en vue de spectacle ou d’animations artistiques.« 

Le plus important à retenir: c’est simple d’utilisation ! Il suffit de brancher ce que vous voulez contrôler et la programmation est intuitive. Pour essayer ceci dans le confort de votre salon, vous devez vous procurer :

  • Arduino, peu importe le modèle, donc vous pouvez utiliser celui de base surnommé le Arduino Uno. ( ~25$ du site officiel)
  • Moteur pas à pas (15$ sur Adafruit)
  • Un contrôleur de moteur (15$ sur Sparkfun)

Vous pouvez aussi construire votre propre contrôleur composé de transistors MOSFET sous une structure de Pont en H (H-Bridge). Mais ceci nécessiterait beaucoup plus d’explications qui seront peut-être présentés dans un futur post.

Prochaine étape, tout connecter!

Premièrement, les moteurs pas à pas sont contrôlés à l’aide de 2 cables par bobine (pour un total de 4 cables). Il faut identifier les cables de la même bobine. Vous pouvez regarder la documentation de votre moteur ou simplement mesurer la résistance de 2 fils aléatoires. Si les fils n’appartiennent pas à la même bobine, la résistance sera infinie. Sinon, par exemple avec le moteur de Adafruit, j’obtiens une résistance de ~35Ω.

Maintenant que les cables sont identifiés, il est temps de connecter le moteur au contrôleur. Il est important de ne jamais déconnecter les fils du moteur lorsque le contrôleur est alimenté (surtout avec un voltage élevé). Ceci peut briser la puce centrale, croyez-moi j’ai malheureusement vécu l’expérience!

Ensuite, il faut connecter les deux cables de contrôle et le cable de mise à la terre du Arduino au contrôleur du moteur pas à pas. Les deux cables permettront de modifier la direction et de faire tourner le moteur d’un pas (un step). Regardez l’image en haut de la page pour plus d’information!

Finalement, voici le code Arduino trouvé sur le site de Sparkfun. Le moteur effectue 200 pas et ensuite change de direction. Il est possible d’ajuster le délai entre le changement de High/Low de la pin de rotation du moteur afin de modifier la vitesse. Assurez-vous de modifier les valeurs de stpPin et dirPin en fonction de vos branchements.

// pin de sortie
#define stpPin 2
#define dirPin 3
int Distance = 0;

Valeur initiale des pins de contrôle.

void setup() {
  pinMode(stpPin, OUTPUT);
  digitalWrite(stpPin, LOW);
  pinMode(dirPin, OUTPUT);
  digitalWrite(dirPin, LOW);
}

Finalement, la loop() qui s’exécute jusqu’à la fin des temps.

void loop() {
  // un step
  digitalWrite(stpPin, HIGH);
  delayMicroseconds(1000);
  digitalWrite(stpPin, LOW);
  delayMicroseconds(1000);
  
  // ajoute ce step à la distance
  Distance = Distance + 1;
  
  // fin du déplacement
  if (Distance == 200)
  {
    // change la direction
    if (digitalRead(dirPin) == LOW) {
      digitalWrite(dirPin, HIGH);
    } else {
      digitalWrite(dirPin, LOW);
    }
    // Réinitialise la distance  
    Distance = 0;
    // Pause de 0.5s
    delay(500);
  }
}

Je vous conseille aussi de regarder la librairie Arduino appelée AccelStepper qui simplifie le code pour ajuster plus précisément la vitesse du moteur, l’accélération ou effectuer des mouvements complexes.

En terminant, voici une photo de mon montage constitué d’un contrôleur haute puissance, Kollmorgen P7000 drivercontrôlé avec un programme Arduino similaire. Cette drive nécessite cependant 2 cables (positif et négatif) pour la rotation (blanc-vert) et la direction (orange-blanc) du moteur. Par précaution, j’ai aussi ajouté un cable de mise à la terre des sorties digitales (jaune). Sur le côté droit du Arduino, la pin analogue A0 est utilisée en sortie digitale afin de déclencher et synchroniser des caméras haute-vitesse.

IMG_20150522_165532

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.