Faire tourner un moteur (pas à pas)


Hello tout le monde !

Voici le premier tutoriel dédié à Arduino. Dans ce tutoriel nous allons faire tourner un moteur, mais pas n'importe lequel ! Un moteur pas-à-pas.

Si vous souhaitez reproduire ce tutoriel, vous aurez besoin du matériel suivant :

Dans ce kit vous aurez besoin des éléments suivants :

  • Carte-mère d'alimentation
  • Une carte Arduino
  • Un contrôleur de moteur pas-à-pas
  • Un moteur pas-à-pas

Assurez-vous également d'avoir le logiciel Arduino d'installé sur votre ordinateur. Vous pouvez le trouver ici : https://www.arduino.cc/en/Main/Software 

Arduino c'est quoi ?

Alors, commençons par l'essentiel, Arduino, qu'est-ce que c'est ? Eh bien il s'agit d'une carte électronique que l'on peut configurer, et programmer. Grâce à Arduino vous allez pouvoir créer des projets plus fous les uns que les autres ! 

Vous voulez des exemples ? Ok, alors avec Arduino, vous allez pouvoir :

  • Créer des ailes motorisées
  • Faire tourner une structure sur un bâton (un joyau par exemple)
  • Faire de la fumée
  • Programmer des "ondes" dans vos jeux de leds
  • Etc.

Vous n'y connaissez rien en code ? Soyez rassurés, la syntaxe est vraiment très accessible ! Si vous avez des questions, n'hésitez pas à nous contacter via la page Facebook :)

 

Présentation du matériel

La carte mère d'alimentation ou "Breadboard"

Cette carte vous permet de connecter des éléments les uns avec les autres. Attention, cet élément n'est pas à mettre dans votre cosplay. Si vous avez besoin de connecter des éléments sur votre oeuvre "finale", il faudra que vous utilisiez un fer à souder.

Néanmoins, pour le moment on en est juste à découvrir ce qu'est Arduino, et comment faire tourner un moteur pas-à-pas donc ça ira très bien :).

Comme vous pouvez le voir, il y a de chaque côté un "+" et un "-", il faudra bien sûr respecter cette polarité. Tous les petits points sont connectés ensembles de manière "horizontale". Assurez-vous d'être sur la bonne ligne si vous vous en avez besoin :).

La carte Arduino

Il s'agit du cerveau de notre (ou nos) projet(s). C'est pas cette carte que vont transiter toutes les informations nécessaires aux mouvements des choses que nous voulons manipuler, à travers le code que nous allons écrire et transférer.

Le contrôleur de moteur pas-à-pas

Le contrôleur de moteur va permettre d'utiliser certaines fonctionnalités supplémentaires nécessaires pour le moteur en question. 

Le moteur pas-à-pas

Un moteur pas à pas est un type de dispositif électromagnétique dont la rotation peut être contrôlée de façon précise. Pour cela, plusieurs bobines sont organisées en "phases", et l'excitation séquentielle des phases entraîne une rotation. L'un des principaux avantages de ce type de moteur est qu'il permet de contrôler précisément sa vitesse et/ou le positionnement, et c'est pourquoi il est utilisé dans les applications demandant une haute précision, telles que les imprimantes.

 

Les branchements

Alors connaître les éléments c'est cool, mais quand ils sont branchés ensembles, c'est encore mieux ! :D

Commençons tout d'abord par brancher des fils à la carte Arduino. Vous devez brancher vos fils sur les emplacements 8/9/10/11. Enfin vous pouvez choisir d'autres numéros, mais si vous le faites vous devrez adapter le code qui suivra :).

Une fois ceci fait, on peut brancher notre moteur à notre carte de contrôle.

Maintenant que la carte est branchée, on peut connecter celle-ci à l'Aduino, en branchant les ports IN1/2/3/4 aux fils 8/9/10/11 (dans cet ordre).

Voilà, notre moteur est branché à la carte, et notre carte à la carte Arduino. Maintenant, il faut brancher la carte de contrôle du moteur aux ports d'alimentation 5V et GND (Ground / Terre) de la carte Arduino. En effet, la carte de contrôle doit être alimentée pour fonctionner.

Attention, c'est là que la carte mère d'alimentation rentre en scène, et c'est ici que vous devrez procéder à des extensions d'alimentation via des soudures lorsque vous passerez votre "structure" en "production".

(Dans mon exemple, le fil blanc est sur le - et le fil jaune est sur le +)

(Pareil ici, le rouge est égal au + et le bleu, le -).

Maintenant votre carte est raccordée à la carte mère d'alimentation, on peut raccorder celle-ci aux ports d'alimentation de la carte Arduino.

Je voulais prendre une photo de ça, mais en fait c'est tellement petit que ça ne valait pas la peine. Vous devez brancher le + sur le port 5V et le - sur le port "GND" (Y'en a deux, prenez celui que vous voulez :) ).

 

Le code

Alors, maintenant si vous branchez votre Arduino à votre port USB d'ordinateur (ou via une alimentation 5V, genre des piles) bah rien ne va se passer. Pourquoi ? Parce-qu'il vous manque le code. (Ok on est dans la section code, du coup ça se tient plutôt pas mal...)

#define IN1  8
#define IN2 9
#define IN3 10
#define IN4 11
int Steps = 0;
boolean Direction = true;// gre
unsigned long last_time;
unsigned long currentMillis ;
int steps_left=4095;
long time;

void setup(){
Serial.begin(115200);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}

void loop(){
while(steps_left>0){
currentMillis = micros();
if(currentMillis-last_time>=1000){
stepper(1);
time=time+micros()-last_time;
last_time=micros();
steps_left--;
}
}
Serial.println(time);
Serial.println("Wait...!");
delay(2000);
Direction=!Direction;
steps_left=4095;
}

void stepper(int xw){
for (int x=0;x<xw;x++){
switch(Steps){
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
case 1:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
break;
case 2:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 3:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 4:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 5:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 6:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 7:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
default:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
}
SetDirection();
}
}

void SetDirection(){
if(Direction==1){ Steps++;}
if(Direction==0){ Steps--; }
if(Steps>7){Steps=0;}
if(Steps<0){Steps=7; }
}

Définition des variables

Alors, tout d'abord on va commencer par définir quelques variables. (Attention, là où y'a des #, ce sont des commentaires. :))

#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
int Steps = 0;
boolean Direction = true;// gre
unsigned long last_time;
unsigned long currentMillis ;
int steps_left=4095;
long time;

Ces variables vont nous permettre de définir une direction, un temps de passage, les millisecondes actuelles, etc. Une fois ces variables définies on peut créer notre fonction "setup" afin de préparer le programme Arduino.


void setup(){
Serial.begin(115200);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
}

Dans ce setup on défini un taux de transfert de données en bits par seconde, grâce à la méthode "Serial.begin(115200). Le taux 115200 est le plus haut préconisé par Arduino.

Ensuite, on va associer des modes à nos "pins". En l'occurence ce sont les pins de la carte de contrôle du moteur pas-à-pas. Deux options sont possibles. Un pin peut être soit "OUTPUT", soit "INPUT". Dans notre cas c'est un OUTPUT car il va recevoir des données et ne va pas en envoyer.

Une fois ceci fait on va créer une boucle, cette boucle va nous permettre de faire tourner notre moteur.

void loop(){
while(steps_left>0){
currentMillis = micros();
if(currentMillis-last_time>=1000){
stepper(1);
time=time+micros()-last_time;
last_time=micros();
steps_left--;
}
}
Serial.println(time);
Serial.println("Wait...!");
delay(2000);
Direction=!Direction;
steps_left=4095;
}

Grâce à cette boucle, notre moteur va tourner ! :D Yeah !

Vous devez cependant rajouter ces deux méthodes qui permette de gérer le mouvement du moteur. Elles sont appelées dans la méthode loop. (Dans l'idée ce sont des méthodes privées, elles ne sont pas obligatoires :) mais pour une meilleure lisibilité du code, c'est tout de même mieux !)

void stepper(int xw){
for (int x=0;x<xw;x++){
switch(Steps){
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
case 1:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
break;
case 2:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 3:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 4:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 5:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 6:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 7:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
default:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
}
SetDirection();
}
}

void SetDirection(){
if(Direction==1){ Steps++;}
if(Direction==0){ Steps--; }
if(Steps>7){Steps=0;}
if(Steps<0){Steps=7; }
}

Une fois votre programme écrit, vous pouvez le vérifier afin de voir si Arduino le prend en considérer et qu'il est valide.

La vérification c'est le bouton "check" à gauche. Le bouton avec la flèche vers la droite vous permet de téléverser votre code dans votre Arduino.

ATTENTION ! Si vous n'avez pas configurer le port de sur votre logiciel Arduino, vous verrez une erreur en console.

Pour sélectionner le bon port, vous devez faire "Outils/Port". Dans le concept vous ne devriez en avoir qu'un possible.

Et si tout ça est bon, eh bien votre moteur devrait tourner tout seul dans un sens, puis dans l'autre :D.

J'espère que ce tutoriel aura été instructif et si vous avez la moindre question, n'hésitez pas à nous en faire part en commentaire, ou bien via la page Facebook de la Cosplay School.

A bientôt <3

 

 

Dans la même catégorie

Commentaires