Les servomoteurs sont des composants incontournables en électronique et en robotique. On les retrouve dans de nombreuses applications telles que les drones, les bras robotisés, les robots mobiles, les véhicules radiocommandés, les caméras motorisées et de nombreux systèmes autonomes.
Contrairement à un moteur à courant continu classique qui tourne en continu, un servomoteur est capable de se positionner avec précision à un angle donné. Cette capacité en fait un élément essentiel lorsqu’il est nécessaire de contrôler précisément un mouvement.
Dans ce tutoriel, nous allons apprendre à contrôler un servomoteur MG996R à l’aide d’un Arduino Uno et d’un potentiomètre 10 kΩ. En tournant le potentiomètre, le servomoteur se déplacera progressivement entre 0° et 180°.
Matériel nécessaire
- Arduino Uno
- Alimentation externe 5V (2-3A)
- Servomoteur MG996R
- Potentiomètre 10 kΩ
- Breadboard
- Câbles mâles (8 pour le montage)
- (Optionnel) Condensateur 1000 µF pour stabiliser l’alimentation du servo
- (Optionnel) Compas découpé au laser en carton ou en bois
- (Optionnel) Flèche découpée au laser en carton ou en bois
- (Optionnel) Vis diamètre 3 mm longueur 15 mm × 2
- (Optionnel) Écrou diamètre 3 mm × 2
Schéma de câblage
| Composant | Arduino |
|---|---|
| Potentiomètre OUT | A0 |
| Potentiomètre VCC | 5V |
| Potentiomètre GND | GND |
| Signal Servo | D9 |
| VCC Servo | 5V (externe) |
| GND Servo | GND commun |

⚠️ Le MG996R peut consommer jusqu’à 2.5 A : ne pas l’alimenter directement depuis l’Arduino. Utilise une alimentation externe 5V bien régulée, et connecte sa masse à celle de l’Arduino.
Fonctionnement d’un servomoteur
Un servomoteur est un système asservi, c’est-à-dire qu’il est capable de mesurer en permanence la position de son axe afin de la comparer à la position demandée.
Contrairement à un moteur classique, un servomoteur intègre plusieurs éléments dans un même boîtier :
- Un moteur à courant continu (DC) qui produit le mouvement.
- Un train d’engrenages qui réduit la vitesse et augmente le couple.
- Un potentiomètre interne qui mesure en permanence la position de l’axe.
- Une électronique de contrôle qui compare la position actuelle à la position souhaitée.
Lorsque l’Arduino envoie une consigne sous la forme d’un signal PWM, l’électronique du servomoteur compare la position demandée avec celle mesurée par le potentiomètre.
- Si l’axe n’est pas à la bonne position, le moteur tourne dans le sens nécessaire.
- Dès que la position souhaitée est atteinte, le moteur s’arrête automatiquement.
- Si une force extérieure déplace l’axe, le servomoteur corrige immédiatement sa position.
Cette boucle de rétroaction permet au servomoteur d’obtenir un positionnement précis, une excellente répétabilité et un maintien de la position même sous contrainte.

Le signal PWM
La majorité des servomoteurs se commandent grâce à un signal PWM d’une fréquence d’environ 50 Hz (une période de 20 ms).
La largeur de l’impulsion détermine l’angle demandé :
| Largeur d’impulsion | Position approximative |
|---|---|
| 1,0 ms | 0° |
| 1,5 ms | 90° |
| 2,0 ms | 180° |
La bibliothèque Servo.h d’Arduino se charge automatiquement de générer ce signal. Il suffit d’indiquer l’angle souhaité :
myServo.write(angle);
Avantages d’un servomoteur
- Positionnement précis de l’axe.
- Couple élevé grâce au réducteur mécanique.
- Maintien automatique de la position.
- Commande simple avec un seul signal PWM.
- Faible encombrement.
- Idéal pour la robotique, les drones et les projets Arduino.
Code Arduino
#include <Servo.h>
Servo myServo;
const int potPin = 0;
int potValue = 0;
int angle = 0;
void setup() {
myServo.attach(9);
}
void loop() {
potValue = analogRead(potPin);
angle = map(potValue, 0, 1023, 0, 180);
myServo.write(angle);
delay(15);
}
Composants et assemblage
Potentiomètre 10 kΩ

Le pin de gauche : +5V, pin du milieu : signal (donnée), pin de droite : GND.
Servomoteur MG996R

Il est important d’utiliser une alimentation externe de 5V entre 1 et 3 A.
Compas, vis et écrous

Le compas a été découpé dans du contreplaqué de 3 mm à l’aide d’une découpeuse laser. Si vous n’avez pas accès à une découpeuse laser, vous pouvez le réaliser en carton en imprimant le modèle sur du papier.
Le modèle se trouve dans le dépôt GitHub :
Schéma/compas.svg.Pour la flèche, j’ai utilisé du carton découpé au laser, car le contreplaqué de 3 mm est trop épais pour fixer correctement la vis de l’attache du servomoteur.
Vis : diamètre 3 mm, longueur 15 mm × 2. Écrous : diamètre 3 mm × 2.
Arduino Uno

Breadboard

Alimentation 5V 3A

Dans ce projet, l’alimentation externe 5V 3A est connectée à la breadboard via les lignes +5V et GND, ce qui permet d’alimenter l’ensemble des composants du montage, y compris l’Arduino Uno.
Condensateur 1000 µF

Le condensateur est optionnel mais recommandé. Branchez-le directement sur la breadboard entre +5V et GND.
Montage final

Astuce
Ajoute un condensateur de 1000 µF entre le +5V et GND de l’alimentation du servo pour éviter les variations de tension qui peuvent provoquer des mouvements imprévus ou des resets de l’Arduino.