Commander un servo-moteur #Arduino3

Tutoriel pour apprendre à commander un servo-moteur avec un Arduino et un potentiomètre, comprendre les bases de son fonctionnement et ses applications.

Tutoriel écrit par Guy geek et consulté 29372 fois

2

Ce dont vous aurez besoin

  • Un arduino UNO
  • Une breadboard
  • Un potentiomètre de 10 kOhm
  • Un servo-moteur de 5V

Partie 1 : Le code et le schéma

Comme d'habitude, je vais commencer par donner les indications pour réaliser tout de suite le circuit, les explications viendront dans un deuxième temps !

#include <Servo.h> //On commence par inclure la bibliothèque de commande des servo
 
const int potentiometre = 0; // Initialisation du potentiomètre
Servo monServo; // Initialisation du servo-moteur
 
void setup()
{
    monServo.attach(9); // on va commander l'angle du servo-moteur avec la pin 9
    monServo.write(0); // on place le servo à 0 degré au demarrage
    
}
 
void loop()
{
    int val = analogRead(potentiometre); // lecture de la valeur du potentiometre, comprise entre 0 et 1024
    int angle = val / 5.7; // On converti cette valeur en degrés entre 0 et 180. 
    monServo.write(angle); // On envoi la commande de l'angle au servo-moteur
    delay(100); // petit temps de pause pour laisser le moteur respirer
}


Et voici le schéma correspondant : 

Dans la vraie vie, ça donne ça : 


Si votre servo-moteur fait n'importe quoi, il se peut que l'Arduino ne puisse pas fournir assez de courant pour l'alimenter. 
Une première solution consiste à ajouter une capacité (470uF ou plus) entre les ports GND et 5V de la breadboard (avec la branche la plus longue sur le 5V). Cette capacité va servir de réservoir d'energie pour le moteur.
Si cela ne fonctionne toujours pas, il serait bon d’envisager une alimentation externe car le régulateur de l’Arduino n’est pas fait pour délivrer trop de courant, vous risqueriez de le cramer...

Partie 2 : explications

Les servo-moteurs sont des moteurs un peu spéciaux qui diffèrent des moteurs à courant continu classiques par les caractéristiques suivantes :
  •  Selon les modèles ils ne peuvent tourner que de 90, 180 ou 360 degrés. On parle de "débattement"
  • On peut définir précisément de combien de degrés ils vont tourner. On dit qu'ils sont "asservis en position angulaire"
  • Ils est impossible de régler leur vitesse de rotation (sauf pour les modèles les plus chers), qui est relativement faible et avec un couple supérieur aux moteurs classiques de la même taille. 

On les utilise beaucoup dans le modélisme. Ils permettent de "commander" des petites rotations de façon précise. Par exemple piloter les roues d'une voiture, les gouvernails d'un avion ou encore commander un bras distributeur de bonbons skittles:

Le servo-moteur est branché par 3 fils : 2 pour l’alimentation, 1 pour la commande de l’angle. 
Le fil rouge correspond à l'alimentation positive (5V).
Le fil noir ou marron correspond à la masse (0V).
Le fil orange ou jaune ou blanc correspond au signal de commande. 

Je n'expliquerai pas dans ce tutoriel son fonctionnement interne mais uniquement comment l'utiliser. Pour ceux que cela intéresse, je conseille ce super article du blog d'Eskimon.
La commande du servo moteur est grandement facilitée par la bibliothèque "Servo" de l'Arduino que j'importe au début du programme et qui nous permet de commander directement le moteur sans comprendre son fonctionnement. 
Dans le programme j'ai donné comme nom "monServo" au moteur, mais on peut décider de l'appeler autrement (par exemple : "servoGouvernail", "myServo" ...). 
Dans la partie setup() du programme qui sert à l'initialisation de l'Arduino, on choisit le port de sortie qui va  commander le servo-moteur, par exemple le port numero 9. Il faudra par la suite relier le cable orange du moteur au port numéro 9. 
La technique de commande est la même que celle utilisée dans le tutoriel sur la commande d'une LED RGB et consiste à lire la valeur d'une resistance variable (ou potentiomètre) grâce à la fonction analogRead, puis à convertir cette donnée en degrés.
Enfin, nous utilisons la fonction .write de la bibliothèque Servo pour envoyer la consigne au moteur. Cette fonction ne prend qu'un seul argument : la position en degré que l'on souhaite que le moteur prenne. 
On va donc pouvoir directement interagir avec le moteur en tournant le potentiomètre, l'Arduino se chargera de tout le reste !

Puissance du moteur : 

Voici quelques indications pour savoir quelle va être le couple ou encore "la force" de votre moteur. 
Si vous tapez le nom de votre servo-moteur sur internet, vous devriez retrouver facilement sa "data-sheet" qui devrait ressembler à cela 

J'ai pris celle-ci totalement au hasard à titre d'exemple. Pour connaitre la force de votre moteur, il faut s'intéresser à la donnée "Torque" ou couple en français. Cette donnée en kg.cm vous indique le poids maximal d'un objet que vous pouvez suspendre à 1cm de l'axe du moteur. A x centimètres de l'axe, il faudra diviser cette valeur par x (et oui, c'est toujours pus difficile de porter les objets à bout de bras ...). 
Par exemple, si le bras de votre moteur fait 10cm, il ne supportera pas plus de 0.18 kg de charge, autrement dit 180 grammes.
Au passage, vous pouvez aussi apercevoir la vitesse de rotation du moteur : 0.60 secondes pour réaliser un tour complet. 

Partie 3 : pour s'entrainer 

Pour vous entrainez vous pouvez : 
  • Faire une micro-horloge qui se décale de 6 degrés toutes les secondes en utilisant la fonction delay(1000)
  • Faire une mini roue de la fortune en utilisant la fonction random(0, 180) qui donne une valeur au hasard entre 0 et 180. 
  • Faire un système qui remonte votre sachet de thé après 3 minutes d'infusion

Et n'hésitez pas à envoyer des photos de vos réalisations en cliquant sur "je l'ai fait" ou à me poser des questions en commentaire :)

A bientôt !

Commentaires

Photos d'internautes