Le servomoteur en général, est un petit moteur ayant un axe de rotation de 0 à 180°. Il existe biensur des servomoteurs à rotation continue mais nous ne les verrons pas dans cet article.

LE servo de base, sans doute le moins chère est le Tower pro sg90. On le trouve a environ 2€. Celui dont on se sert pour s’amuser.

Spécifications d’un Servo:

  • Son poid : 9g pour un sg90.
  • Ses  dimension: 22.2 x 11.8 x 31 mm approximativement.
  • Son couple qui s’exprime en kg par cm : 1.8kg par cm.
  • La vitesse de rotation: 0.1 s pour 60 degree
  • Sa tension d’alimentation:  4.8 V (~5V)

Niveau branchement, on part sur 3 cables:

  • Rouge : Alimentation (5V).
  • Noir ou marron : La masse.
  • Jaune, orange ou blanc : “Sig”,  c’est le signal, controlé par une sortie PWM.

Des tutos sur les servos, il y en à a la pelle.

Je vous met le code le plus simple qu’il y ai. Il se trouve directement dans les exemples de l’IDE: Fichiers -> Exemples -> Servo -> knob.

Le code est comme celui-ci, il sagit de commander un servo par le biais d’un potentiomètre.

Et l’image officiel d’Arduino.cc

knob_bb

              
            /* 
             Controlling a servo position using a potentiometer (variable resistor) 
             by Michal Rinott <http://people.interaction-ivrea.it/m.rinott> 

             modified on 8 Nov 2013
             by Scott Fitzgerald
             http://arduino.cc/en/Tutorial/Knob
            */

            #include <Servo.h> 
             
            Servo myservo;  // create servo object to control a servo 
             
            int potpin = 0;  // analog pin used to connect the potentiometer
            int val;    // variable to read the value from the analog pin 
             
            void setup() 
            { 
              myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
            } 
             
            void loop() 
            { 
              val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
              val = map(val, 0, 1023, 0, 180);     // scale it to use it with the servo (value between 0 and 180) 
              myservo.write(val);                  // sets the servo position according to the scaled value 
              delay(15);                           // waits for the servo to get there 
            } 

            

Pour ma part pour pouvoir tester mon servo directement, j’ai décidé de me passer du potentiomètre et de définir un déplacement bien spécifique et en boucle. Voici le code:

            #include <Servo.h> 
             
            Servo myservo;  // create servo object to control a servo 
             

             
            void setup() 
            { 
              myservo.attach(9);  // On défini la pin 9 PWM
            } 
             
            void loop() 
            { 
              myservo.write(5);  // Positionnement du servo à 5°
              delay(1000);  // délais d'une seconde
              myservo.write(175); // Positionnement du servo à 175°            
              delay(1000);  // délais d'une seconde                   
            } 
            

 

Il va pour commencer se positionner à 5°, patienter une seconde, se positionner à 175°, patienter une seconde, etc.. etc.. en boucle.

Pour mon modèle de servo, le SG90, un servo d’entrée de gamme. Son angle est de 0° à 180° Je le fais passer de 5 à 175 pour éviter le grésillement qu’il se passe lors qu’il est au bout ou au début de sa course.