Accueil > Arduino, Matériel > Utilisation du servomoteur SG90 avec l’Arduino

Utilisation du servomoteur SG90 avec l’Arduino

Aujourd’hui, on va tester l’utilisation de servomoteurs; mon choix s’est porté sur un modèle Tower Pro SG90 :

image

Photo du site “www.mchobby.be, vente de kit et composant pour Arduino/Raspberry”

Les caractéristiques du SG90 sont les suivantes :

– Dimensions : 22 x 11.5 x 27 mm.

– Poids : 9 gr.

– Tension d’alimentation : 4.8v à 6v.

– Vitesse : 0.12 s / 60° sous 4.8v.

– Couple : 1.2 Kg / cm sous 4.8v.

– Amplitude : de 0 à 180°.

 

Le servo est équipé d’une prise de type Graupner à 3 fils.

La correspondance des fils est la suivante :

Marron masse
Rouge + 5v
Orange commande

Ce type de servomoteur peut être branché directement sur l’Arduino. Par exemple le branchement pourra être le suivant :

image

Pour piloter un servomoteur, Arduino fournit une librairie de nom ‘Servo’ qui simplifie l’utilisation de celui-ci.

Avant toute utilisation d’un servomoteur, il va être nécessaire de comprendre son fonctionnement et ses limites. La première étape est d’initialiser le servomoteur avec un angle de 0° à l’aide de ce programme :

// Test utilisation servomoteur SG90 //

#include <Servo.h>
 
Servo monservo;  // crée l’objet pour contrôler le servomoteur
 
void setup()
{
  monservo.attach(9);  // utilise la broche 9 pour le contrôle du servomoteur
  monservo.write(0); // positionne le servomoteur à 0°
}
 
 
void loop()

}

Maintenant que l’on a la position 0°, vous pouvez y fixer un palonnier qui va vous servir de repère.

Ce servomoteur à une amplitude de 0° à 180°; bon on va essayer de le positionner à 180° avec ce programme :

// Test utilisation servomoteur SG90 //

#include <Servo.h>
 
Servo monservo;  // crée l’objet pour contrôler le servomoteur
 
void setup()
{
  monservo.attach(9);  // utilise la broche 9 pour le contrôle du servomoteur
  monservo.write(180); // positionne le servomoteur à 180°
}
 
 
void loop()

}

Si vous prenez le servomoteur dans votre main, on ressent une vibration car en fait il est arrivé en butée; cela n’est pas bon pour l’électronique embarqué dans le servomoteur. Il va donc être nécessaire de découvrir l’angle à adapter pour effectuer véritablement un 180° sans arriver en butée.

Pour ma part, je suis arrivé à une valeur de 150°. Et pour effectuer un angle de 90°, je dois indiquer une valeur de 70°. Voici un petit exemple de programme qui permet de valider cela :

// Test utilisation servomoteur SG90 //

#include <Servo.h>
 
Servo monservo;  // crée l’objet pour contrôler le servomoteur
 
void setup()
{
  monservo.attach(9);  // utilise la broche 9 pour le contrôle du servomoteur
  monservo.write(0); // positionne le servomoteur à 0°
}
 
 
void loop()
{
  monservo.write(0);
  delay(1000);
  monservo.write(70);
  delay(1000);
  monservo.write(150);
  delay(1000);
}

Voilà c’est tout pour le moment.

Catégories :Arduino, Matériel Étiquettes : , ,
  1. 12/05/2013 à 23:55

    Bonjour, l’image et certaines des caractéristiques proviennent du site (webshop et ou wiki) de MCHobby. Nous faisons du traitement d’image assez détaillé pour une intégration parfaite avec notre WebShop 🙂 Merci de référencer votre source en utilisant la mention:

    « www.mchobby.be, vente de kit et composant pour Arduino/Raspberry.  »

    Echange de bon procédé 🙂

  2. 17/05/2015 à 02:45

    svp je besion d’un code pour avancer deux moteur avec arduino ,shield motor ,ultrason HC_sr04,serveau moteur tower pro SG90, j’ai un code et je veux ajouté le serveaumoteur pour mon code ,aidez moi svp ;voila mon code :

    #include

    #define TRIGGER_PIN 5
    #define ECHO_PIN 6

    Ultrasonic ultrasonic(TRIGGER_PIN, ECHO_PIN);

    // variable moteur droit
    const int IN1=2;
    const int IN2=4;
    const int ENABLE1=3;

    // variable moteur gauche
    const int IN3=12;
    const int IN4=13;
    const int ENABLE2=11;

    void setup()
    {
    Serial.begin(9600);
    // intialisation moteur droit
    pinMode (IN1,OUTPUT);
    pinMode (IN2,OUTPUT);
    pinMode (ENABLE1,OUTPUT);
    // initialisation moteur gauche
    pinMode (IN3,OUTPUT);
    pinMode (IN4,OUTPUT);
    pinMode (ENABLE2,OUTPUT);
    }

    void loop()
    {
    float cmMsec, inMsec;
    long microsec = ultrasonic.timing();

    cmMsec = ultrasonic.convert(microsec, Ultrasonic::CM);
    inMsec = ultrasonic.convert(microsec, Ultrasonic::IN);
    Serial.print(« CM: « );
    Serial.print(cmMsec);
    delay(30);

    if (cmMsec < 20)
    {
    //tourne
    digitalWrite(ENABLE1,HIGH);
    digitalWrite(ENABLE2,LOW);
    digitalWrite(IN1,LOW); // MOTEUR GAUCHE sens 1
    digitalWrite(IN2,HIGH);
    digitalWrite(IN3,HIGH); // MOTEUR DROIT sens 1
    digitalWrite(IN4,LOW);
    delay(300);
    }
    else
    {
    //avance
    digitalWrite(ENABLE1,HIGH);
    digitalWrite(ENABLE2,HIGH);
    digitalWrite(IN1,HIGH); // MOTEUR DROIT sens 1
    digitalWrite(IN2,LOW);
    digitalWrite(IN3,LOW); // MOTEUR GAUCHE sens 1
    digitalWrite(IN4,HIGH);
    delay(300);

    }
    }

    • root
      28/02/2018 à 15:02

      surveille ton orthographe ,please.

  3. paralaile
    01/03/2018 à 15:16

    ENFIN!!!! un code simple et des explications simples pour tester servos, énorme merci. Dominique

  4. Bruno
    18/11/2018 à 09:52

    Bonjour,
    et tout d’abord merci pour vos articles sur lesquels je suis arrivé en cherchant une solution à mon projet.
    J’ai besoin de commander une dizaine de servos à l’aide de signaux analogiques variant entre 0 et X volt (d’après ce que j’ai compris, les arduinos ne tolèrent que jusqu’à 5v (?) )
    Le but étant de commander, à l’aide des servos, des potentiomètres de réglage précis.
    Je peux me contenter des 180° des servos les moins chers (SG90), et je pense avoir compris la connectique sur un Mega, mais par contre, je n’y connais rien dans la programation des arduinos…
    Pouriez-vous m’aider svp?
    d’avance un grand Merci et bonne continuation 🙂
    Bruno

  5. 07/08/2019 à 14:55

    A noter au passage que ce tuto s’applique pour 90% des servos analogiques et numeriques type hobby du marché. Les servos ‘pros’ ont une interface serie en revanche.
    A rajouter aussi, au delas de 1 a 2 servos, prevoir une alim externe. Prevoir aussi une extension pour controller plus de 8 servos (la lib arduino est incapable de timer les pulses correctement au dela)

  1. 24/05/2013 à 08:56
  2. 27/05/2014 à 12:12

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

%d blogueurs aiment cette page :