Fonctionnement des servomoteurs:

MLI

Les servomoteurs sont généralement de petits moteurs composés d’un moteur à courant continu, d’engrenages, d’un potentiomètre et d’un peu d’électronique (driver de moteur CC,…). Ils utilisent un asservissement de position (ici ce sera un angle compris entre 0 et 180°), envoyé sous la forme d’impulsions électriques (nommée PWM ou MLI en français pour Modulation de Largeur d’Impulsion) possédant cette apparence :

De cette manière, plus l’impulsion à 5V est longue, plus l’angle que le servomoteur va tenter rejoindre sera grand. Les servomoteurs que nous allons utiliser consomment environ 75mA sans charges et peuvent consommer jusqu’à 250mA lorsqu’il sont contraints (on utilisera une marge de 30% soit 325mA au maximum).

Comment s’en servir ?

blogentry-9502-0-25622900-1465822752
blogentry-9502-0-82215900-1465486856

Afin de pouvoir l’utiliser il faut alimenter le servomoteur et lui envoyer une information d’angle via l’Arduino (sous la forme d’une impulsion à 5V plus ou moins longue en fonction de l’angle). Voici comment il vous faudra brancher votre servomoteur :

Il vous suffit de relier le câble brun au pin GND, le câble rouge au 5V et l’orange au pin digital utilisé (ici on utilise le 9):

Et le programme qui vous permettra de tester votre servomoteur (il vous faudra sûrement modifier les valeurs de MIN et MAX afin d’atteindre précisément 0 et 180°) :

//Bibliothèque :
#include <Servo.h> //Ajoute la librairie Servo

//servo1 :
Servo servo1; //Déclare un nouveau servomoteur nommé servo1
int pos = 0; //Position initiale du servo
#define PAUSE 20 //Symbolise la pause en ms entre chaque mouvements du servo
#define MIN 550 // Position 0° en microseconde
#define MAX 1449 // Position 180° en microseconde

void setup() {
servo1.attach(9, MIN , MAX); //Attache servo1 au pin 9 avec MIN et MAX les extrêmes en microsecondes
}

void loop() {

for (pos = 0; pos = 0; pos--)
//Rejoins un angle de 0° depuis 180° par pas de 1°
{
servo1.write(pos);
delay(PAUSE);
}
delay(1000);
}

Le but de ce programme est de faire tourner le servo d’un angle de 0° à un angle de 180° puis revenir à 0°, degré par degré. Avec ce programme vous pouvez aussi modifier le temps de pause entre chaque degré ce qui permet de “régler la vitesse de rotation”.
Si vous n’avez aucune idée des MIN et MAX, voici un programme qui devrait vous permettre d’aller plus vite, ici les MIN et MAX testés sont envoyés par l’interface Série il n’est donc pas nécessaire de téléverser à chaque fois ce programme pour tester de nouvelles valeurs :

//Bibliothèques :
#include<Servo.h>

//Servo :
Servo servo1;
#define PIN_SERVO 9
int mini = 0;
int maxi = 0;
#define PAUSE 2000
#define REPOS 700

//Serial :
int ava;      //Variable pour vérifier qu'une donnée est disponible ( ava pour available)
String mail; //Variable qui contient le message
String mi;   //Le min
String ma;   //Le max

void setup() {
  Serial.begin(9600);

  servo1.attach(PIN_SERVO);  
}

void loop() {
  ava = Serial.available();
  if (ava > 0)
  {
    //Lecture des données reçues :
    mail = Serial.readString();

    servo1.attach(PIN_SERVO);  

    //Séparation des données :
    mi = mail.substring(0,3);
    ma = mail.substring(3,6);

    //Affichage sur l'interface Série :
    Serial.print(mi); Serial.print(" ");
    Serial.println(ma);

    //Conversion en int :
    mini = mi.toInt();
    maxi = ma.toInt();

    for(uint8_t i = 0; i < 2; i++)
    {
      servo1.writeMicroseconds(mini);
      delay(REPOS);
      servo1.writeMicroseconds(maxi);
      delay(REPOS);
    }
    delay(PAUSE);
    servo1.detach();
    }
}