Actionner un servomoteur et ensuite le commander avec un potentiomètre.

Ce tutoriel sera subdivisé en des sous-parties pour vous permettre de bien appréhender le fonctionnement du servomoteur.

Plan à suivre

  • Préambule
  • Que savoir sur le micro servo SG90 ?
  • Matériels
  • Exemple de câblage du micro servo SG90
  • Exemple de code pour le micro servo SG90

1.Préambule

Un servomoteur est un système qui a pour but de produire un mouvement précis en réponse à une commande externe. C’est un actionneur (système produisant une action) qui mélange l’électronique, la mécanique et l’automatique.
Un servomoteur est composé :
– d’un moteur à courant continu ;
– d’un axe de rotation ;
– d’un capteur de position de l’angle d’orientation de l’axe (très souvent un potentiomètre) ;
– d’une carte électronique pour le contrôle de la position de l’axe et le pilotage du moteur à courant continu.
Un servomoteur est capable d’atteindre des positions prédéterminées dans les instructions qui lui ont été données, puis de les maintenir.
Le servomoteur a l’avantage d’être asservi en position angulaire, cela signifie que l’axe de sortie du servomoteur respectera la consigne d’instruction que vous lui avez envoyé en son entrée.
Même si un obstacle si tiens sur la route, qui viendrait à lui faire changer l’orientation de sa trajectoire, le servomoteur essayera de conserver la position. Contrairement aux moteurs à courant continu qui peuvent tourner continuellement, on distingue des servos faisant :

  • un demi-tour (0° à 180°) ;
  • un tour complet (0°à 360°) ;
  • plusieurs tours.

Dans ce tutoriel, nous utiliserons la première gamme : celle faisant un demi-tour.
En réalité, dans un servomoteur, le petit moteur à courant continu est relié à un réducteur (des engrenages) dont l’objectif est de réduire la vitesse et d’augmenter le couple (puissance), d’un potentiomètre qui permet au servo de garder l’angle d’inclinaison choisit.

  • Couple (puissance) :

Le couple exprimé en kg.cm (kilogramme. centimètre) indique la relation entre la longueur du bras du servomoteur et la force exercée sur le bras du servomoteur (la force représente le poids de l’objet qu’on désire mettre en mouvement).
Ainsi si l’on veut déplacer une charge de 3kg situé à 1cm de l’axe du servomoteur, un servo de couple  3kg.cm suffira. Par contre si l’on veut déplacer cette même charge mais à 10 cm de l’axe du servomoteur, il faudra un servomoteur de couple 30kg.cm.

  • Calcul du couple

De l’exemple précédent on déduit la formule du calcul du couple :

C=M*D

Avec

-C = le couple du servomoteur (kg.cm) ;

-M = le poids de la charge à déplacer (kg)

-D= la distance entre la charge et l’axe de rotation du servomoteur(cm)

  • Réducteur (engrenage)

Un engrenage est une roue dentée qui en tournant, entraîne (engrène) une autre roue dentée aussi.Si la première roue dentée tourne dans un sens, la seconde tournera dans l’autre sens. On peut donc dire que le sens de rotation s’inverse d’une roue à l’autre dans un engrenage.

-Si les deux roues dentées ne font pas la même taille, la vitesse de rotation de chaque roue sera différente. En effet si la première roue a 10 dents, et la seconde 30 dents, la première effectuera 3 tours alors que la seconde n’en fera qu’un (10 dents* 3 tours= 30 dents).

-La conséquence de la différence de taille entre deux roues (la petite appelée pignon) est que la transmission du mouvement gagne en puissance (couple) de la petite vers la grande roue.

  • Si l’on désire accélérer le mouvement, le moteur doit entraîner la grande roue qui entraînera la petite. Dans ce cas la puissance de rotation (le couple) de l’axe de la petite roue sera plus faible.
  • Si l’on désire gagner en couple, le moteur doit entraîner la petite roue qui entraînera la grande. Dans ce cas, vous perdrez de la vitesse.

Ainsi dans le réducteur, il y a une petite roue dentée reliée au moteur à courant continu qui en tournant entraîne une autre roue dentée ayant un nombre de dent plus élevé. Donc la petite roue en tournant plus vite que l’autre lui transmet sa vitesse qu’elle transforme en couple. C’est la seconde roue qui va entraîner l’axe de rotation du servomoteur.
Le réducteur permet donc de perdre en vitesse pour gagner en puissance.

  • Le capteur de position de l’angle d’orientation de l’axe (très souvent un potentiomètre) envoie la position de l’axe à un comparateur qui la compare à la commande assignée afin d’agir en conséquence (C’est la partie électronique qui se charge de la comparaison). En effet le curseur du potentiomètre bouge en fonction de la position du moteur. Ce qui fait du servomoteur un système d’asservissement (l’asservissement est un moyen de gérer une consigne de régulation selon une commande d’entrée).

La commande est constituée des impulsions carrées sur une durée allant de 1ms à 2ms.

Figure : signaux de commande d’un servo moteur

2.Que savoir sur le micro servo SG90 ?

Caractéristiques :

  • Modulation : Analogique
  • Couple : 4.8V (1.6 kg-cm)
  • Vitesse : 4.8V 0.1 sec/60°
  • Poids : 9g
  • Dimensions : 23mm x 12.2mm x 29 mm
  • Angle de rotation : 180°
  • Connectique : Connecteur 3 points
  • Contient : boîtier de direction, culbuteur, vis, etc.

Présentation du micro servo SG90

Figure :Servomoteur

3.Matériels

Pour réaliser notre petit test, nous aurons besoin des matériels suivants :

  • Une carte arduino UNO

Un micro servo SG90

Un potentiomètre

Des fils de connexion

Tous ces matériels sont disponibles chez Youpilab  https://youpilab.com

4.Exemple de câblage du micro servo SG90

Afin de pouvoir faire le test, je vous propose ces 2 schémas réalisés dans fritzing.

  • Le premier fera tourner dans les deux sens le servomoteur sans cesse
  • Le second fera tourner le moteur suivant le réglage du potentiomètre.

Schéma 1 : câblage sans potentiomètre

Vu de dos, la borne complètement à gauche du potentiomètre représente le GND et celle à droite le VCC. La broche du milieu est celle reliée à l’Arduino pour envoyer les valeurs.

Schéma 2 : avec potentiomètre
Figures : câblage dans fritzing

5.Exemple de codes pour le micro servo SG90

Le code 1 correspond au schéma 1   et le code 2 au schéma 2
Etant donné que l’on doit envoyer une impulsion de durée comprise entre 1ms et 2ms ( pour envoyer des commandes d’angle ), il nous faudra convertir l’angle en tension.
Pour le faire, nous utiliserons la fonction arduino « map »
Définition de la fonction  :

map (compte, min, max, transMin, transMax) ;

Avec :

  • compte : la valeur que vous voulez transformer (l’angle dans notre cas)
  • min et  max :la plage de valeurs (le minimum et le maximum qu’elle peut prendre, soit ici 0° et 179°)
  • transMin et  transMax : c’est la plage de valeurs dans laquelle on doit transformer le compte  (ici 1ms et 2ms)

Pour le fonctionnement, il y a aussi une bibliothèque « servo.h » inclut dans arduino qui permet de contrôler le servomoteur.

Code Arduino  //vous pouvez directement le copier dans votre IDE Arduino

  • Code 1:

/*Commande d’un servomoteur*/
int periode=20000;// période entre chaque début d’impulsion en microsecondes
int pinServo=8; // variable pour le pin connecté à la commande du servo
void setup() {
pinMode(pinServo,OUTPUT);// on define le pin comme une sortie
digitalWrite(pinServo,LOW); // on l’initialise à l’état bas
}
//boucle principale
void loop() {
for (int angle=0;angle<=180;angle+=10){//on fait varier l’angle de 0 à 180° par tranche de 10°
tourner(angle);// on appelle la fonction tourner définie plus bas
}
}
//fonction tourner pour envoyer les impulsions
void tourner(int a){
int duree=map(a,0,179,1000,2000);// on transforme l’angle en microsecondes et on stocke dans la variable duree
digitalWrite(pinServo,LOW);//on met le pin à l’état bas
// la boucle qui suit est nécessaire
// pour laisser le temps au servo d’aller à sa position. si vous n’utiliser pas la boucle, le servo n’aura //pas le temps d’aller à la position indiquée avant d’exécuté une autre action donc vous ne verrez rien
for (int t=0;t<300;t++){
digitalWrite(pinServo,HIGH);// on envoie l’impulsion
delayMicroseconds(duree); // pendant la bonne durée
digitalWrite(pinServo,LOW); // on stoppe l’impulsion
delayMicroseconds(periode-duree); // on attend le temps restant pour atteindre la période
}
}

Remarque

  • Si le servomoteur ne revient pas à sa position de 0° : il faut alors augmenter le nombre de boucles effectuées par le compteur « t » dans la fonction tourner().  En effet, si la vitesse de rotation de votre servo ne lui permet pas d’atteindre le zéro en 300 boucles, il lui faut plus de temps.
  • Si le servomoteur ne parcourt pas un demi-tour complet : il faut alors changer les valeurs dans le mappage. En effet, tous les servos ne sont pas réglés de manière identique. Par exemple, pour celui que nous utilisons sur ce test, les valeurs 1 000 et 2 000 sont remplacés par 500 et 2 500 respectivement.

Pour le second code, nous utiliserons la fonction servo inclue dans Arduino.

Code Arduino  //vous pouvez directement le copier dans votre IDE Arduino

Code 2

/*Guider un servomoteur avec un potetiomètre*/

#include <Servo.h> //on inclut la bibliothèque servo.h

Servo mon_moteur; // on crée l’objet mon_moteur

int pot_entree = A0; // on met l’entrée du potentiomètre sur le pin A0;
int val; // variable qui lira la valeur envoyée par le potentiomètre

void setup() {
mon_moteur.attach(8); //on appelle la fonction attache de l’ojet
//mon_moteur et on lui envoie en paramètre le pin du servomoteur
}

void loop() {
val = analogRead(pot_entree);// on lit la valeur du potentiomètre (qui se trouve entre 0 et 1023)
val = map(val, 0, 1023, 0, 180);// on transforme la valeur en un angle
mon_moteur.write(val);// on envoie la valeur val à la fonction
delay(15);// on attend le temps que le servomoteur recoive l’instruction
}

Test :

Schéma 1 :

Schéma 2 :

Figure : câblage dans la réalité

Si tout a été bien fait, après téléversement du code dans la carte Arduino, vous devriez constater le résultat attendu.

Merci d’avoir suivi ce tutoriel.  A bientôt !!!

Les détails ne sont pas renseignés

0.00 average based on 0 ratings

5 Star
0%
4 Star
0%
3 Star
0%
2 Star
0%
1 Star
0%

Course Features

  • Duration : 10 week
  • Max Students : 1000
  • Enrolled : 0
  • Re-take Course : 0
  • Assessments : Self
Price :
Gratuit

Rating

Average Rating: 0.00

Star
0%
Star
0%
Star
0%
Star
0%
Star
0%

Leave a Comment