Contrôler un mini servo avec Arduino

servomotor

Avec mon pote Idleman, on a pour projet de réaliser un robot (mais chut j’en dis pas plus pour le moment), et qui dit robot dit moteur, articulation, etc…

N’ayant jamais piloter de servo moteurs, j’ai décidé d’acheter sur la baie des mini servo de 9g.

mini servo

 

Fonctionnement d’un servo moteur

Tout d’abord, il faut s’avoir qu’un servo permet d’effecter des déplacements en translation ou en rotation. De nombreux objets du quotidien utilisent des servo moteurs: voitures télécommandées, drône, électroménager, …

Les différents types de servos se distingue par 3 caractéristiques:

  • leur vitesse de rotation par seconde
  • leur course en degré
  • leur couple exprimé en kg.cm

Le fonctionnement d’un servo est relativement simple. Il suffit d’envoyer une impulsion dont la durée est comprise entre 0,5ms et 2,5ms au servo. Cette impulsion déterminera la position du guide du servo. Ainsi la valeur de 1,5ms donne au servomoteur la position centrale.

Ces impulsion doivent être envoyée de manière périodique, généralement toutes les 50ms.

Il n’y a rien de compliquer pour brancher un servo. Les servos ont généralement 3 fils:

  • un rouge: qui doit être branché au 5V (ou 12V suivant votre servo)
  • un noir : qui doit être branché à la masse
  • un orange (ou autre couleur) : qui  est le fil de tension de commande 0-5V

C’est donc via le fil orange que les commandes seront passées à votre servo. Ce fil devra obligatoire être relié à votre Arduino sur un pin PWN.

Voyons maintenant comment connecter un mini servo à notre Arduino.

Connecter un servo sur un Arduino

Voici le montage que j’ai réalisé pour tester mon mini servo:

arduino mini servo

 

Il suffit ensuite de charger le sketch suivant dans votre Arduino. Ce script utilise la librairie Servo nativement disponible dans l’outil de développement de votre Arduino.

// Sweep
// by BARRAGAN <http://barraganstudio.com> 
// This example code is in the public domain.
 
#include <Servo.h> 
 
Servo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
 
int pos = 0;    // variable to store the servo position 
 
void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
} 
 
void loop() 
{ 
  for(pos = 0; pos < 180; pos += 1)  // goes from 0 degrees to 180 degrees 
  {                                  // in steps of 1 degree 
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
  for(pos = 180; pos>=1; pos-=1)     // goes from 180 degrees to 0 degrees 
  {                                
    myservo.write(pos);              // tell servo to go to position in variable 'pos' 
    delay(15);                       // waits 15ms for the servo to reach the position 
  } 
}

Ce sketch est issu des exemples fournis avec Arduino. Il permet de faire tourner votre servo de 0 à 180 degré.

J’espère que cela vous aidera.

26 Responses to Contrôler un mini servo avec Arduino

  1. crocoscore says:

    Pas mal, ça marche bien ! Cependant je ne vois pas quoi en faire dans l’immédiat 😛

  2. margarian says:

    bonjour
    j’ai besoin d’aide
    DANS LE PROGRAMME ARDUINO.
    je voudrais faire fonctionner un servomoteur
    20° EN avant ET REVENIR A LA POSITION 0
    20° EN ARRIÈRE ET REVENIR A LA POSITION 0
    10 ° EN AVANT
    ET JE VOUDRAIS COMMANDER CES OPERATIONS AVEC 2 BOUTONS POUSSOIR
    qui pourrais m’envoyer ce programme car je galere.
    merci
    dominique

    • jhd says:

      Pour le code concernant le declenchement sur les boutons, tu trouvera plein d exemples (cherche allumer led bouton). Sinon pour les degrés il te suffit d’adapter mon code 🙂

  3. soumare says:

    bonjour;
    j’ai un PFA la dessue mon travail est de commander un cervo moteur via arduino afin qu’il ouvre et ferme un rido en mouvement comme une fenetre ou la porte d’un garage.
    cependant votre programme est trés interssant mais je dois changer les 180°
    ma question qu’es ce que je met a la place?
    aussi pour les capteur de fin de course il seront relié a l’arduino ou???
    merci d’avance

    • jhd says:

      pour les capteurs de fin de course tu peux utiliser des switchs tout bête. Tu pourrais préciser ta question pour les 180 degré car je n’ai pas compris

  4. Dodone says:

    Bonjour j’ai besoin d’envoyer une information d’un capteur de proximité a l’arduino ensuite de l’arduino au mini servo moteur apres du mini servo moteur au capteur de force. Pour le language C de l’arduino au servo j’utilise votre code mais pour le capteur de proximité a l’arduino comment ? J’ai un prolème avec le codage de l’arduino

  5. […] autre exemple : http://www.zem.fr/controler-un-mini-servo-avec-arduino/ […]

  6. LoicGD says:

    Bonjour j’aimerai le faire tourner a 360° c’est possible ?

  7. […] une superbe explication du branchement. Je vais utiliser ce tuto pour la programmation ou celui-la qui est plus […]

  8. TOD says:

    Bonjour, j’aimerais regler la vitesse de rotation de mon moteur mais je n’y arrive pas. Je voudrais qu’il soit lent mais qu’il revienne vite à la position initiale

  9. Matt says:

    Dans le code, fait une boucle for avec un delay pour arriver a la position voulue lentement et pour revenir a la position initiale, fait simplement un Monservo.Write(0).

  10. lou says:

    Bonjour, je suis en premiere S SI et on a un projet à mener sur l’année, les TPE. Au cours de ce travail on a eu besoin de mettre en place un système de rotation programmable avec arduino. Je voudrais savoir si c’était possible de faire tourner un servmoteur sur 360 degrés mais en 22 fois. C’est a dire qu’il y aurait plusieurs crans de environ 16.3 degrés chacun et via un programme arduino le servomoteur tournerais que de ces degrés la.
    Est-ce posible? merci d’avance

  11. spaikeur says:

    Bonjours, j’essaie d’adapté ton sketch pour que le servomoteur réagisse avec un capteur de détection, celui-ci:
    http://boutique.semageek.com/fr/139-capteur-de-d%C3%A9tection-d-obtacle-infrarouge-gp2y0d810z0f.html
    Mais j’ai vraiment du mal, surtout que c’est un travail pour le lycée en 1ère et que je n’ai pas le matériel actuellement pour testé. J’aimerais savoir si tu peut m’expliquer comment l’adapter, merci 🙂

    • jhd says:

      Je te conseille de faire des tests uniquement avec le capteur et une foi que tu auras assimilé le comportement du capteur, d’appeler les fonctions données dans mon article.

  12. pierro says:

    bonjour j’ai essayer de modifier votre excellent code pour faire tourner mon servo dans le même sens mais cela ne fonctionne pas . Vous pouvez m’aider svp

  13. Mellon Samuel says:

    Bonjour, je suis actuellement sur un projet, et mon but et de commander une voiture RC via une application sur téléphone! Pour celà je supprime le récepteur hertziens et je le remplace par une carte Arduino. Je connais le branchement, cependant je ne connais pas de programme, aurais tu une idée à me proposer?
    Merci d’avance de ta réponse!

  14. MANIEZ tanguy says:

    Bonjour, j’aurai besoin d’aide pour la programmation de mon arduino pour mon projet de TPE, de première S SI. Je ne mis connais pas du tout en programmation mais mon servomoteur doit seulement faire un allée retour tout les 24h.
    Puis-je avoir de l’aide.
    Merci

  15. oumaima says:

    bonjour
    mon projet et de commander un bras manipulateur a 5 moteur a courant continu avec un contrôle de dégrée comment peut faire ca ?
    quelle est la meilleure méthodes pour changer le sens de rotation ?
    et quelle est la solution pour la contrôle de dégrée?

    merci

Leave a Reply

Your email address will not be published. Required fields are marked *