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
- 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
- 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 !