Ce tutoriel a été réalisé dans le cadre du projet "Parle à ma main" financé par la Fondation de France et un mécénat de la Fondation LAURENCE MATHIEU (Bourse Déclics jeunes). . Ce tutoriel est la continuité du tutoriel Premiers Pas Arduino et de Contrôler ses propres LEDs . Ce tutoriel est utilisable pour fabriquer La main bionique.
Si vous souhaitez contrôler un servomoteur, vous aurez besoin:
• Fil rouge sur une broche 5V de votre carte Arduino, et sur le fil rouge du servomoteur
• Fil noir sur une broche GND de votre carte Arduino, et sur le fil marron de votre servomoteur
• Fil jaune sur la broche 9 de votre carte Arduino, et sur le fil jaune de servo moteur
La carte Arduino sur le PC via USB
Pour vous familiariser avec le contrôle d'un servomoteur, voici un premier code qui met le servomoteur à un angle précis (donné dans la variable "position" dans le code).
Un servomoteur est un moteur qui se met dans une position donnée, on dit qu'il est "asservi".
Voici le détail du code complet affiche à droite. Si vous ne savez pas comment le charger sur votre carte Arduino, je vous conseille de voir le tutoriel Premiers pas avec Arduino.
Ligne 1: #include <Servo.h>
Cette instruction sert à indiquer à la carte Arduino que l'on fait appelle à des commandes spécifiques liées au contrôle du servomoteur. On demande donc d'inclure ces elements.
Ligne 2: Servo monServomoteur;
On crée un objet de type Servo que l'on appelle "monServomoteur" pour contrôler le servomoteur (pour que l'ordinateur comprennent qu'il y a un servomoteur et que "monServomoteur" est de ce type).
Ligne 3: int position = 0;
On choisit la position du servomoteur au démarrage ici. Dans ce cas, le servomoteur se met en butée à l'angle 0, avec 90 il se mettra au milieu, et avec 180 il se mettra en butée à 180 dégrée. "Position" est une variable de type int (c'est à dire un nombre entier), et vous pouvez mettre une valeur entre 0 et 180 degrés pour que votre servomoteur prenne cette position plus tard.
Ligne 4: void setup() {
Ouverture de la fonction d'initialisation. Plus d'informations dans le tutoriel l Premiers pas avec Arduino.
Ligne 5: monServomoteur.attach(9);
On indique à la carte Arduino que la broche pour le contrôle de l'angle du servomoteur est branchée à la broche (ou PIN) numéro 9. C'est ce que vous deviez avoir fait avec le fil jaune dans la partie précédente.
Ligne 6: }
Fermeture de la fonction d'initialisation.
Ligne 7: void loop() {
Ouverture de la fonction qui tourne en boucle lorsque la carte est branchée. Plus d'informations dans le tutoriel l Premiers pas avec Arduino.
Ligne 8: monServomoteur.write(position);
On indique à la carte Arduino de demander au servomoteur "monServomoteur" de se mettre dans l'angle indiqué dans la variable "position".
Ligne 9: }
Ouverture de la fonction qui tourne en boucle lorsque la carte est branchée et fin fu programme.
Note: les noms en italique dans le texte ne peuvent pas être modifiés, car ils sont propres à Arduino. Les mots entre guillemets dans le texte peuvent être renommes comme vous le souhaitez, mais ils doivent être modifier partout où ils apparaissent pour être cohérent.
#include <Servo.h>
Servo monServomoteur;
int position = 0;
void setup() {
monServomoteur.attach(9);
}
void loop() {
monServomoteur.write(position);
}
Pour mettre le programme sur votre carte et voir votre programme à l’œuvre:
Plus de détails dans le tutoriel l Premiers pas avec Arduino.
Lorsque votre carte Arduino est débranchée de l'ordinateur, vous pouvez faire tourner à la main le servomoteur entre 0 et 180 dégrées.
Maintenant, lorsque vous branchez votre carte Arduino avec le servomoteur branché et le programme téléversé dessus, vous devez voir le servomoteur bouger à la bonne position. Vous ne pouvez plus faire tourner à la main le servomoteur.
Nous allons faire bouger le servomoteur dans la suite du tutoriel.
Il suffit de remplacer le "9" par un "10":
#include <Servo.h>
Servo monServomoteur;
int position = 0;
void setup() {
monServomoteur.attach(10);
}
void loop() {
monServomoteur.write(position);
}
Note: Il faut toujours brancher le contrôle de l'angle du servomoteur sur une broche Arduino avec un tilde "~ ", comme la ~ 3, ~ 5, ~ 6, ~ 9, ~ 10, ou ~ 11.
Il suffit de rajouter un objet type Servo avec un nom différent du premier, attachée sur la broche 10. On ajoute egalement un deuxieme int avec un nom different de "position".
Dans la solution suivante, le deuxième Servo s'appelle "monServomoteurBis", et le deuxième entier int s'appelle "positionBis" avec une valeur de 34 dégrés.
#include <Servo.h>
Servo monServomoteur;
Servo monServomoteurBis;
int position = 0;
int positionBis = 34;
void setup() {
monServomoteur.attach(9);
monServomoteurBis.attach(10);
}
void loop() {
monServomoteur.write(position);
monServomoteurBis.write(positionBis);
}
La seule partie qui change est dans la fonction loop.
Ligne 1: for (int position = 0; position <= 180; position++) {
Ouverture d'une boucle for. Tout ce qui est dans cette boucle se répété tant que les condition sont respectées (les lignes 2 et 3 se répètent).
On aura donc:
Ligne 2: monServomoteur.write(position);
On indique à la carte Arduino de demander au servomoteur "monServomoteur" de se mettre dans l'angle indiqué dans la variable "position".
On aura donc:
Ligne 3: delay(15);
Le programme s’arrête pour 15 millisecondes, avant de continuer:
Ligne 4: }
Fin de la boucle for. L'ensemble de la boucle for se résume comme cela:
Ligne 5: for (int position = 180; position >= 0; position--) {
C'est comme la ligne 1, sauf que l'on va de 180 à 0 au lieu de 0 a 180 degrés.
Ouverture d'une boucle for. Tout ce qui est dans cette boucle se répété tant que les condition sont respectées (les lignes 2 et 3 se répètent).
On aura donc:
Ligne 6 et 7: identiques à lignes 2 et 3
Ligne 8: }
Fin de la deuxième boucle for. Si on résume, l'ensemble de cette boucle for:
On va ensuite répéter l'ensemble de ces instructions, car la fonction "loop" recommence.
#include <Servo.h>
Servo monServomoteur;
int position = 0;
void setup() {
monServomoteur.attach(9);
}
void loop() {
for (int position = 0; position <= 180; position++) {
monServomoteur.write(position);
delay(15);
}
for (int position = 180; position >= 0; position--) {
monServomoteur.write(position);
delay(15);
}
}
Pour mettre le programme sur votre carte et voir votre programme à l’œuvre:
Plus de détails dans le tutoriel l Premiers pas avec Arduino.
Maintenant, lorsque vous branchez votre carte Arduino avec le servomoteur branché et le programme téléversé dessus, vous devez voir le servomoteur bouger en continu de 0 à 180° puis de 180 à 0° et ainsi de suite.
Faites bouger un main en carton avec ce code, en suivant le tutoriel Main Bionique.