LOCODUINO

Forum de discussion
Dépôt GIT Locoduino
Flux RSS

lundi 25 septembre 2017

6 visiteurs en ce moment

Bibliothèque Servo

. Par : Dominique, Guillaume, Jean-Luc

Introduction

Bibliothèque officielle faisant partie du référentiel Arduino sur le site éponyme arduino.cc, elle facilite l’écriture du code pour commander un servo-moteur.

Figure 1 : un exemple de raccordement d’un servo-moteur sur un UNO

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 servo-moteur. 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 :

  1. #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.

  1. 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.

  1. 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)

  1. 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.

  1. 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

  1. 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 servo-moteur.

6 Messages

Réagissez à « Bibliothèque Servo »

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.

Lien hypertexte

(Si votre message se réfère à un article publié sur le Web, ou à une page fournissant plus d’informations, vous pouvez indiquer ci-après le titre de la page et son adresse.)

Rubrique « Bibliothèques »

Bibliothèque Servo

Bibliothèque SoftWare Serial

Bibliothèque Serial

Bibliothèque EEPROM

Bibliothèque Wire : I2C

Bibliothèque LCD

Bibliothèque ScheduleTable

Bibliothèque MemoryUsage

Bibliothèque EEPROMextent

Bibliothèque Commanders

Bibliothèque Accessories (1)

Bibliothèque Accessories (2)

Un décodeur d’accessoires universel (1)

Un décodeur d’accessoires universel (2)

Un décodeur d’accessoires universel (3)

Bibliothèque LcdUi (1)

Bibliothèque LcdUi (2)

Les derniers articles

Bibliothèque LcdUi (2)


Thierry

Bibliothèque LcdUi (1)


Thierry

Bibliothèque Accessories (2)


Thierry

Bibliothèque Accessories (1)


Thierry

Bibliothèque Commanders


Thierry

Bibliothèque MemoryUsage


Thierry

Bibliothèque Wire : I2C


Dominique, Guillaume

Bibliothèque Serial


Dominique, Guillaume, Jean-Luc

Bibliothèque SoftWare Serial


Dominique, Guillaume

Bibliothèque LCD


Dominique, Guillaume, Jean-Luc

Les articles les plus lus

Bibliothèque Wire : I2C

Bibliothèque Serial

Un décodeur d’accessoires universel (1)

Bibliothèque EEPROM

Bibliothèque Commanders

Bibliothèque Servo

Bibliothèque LCD

Un décodeur d’accessoires universel (3)

Bibliothèque Accessories (1)

Bibliothèque SoftWare Serial