Arduino 2019-4.1s instructions S4

INSTRUCTIONS S 4

Le Sweep

Cette semaine, nous tentons une nouvelle approche dans le cours avec le code directement expliqué dans le texte de la vidéo que vous venez de voir :

Nous allons d’abord aborder 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 ServoFichier→Exemples→Servo>→Sweep.
Détaillons maintenant les nouvelles instructions présentes dans ce programme.
Après quelques lignes de commentaires, nous trouvons une instruction particulière :

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

Servo myservo;

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

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 :

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. Sympa, non ?
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 !

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

Cette “bouclette” à 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 :

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

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 ? » :

myservo.write(0);
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.