Contrôle du moteur servo : un guide complet
Points clés à retenir :
Définition du contrôle du moteur servo : Le contrôle du moteur servo permet une manipulation précise de la position, de la vitesse et de l'accélération du moteur via des signaux électroniques.
Mécanisme de rétroaction : Le système de rétroaction, souvent un potentiomètre ou un encodeur, assure que la sortie du moteur correspond précisément à l'entrée de commande.
Signal PWM : La modulation de largeur d'impulsion (PWM) est cruciale pour définir la position du servo en modulant la durée des impulsions électriques.
Arduino et les moteurs servos : L'utilisation d'une carte Arduino est une méthode populaire et efficace pour programmer et contrôler les moteurs servos avec un montage matériel minimal.
Applications des moteurs servos : Les moteurs servos sont essentiels pour les projets nécessitant un contrôle de position précis, tels que la robotique et les systèmes automatisés.
Un moteur servo est conçu pour une rotation de haute précision. Il se distingue d'un moteur DC classique par sa capacité à maintenir une position spécifique plutôt que de tourner en continu. Cette caractéristique en fait le choix idéal pour la robotique, l'automatisation et les projets de loisirs.
Cet article explique comment fonctionne le contrôle des moteurs servos, les différents types de moteurs servos, ainsi que diverses méthodes et dispositifs de contrôle. Il fournit également des exemples d'applications et de projets utilisant des moteurs servos.
Qu'est-ce qu'un moteur servo ?
Un moteur servo est défini comme un actionneur qui permet un contrôle précis de la position (angle), de la vitesse et de l'accélération. Un moteur servo typique se compose de trois composants principaux : un moteur DC, un circuit de commande et un dispositif de rétroaction.
Le moteur DC alimente le servo et est connecté à des engrenages qui réduisent la vitesse et augmentent le couple sur l'arbre de sortie.

L'arbre de sortie est la partie du servo qui tourne et déplace la charge.
Le circuit de commande est responsable de la réception et du traitement des signaux d'entrée provenant d'un contrôleur externe. Ces signaux indiquent au servo quelle position, vitesse ou direction il doit atteindre. Le circuit de commande envoie également de l'énergie au moteur DC pour le faire fonctionner.
Le dispositif de rétroaction est généralement un potentiomètre ou un encodeur qui mesure la position actuelle de l'arbre de sortie.

Le dispositif de rétroaction transmet les données de position au circuit de commande, qui ajuste ensuite l'alimentation du moteur DC pour aligner la position réelle avec la position souhaitée provenant du signal d'entrée.
La boucle de rétroaction entre le circuit de commande et le dispositif de rétroaction garantit que le servo peut se déplacer et maintenir n'importe quelle position dans sa plage de mouvement.
Comment contrôler un moteur servo ?
Les moteurs servos sont contrôlés en envoyant un signal PWM (modulation de largeur d'impulsion) à la ligne de signal du servo. La PWM est une technique qui commutent rapidement un signal pour créer des impulsions de largeurs variables. La largeur des impulsions détermine la position de l'arbre de sortie.
Par exemple, lorsque vous envoyez un signal PWM avec une largeur d'impulsion de 1,5 millisecondes (ms), le servo se déplacera vers la position neutre (90 degrés).

Lorsque vous envoyez un signal PWM avec une largeur d'impulsion de 1 ms, le servo se déplacera vers la position minimale (0 degrés). Lorsque vous envoyez un signal PWM avec une largeur d'impulsion de 2 ms, le servo se déplacera vers la position maximale (180 degrés).
Le signal PWM a une fréquence de 50 Hz, ce qui signifie qu'il se répète toutes les 20 ms. La largeur d'impulsion peut varier de 1 ms à 2 ms au cours de cette période.
Il existe de nombreuses façons de générer et d'envoyer des signaux PWM aux moteurs servos. Certaines des méthodes les plus courantes sont :
Utiliser une carte Arduino ou un autre microcontrôleur
Utiliser un potentiomètre ou un autre capteur analogique
Utiliser un joystick ou un autre dispositif d'entrée numérique
Utiliser un contrôleur ou un pilote de servo dédié
Dans les sections suivantes, nous explorerons chacune de ces méthodes en détail et verrons quelques exemples de leur fonctionnement.
Contrôler un moteur servo avec Arduino
Arduino est l'une des plateformes les plus populaires pour contrôler les moteurs servos. Les cartes Arduino ont des sorties PWM intégrées qui peuvent être utilisées pour envoyer des signaux aux servos. Arduino dispose également d'une bibliothèque Servo qui facilite la rédaction de code pour le contrôle des servos.
Pour contrôler un moteur servo avec Arduino, vous aurez besoin de :
Une carte Arduino (comme l'Arduino UNO)
Un moteur servo standard (comme le SG90)
Des fils de connexion
Une plaque d'essai (facultatif)
Le fil rouge du servo se connecte à 5V sur la carte Arduino. Le fil noir du servo se connecte à GND sur la carte Arduino. Le fil blanc du servo se connecte à la broche 9 sur la carte Arduino.
Pour programmer la carte Arduino, vous devrez utiliser l'IDE Arduino (en ligne ou hors ligne). Vous pouvez utiliser l'un des exemples de la bibliothèque Servo ou rédiger votre propre code.
Le code suivant montre comment balayer un moteur servo de 0 à 180 degrés en utilisant une boucle for :
#include <Servo.h> // Inclure la bibliothèque Servo
Servo myservo; // Créer un objet Servo
int pos = 0; // Variable pour la position
void setup() {
myservo.attach(9); // Attacher l'objet Servo à la broche 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Boucle de 0 à 180 degrés
myservo.write(pos); // Écrire la position à l'objet Servo
delay(15); // Attendre 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Boucle de 180 à 0 degrés
myservo.write(pos); // Écrire la position à l'objet Servo
delay(15); // Attendre 15 ms
}
}
Ce code utilise deux boucles pour incrémenter et décrémenter la variable de position de 0 à 180 degrés et vice versa. Il écrit ensuite cette valeur à l'objet Servo en utilisant myservo.write(pos). Il ajoute également un délai de 15 ms entre chaque étape pour ralentir le mouvement.
Téléchargez ce code sur votre carte Arduino en utilisant le bouton Upload de l'IDE, et observez votre moteur servo balayer doucement de 0 à 180 degrés.
Contrôler un moteur servo avec un potentiomètre
Un potentiomètre est un capteur analogique dont la résistance peut varier en fonction de la rotation de son curseur. Vous pouvez utiliser un potentiomètre comme dispositif d'entrée pour contrôler un moteur servo.
Pour contrôler un moteur servo avec un potentiomètre, vous aurez besoin de :
Une carte Arduino (comme l'Arduino UNO)
Un moteur servo standard (comme le SG90)
Un potentiomètre (10k Ohms)
Des fils de connexion
Une plaque d'essai
Le schéma de câblage pour connecter un potentiomètre et un moteur servo à une carte Arduino est montré ci-dessous :
Le fil rouge du potentiomètre se connecte à 5V sur la carte Arduino. Le fil noir du potentiomètre se connecte à GND sur la carte Arduino. Le fil vert du potentiomètre se connecte à la broche A0 sur la carte Arduino.
Le fil rouge du servo se connecte à 5V sur une autre rangée de la plaque d'essai. Le fil noir du servo se connecte à GND sur une autre rangée de la plaque d'essai. Le fil blanc du servo se connecte à la broche D9 sur une autre rangée de la plaque d'essai.
Pour programmer votre carte Arduino, vous devrez utiliser le même code que dans l'exemple précédent, mais modifier quelques lignes :
#include <Servo.h> // Inclure la bibliothèque Servo
Servo myservo; // Créer un objet Servo
int potpin = A0; // Broche connectée au potentiomètre
int val = 0; // Variable pour lire la valeur du potentiomètre
void setup() {
myservo.attach(9); // Attacher l'objet Servo à la broche D9
}
void loop() {
val = analogRead(potpin); // Lire la valeur du potentiomètre (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Mapper la plage de valeurs (0 - 180)
myservo.write(val); // Écrire la valeur mappée à l'objet Servo
delay(15); // Attendre 15 ms
}
Ce code utilise la fonction analogRead(potpin) pour lire la valeur du potentiomètre connecté à la broche A0. Il utilise ensuite la fonction map(val, 0, 1023, 0, 180) pour mapper la plage de valeurs de 0 à 1023 degrés. Il écrit ensuite la valeur mappée à l'objet Servo en utilisant la fonction myservo.write(val). Il ajoute également un délai de 15 ms, comme dans l'exemple précédent.
Vous pouvez télécharger ce code sur votre carte Arduino en utilisant le bouton Upload de l'IDE. Vous devriez voir votre moteur servo se déplacer selon la position du curseur du potentiomètre.
Contrôler un moteur servo avec un joystick
Un joystick est un dispositif d'entrée numérique capable de détecter la direction et l'amplitude du mouvement le long de deux axes. Vous pouvez utiliser un joystick pour contrôler un moteur servo en mappant l'axe x du joystick à l'angle du servo.
Pour contrôler un moteur servo avec un joystick, vous aurez besoin des éléments suivants :
Une carte Arduino (comme l'Arduino UNO)
Un moteur servo standard (comme le SG90)
Un module joystick (comme le KY-023)
Des fils de connexion
Une plaque d'essai
Le schéma de câblage pour connecter un module joystick et un moteur servo à une carte Arduino est montré ci-dessous :
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
Le fil rouge du module joystick se connecte à 5V sur la carte Arduino. Le fil noir du module joystick se connecte à GND sur la carte Arduino. Le fil vert du module joystick se connecte à la broche A0 sur la carte Arduino.
Le fil rouge du servo se connecte à 5V sur une autre rangée de la plaque d'essai. Le fil noir du servo se connecte à GND sur une autre rangée de la plaque d'essai. Le fil blanc du servo se connecte à la broche D9 sur une autre rangée de la plaque d'essai.
Pour programmer votre carte Arduino, vous devrez utiliser le même code que dans l'exemple précédent, mais modifier quelques lignes :
#include <Servo.h> // Inclure la bibliothèque Servo
Servo myservo; // Créer un objet Servo
int joyX = A0; // Broche connectée à l'axe x du joystick
int val = 0; // Variable pour lire la valeur du joystick
void setup() {
myservo.attach(9); // Attacher l'objet Servo à la broche 9
}
void loop() {
val = analogRead(joyX); // Lire la valeur de l'axe x du joystick (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Mapper la plage de valeurs (0 - 180)
myservo.write(val); // Écrire la valeur mappée à l'objet Servo
delay(15); // Attendre 15 ms
}
Ce code utilise la fonction analogRead(joyX) pour lire la valeur de l'axe x du joystick connecté à la broche A0. Il utilise ensuite la fonction map(val, 0, 1023, 0, 180) pour mapper la plage de valeurs de 0 à 1023 à 0 à 180 degrés. Il écrit ensuite cette valeur à l'