Explications

Le SWEEP

Commençons par abodrer les bibliothèques de code.

Librairies, ça vient de l'anglais "Libraries" qui signifie Bibliothèques. Peu importe ce que vous trouverez comme termes sur internet, l'idée est d'avoir sous la main un rassemblement de morceaux de code, classés par thématiques, que vous invoquez à la demande. Un peu comme des supers pouvoirs qui vous évitent d'avoir à réinventer la roue à chaque projet !

Les librairies pour Arduino sont nombreuses et abordent la plupart des besoins courants. On trouve ainsi les bibliothèques standards, pour par exemple gérer le Wifi, les écrans à cristaux liquides, une carte SD, ou encore des moteurs. Pour l'occasion, nous allons nous intéresser à des moteurs un peu particuliers que l'on retrouve dans le monde du modélisme : les servomoteurs.

Au boulot, je vous laisse ouvrir le programme (ou IDE) Arduino et l'exemple « sweep » que l'on trouve dans les exemples du dossier Servo : Fichier→Exemples→Servo>→Sweep.

Explications

Détaillons maintenant les nouvelles instructions présentes dans ce programme.

Après quelques lignes de commentaires, nous trouvons une instruction particulière :

1
#include<Servo.h>

Voilà, vous venez de charger la bibliothèque et obtenez du même coup la boîte à outils correspondante.

À partir de là, vous pouvez créer des objets en partant du « moule » Servo, un peu comme on fait de nombreuses gaufres à partir d'un seul moule... à gaufres forcément !

C'est ce qu'on va tout de suite faire. En créant une gaufre chantilly...

Non, pardon ! Un servomoteur, que nous appelons ici myservo.

1
Servo myservo;

On déclare ensuite une variable pos, pour stocker une position au cours du programme :

1
int pos = 0;

Il est temps de passer au bloc setup. C'est vite réglé, puisqu'il suffit d'attacher notre servo fraîchement créé à la broche 9 :

1
myservo.attach(9);

La méthode attach() est disponible pour les objets de type Servo. La bibliothèque de code gère le reste pour vous.

Comme indiqué sur la page de Mon Club Elec, les méthodes disponibles sur les objets de type Servo sont assez explicites : attach(), write(), writeMicroseconds(), read(), attached(), detach().

Fin du setup, il est temps de "looper" à présent ! :)

La boucle principale commence par... faire une boucle !

1
for(pos = 0; pos < 180; pos +=1) {
2
  myservo.write(pos);
3
  delay(15);
4
}

Cette “boucle” à pour but de faire varier la position cible demandée au moteur. Autrement dit, elle sert uniquement à faire varier la valeur de pos du minimum au maximum. En français, ça donne quelque chose comme « Pour une valeur position allant de 0 à 179 et une marche à la fois, demande au servo myservo d'aller en position pos »

Un pos += 4 vous aurait fait monter l'escalier 4 à 4 :)

On laisse quelques millisecondes au moteur afin qu'il ait le temps d'aller une marche plus loin, concrètement de tourner de 1°.

C'est reparti pour un tour, cette fois-ci dans l'autre sens. Au lieu d'incrémenter la valeur de +1 à chaque passage de bouclette, on la décrémente ici de -1 :

1
for(pos = 180; pos >= 1; pos -= 1) {
2
  myservo.write(pos);
3
  delay(15);
4
}

Puisque nous arrivons en fin de boucle, notre servo va bientôt repartir.

Certain d'entre vous doivent se dire : « Pourquoi ne pas être aller directement au but avec par exemple ? » :

1
myservo.write(0);
2
myservo.write(180);

La réponse tient en un mot : la douceur !

Utiliser un délai dans une boucle secondaire permet de ralentir le processus. Plus la valeur du délai sera importante dans votre programme, plus le déplacement du moteur sera doux dans la vrai vie... À vous d'adapter la valeur du délai à vos besoins de tendresse.

Nous pouvons maintenant téléverser (ou "upload" en anglais) notre programme sur l'Arduino.

Montage

Pour le réaliser, vous aurez besoin de :

  • Un Arduino

  • Un câble USB

  • Des fils de prototypage

  • Une platine de prototypage

  • Un servomoteur

Schéma

Code

1
#include <Servo.h> 
2
3
Servo myservo;  // créer un objet appelé myservo à partir
4
// du moule Servo
5
6
int pos = 0;    // variable pour stocker la position courante du servo
7
8
void setup() 
9
{ 
10
  myservo.attach(9);  // attacher notre objet myservo au servomoteur branché sur la broche 9 
11
} 
12
13
14
void loop() 
15
{ 
16
  for(pos = 0; pos < 180; pos += 1)  // aller de 0° à 179°
17
  {                                  // une étape à la fois
18
    myservo.write(pos);              // aller à la position stocké dans 'pos'
19
    delay(15);                       // attendre 15ms que le servomoteur se rende à 'pos'
20
  } 
21
  for(pos = 180; pos>=1; pos-=1)     /// aller de 180° à 1°
22
  {                                
23
    myservo.write(pos);              // aller à la position stocké dans 'pos'
24
    delay(15);                       // attendre 15ms que le servomoteur se rende à 'pos'
25
  } 
26
}

Remarque

  • Copiez-collez ce code dans le simulateur pour ne pas avoir à tout retaper. Saviez-vous que vous pouvez accéder à la documentation d'une fonction en cliquant avec le bouton droit sur celle-ci puis en cliquant sur Trouvez dans la référence.

  • Aussi, il faut bien attendre la fin du téléversement avant d'ouvrir le moniteur série dont on parle en dessous.