La Bibliothèque Servo fait partie des bibliothèques livrées avec l’IDE Arduino et ne nécessite donc pas d’installation séparée. Elle facilite l’écriture de programmes pour commander un ou plusieurs servomoteurs.
La bibliothèque Servo
.
Par : ,
,
DIFFICULTÉ :★☆☆
Nous allons donc voir les différentes commandes de cette bibliothèque. Nous n’allons pas ici mettre en pratique ces commandes pour, par exemple, commander une aiguille. Ce sera le sujet d’autres articles.
Rappel sur l’alimentation et le nombre de servos possibles par carte
Un Arduino peut alimenter un seul servomoteur [1]. Dans le cas de plusieurs, il faudra les alimenter avec une source extérieure de 5V.
Parfois on trouve des servos peu consommateurs de courant. Mais il n’est tout de même pas recommandé d’en alimenter plusieurs sur le 5V de la carte.
Rajoutons aussi qu’un servo-moteur tourne entre 0 et 180° et non dans un mouvement continu, les moteurs continus sont faits pour cela.
La bibliothèque Servo prend en charge jusqu’à 12 moteurs sur la plupart des cartes Arduino et 48 sur l’Arduino Mega. Sur les cartes autres que les Mega, l’utilisation de la bibliothèque désactive analogWrite () (PWM) sur les broches 9 et 10, qu’il y ait un servo ou non sur ces broches.
Installation et importation
Cette bibliothèque fait donc partie intégrante d’Arduino, elle est installée de base. Il suffit juste de l’importer dans le programme avec la ligne en début de programme :
#include <Servo.h>
Les différents codes et fonctions
Déclarer la variable servo
Il faut ensuite pouvoir manipuler le servo-moteur. Il faut pour cela créer une variable de type Servo. On dit aussi instancier une variable. Le type Servo est un peu spécial, on entre là sur le terrain du C++ étudié dans la série d’article sur le Monde des Objets. Servo est une classe et créer une variable de ce type donne un objet. En plus de contenir une valeur comme une variable de type nombre entier, un objet possède des fonctions qui agissent sur lui. Dans le monde de l’objet on appelle communément ces fonctions des méthodes. Nous n’avons pas besoin d’en connaître plus pour utiliser un objet de type Servo. Voici comment on crée une variable, que nous appelons monServo de type Servo.
Servo monServo;
Il sera nécessaire pour chaque servo-moteur commandé par l’Arduino de créer une variable. Si nous avions 3 servo-moteurs, il y aurait 3 objets servo.
La déclaration se fait lors de la déclaration des autres variables.
Attacher l’objet servo à la broche
Cette partie de code se place dans la fonction setup puisqu’on a besoin de l’attacher qu’une seule fois.
Nous allons utiliser la méthode .attach pour l’objet monServo pour attacher la broche reliée au servo-moteur à l’objet monServo.
monServo.attach(2);
Cette méthode accepte comme paramètres :
- évidemment la broche reliée au servo, dans l’exemple la broche 2
- en 2ème paramètre l’angle minimum en microsecondes, par défaut il est à 544 (microsecondes)
- en 3ème paramètre l’angle maximum en microsecondes, par défaut il est à 2400 (microsecondes)
Avant de continuer l’explication, précisons que l’Arduino commande un servo-moteur à l’aide d’impulsions. La durée de ces impulsions détermine l’angle d’arrivée. La datasheet de chaque servo-moteur expose les durées qui le concernent afin que l’Arduino connaisse parfaitement comment il fonctionne.
Dans le cas où nous ne spécifions pas de 2ème et 3ème paramètre comme dans l’exemple, les angles seront ceux par défaut.
Cette méthode .attach()
met l’angle du servo à 90°. Afin de spécifier un angle autre que 90°, il nous faut utiliser la méthode .write ou .writeMicroseconds juste avant .attach()
, nous allons voir ces deux méthodes.
Bouger le servo
Deux méthodes sont à notre disposition. A part pour fixer la position initiale dans le setup avant la méthode .attach()
, ces méthodes seront utilisées principalement dans la fonction loop.
.write(angle en degrés)
monServo.write(60);
Cette commande fait bouger le servo à un angle de 60°, changer l’angle fera bouger le servo-moteur à l’angle choisi.
.writeMicroseconds(angles en microsecondes)
Cette méthode fait la même chose que la précédente mais l’angle est mis en microsecondes.
Comme il y a beaucoup plus de paliers que la méthode précédente, cela permet entre autre une meilleure précision dans l’angle mais aussi nous le verrons dans un autre article un meilleur mouvement.
monServo.writeMicroseconds(1472);
mettra donc le servo à un angle de 90°
Comment le calculer ?
Dans l’hypothèse où les paramètres optionnels de la méthode .attach()
n’ont pas été spécifiés, 544 µs est un angle de 0° et 2400 un de 180°. Prenons la moyenne, et nous avons 1472 qui est un angle de 90°.
Autres méthodes mais peu usitées
.read()
Comme la traduction le précise, cette méthode donne comme résultat l’angle du servo en degrés
int degres = monServo.read();
Il n’y a pas de paramètres à mettre notamment la broche, n’oublions pas que l’objet monServo a cette information depuis que la méthode .attach
a été utilisée.
.attached()
Cette méthode renvoie true si la broche est rattachée à l’objet et false sinon.
.detach()
au contraire de la 1ère méthode vue, elle permet de détacher le servo de l’objet servo défini.
Maintenant que la bibliothèque Servo a été présentée, le mieux, pour l’utiliser rapidement est de regarder des exemples, comme ceux de l’IDE Arduino, ou, plus près de notre passion ferroviaire, l’article Les différents types de mouvements d’un servomoteur.
[1] En réalité cela dépend de la consommation des servomoteurs. En pratique il est possible d’alimenter plusieurs micro-servomoteurs mais dans le cas général, un seul servomoteur est une limite qui convient pour tous les types de servos courants en modelisme