Le servomoteur SG90 est le micro-servomoteur de référence de l’électronique de loisir : 9 g seulement, un boîtier bleu translucide, et un axe qui vient se placer à un angle précis puis y reste, même si l’on appuie dessus. Sa course de 180° et son encombrement d’une pièce de monnaie en font le moteur que l’on choisit quand la mécanique à déplacer est légère : palonnier, aiguille, volet, pince, tête orientable de capteur, bras de robot miniature.
Un servomoteur n’est pas un moteur. Il compare en permanence la position réelle de son axe à la consigne reçue et corrige l’écart ; la consigne n’est pas un niveau de tension mais une largeur d’impulsion, envoyée toutes les 20 ms. Une seule sortie numérique de la carte suffit donc pour le piloter, et la position obtenue ne dépend ni de la charge ni de la tension d’alimentation, dans la limite du couple disponible. C’est ce qui distingue le SG90 d’un moteur continu, qu’il faut arrêter au bon moment par un capteur.
Caractéristiques techniques
| Modèle | SG90 — micro-servomoteur de position, course de 180° |
|---|---|
| Alimentation | 4,8 à 6 V continu. 5 V est la tension des montages posés sur carte |
| Couple de décrochage | Environ 1,8 kg·cm sous 4,8 V, soit la classe des 2 kg·cm |
| Vitesse | 0,1 s pour 60°, à vide |
| Course | Environ 180° au total, soit 90° de part et d’autre du neutre |
| Commande | Une impulsion toutes les 20 ms : 1,5 ms au neutre, utile de 0,5 à 2,5 ms. La position ne dépend que de la largeur d’impulsion |
| Zone morte | Environ 10 µs (5 µs selon les notices) : une consigne qui s’en écarte de moins que cela n’entraîne aucun mouvement |
| Consommation | Environ 10 mA au repos, de l’ordre de 100 à 250 mA en mouvement, jusqu’à 650 mA si l’axe est empêché de tourner |
| Engrenages | Train en nylon : léger et silencieux, c’est la pièce qui cède si l’axe est forcé à la main |
| Fils | 3 — masse (brun), alimentation (rouge), signal (orange) |
| Câble | Environ 25 cm, terminé par un connecteur femelle à 3 broches au format JR, compatible avec les prises Futaba |
| Dimensions | Environ 23 × 12 × 29 mm hors palonnier ; les notices donnent 22 × 12 × 31 mm selon la façon de mesurer. Deux pattes de fixation latérales percées d’un trou chacune |
| Poids | 9 g seul, environ 10,6 g avec son câble et son connecteur |
| Température de service | 0 à 55 °C |
| Contenu du lot | Le servomoteur, son câble trois fils et le palonnier monté sur l’axe, tel que sur la photo |
Ce que 9 grammes peuvent réellement déplacer
Un couple de 1,8 kg·cm se lit mieux en le rapportant à la longueur du bras qui porte la charge. Sur un palonnier de 1 cm, l’axe soulève environ 1,8 kg ; à 2 cm, environ 900 g ; à 5 cm, environ 360 g. La règle est simple : chaque centimètre de bras en plus divise par deux la charge possible.
Ces valeurs sont des maxima mesurés à l’arrêt de l’axe, et il faut garder de la marge. Un mécanisme qui frotte, un ressort à vaincre, un démarrage brusque consomment une part du couple, et un servo qui travaille à sa limite chauffe, siffle et finit par sauter des angles. En pratique, on dimensionne à la moitié du couple annoncé.
C’est là que se joue le choix entre deux servomoteurs de même taille. Le MG90S occupe exactement le même gabarit et les mêmes fixations, mais son train d’engrenages est métallique : il pèse 13,4 g et sort un peu plus de couple, au prix d’un bruit plus présent. Le SG90 est le bon choix pour une mécanique légère et bon marché ; le MG90S pour un axe qui forcera de temps en temps contre une butée. Les deux se pilotent avec le même programme et le même branchement.
Brochage : trois fils, trois couleurs
| Brun | La masse, à relier au GND de la carte. |
|---|---|
| Rouge | L’alimentation, de 4,8 à 6 V. Sur ce connecteur à trois broches, c’est le fil du milieu : le plus et le moins ne peuvent donc pas s’inverser en retournant la prise. |
| Orange | Le signal, à relier à une sortie numérique — D9 dans le programme ci-dessous. |
Le connecteur est femelle et ne rentre pas directement dans une plaque d’essai, dont les trous attendent des broches mâles : soit on le clipse sur trois broches mâles plantées dans la plaque, soit on le relie à la carte par un fil mâle-femelle. C’est la même prise que sur les autres servomoteurs de la boutique, si bien qu’un câble ou un palonnier acheté pour l’un se monte sur l’autre.
L’alimentation : le seul point qui décide du montage
Au repos, le SG90 ne consomme qu’une dizaine de milliampères : c’est ce qui fait croire qu’il peut se nourrir de la carte. Mais à l’instant où l’axe démarre, l’appel grimpe à quelques centaines de milliampères, et jusqu’à 650 mA si la mécanique résiste. La broche 5V de l’Arduino ne fournit pas d’énergie à elle seule : elle donne accès à ce que la carte reçoit, soit environ 500 mA sur un câble USB, partagés avec tout le reste.
Un seul SG90 se contente très bien de la broche 5V de la carte — c’est le montage du mini-projet ci-dessous, et il fonctionne. Dès qu’il y a deux servomoteurs, un mécanisme qui frotte ou un mouvement que l’on veut rapide, il faut une source dédiée. On le vérifie au symptôme : le servo saccade, l’Arduino redémarre à chaque mouvement (son témoin de veille se répète sur le port série), ou l’axe cale alors qu’il porte la charge à la main.
Pour un montage posé, l’alimentation 5 V 2 A laisse une marge très large ; sa sortie arrive sur une prise cylindrique qu’il faut ramener sur deux fils. La masse commune reste obligatoire dans tous les cas : le fil brun du servo doit rejoindre le GND de la carte, sans quoi le signal n’a plus de référence et le moteur part dans tous les sens.
Mini-projet : régler l’angle avec un potentiomètre
Le geste de base consiste à donner à l’axe l’angle lu sur un potentiomètre : on tourne le bouton, le palonnier suit. C’est le montage d’essai idéal, parce qu’il montre d’un coup d’œil que le servo suit une consigne et non une tension, et parce qu’il permet de repérer la course réellement utile de votre mécanique avant de la fixer.
Ce qu’il faut
| Le moteur | Ce servomoteur SG90, avec son palonnier |
|---|---|
| La carte | Uno R3 + câble USB, qui alimente le servo par sa broche 5 V puisqu’il n’y en a qu’un |
| La commande | Potentiomètre 10 kΩ, monté en diviseur de tension sur l’entrée A0 |
| Les liaisons | 10 × fil mâle-femelle : l’extrémité femelle se clipse sur les broches de la carte, l’extrémité mâle reçoit le connecteur du servo |
Le câblage
| Servo — brun | → GND de l’Arduino |
|---|---|
| Servo — rouge | → 5V de l’Arduino : acceptable pour ce seul servo |
| Servo — orange | → D9 de l’Arduino |
| Potentiomètre — broche de gauche | → 5V de l’Arduino |
| Potentiomètre — broche du milieu | → A0 : c’est le curseur, la seule broche qui porte la mesure |
| Potentiomètre — broche de droite | → GND de l’Arduino |
Les deux broches extérieures du potentiomètre sont interchangeables : si vous les inversez, le palonnier tournera dans l’autre sens, sans aucun risque pour le montage. La broche du milieu, elle, ne se trompe pas.
Le programme
À copier dans l’IDE Arduino, puis à téléverser sur la carte :
/*
* Regler l'angle d un micro-servo SG90 avec un potentiometre
* Carte : Arduino Uno R3 - signal du servo sur la broche D9, curseur sur A0
* Alimentation : la broche 5V de la carte suffit pour ce seul servo
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
#include "Servo.h"
Servo axe;
const byte PIN_SERVO = 9;
const byte PIN_POT = A0;
const int ANGLE_MIN = 0;
const int ANGLE_MAX = 180;
int angle = 90; // position courante du servo, au neutre au demarrage
void setup() {
axe.attach(PIN_SERVO);
axe.write(angle);
}
void loop() {
int lecture = analogRead(PIN_POT); // 0 a 1023
int cible = map(lecture, 0, 1023, ANGLE_MIN, ANGLE_MAX); // 0 a 180 degres
int ecart = cible - angle;
// On ne corrige que si lecart vaut au moins 2 degres : le servo ne fremit pas
if (abs(ecart) >= 2) {
angle = angle + (ecart / abs(ecart)); // un degre par pas, dans le bon sens
axe.write(angle);
}
delay(15);
}Comment ça marche
axe.attach(9)réserve la broche et démarre la trame de commande : la bibliothèque envoie elle-même une impulsion toutes les 20 ms, sans que la boucle principale ait à s’en occuper.analogRead()renvoie un nombre de 0 à 1023, proportionnel à l’angle du bouton ;map()le transpose directement dans la plage de 0 à 180° du servo. Les deux bornes sont nommées en tête de programme : pour n’utiliser que la plage utile de votre mécanique, par exemple 20 à 160°, il suffit de changerANGLE_MINetANGLE_MAX.- Le seuil de deux degrés : la condition ne se vérifie que si l’écart l’atteint. Un potentiomètre n’est jamais parfaitement stable, et sans cette zone morte le servo corrigerait sans arrêt un frémissement de mesure : il vibrerait et chaufferait pour rien.
ecart / abs(ecart)vaut 1 ou -1 selon le sens : le pas va toujours dans la bonne direction, sans deux branches de code à écrire.- Le
delay(15)fixe la vitesse de poursuite, un degré toutes les 15 ms, soit environ 66° par seconde. Le SG90 sait faire trois fois mieux à vide : c’est bien cette temporisation qui règle le rythme, et elle protège l’alimentation en étalant les pointes de courant.
Pour aller plus loin
Un servomoteur conserve sa consigne : il n’a pas besoin d’être réécrit en boucle, et la position se maintient toute seule. Pour une consigne plus fine que le degré, axe.writeMicroseconds(1500) adresse directement la largeur d’impulsion sans passer par la table d’angles de la bibliothèque. Et si votre mécanique bute avant la fin de course, resserrez la plage dans le programme plutôt que de laisser le moteur forcer contre sa butée.
Questions fréquentes
Puis-je alimenter le servo depuis la broche 5 V de la carte ?
Oui pour un seul SG90, c’est le montage du mini-projet, et il fonctionne sur une carte alimentée en USB. Non dès qu’il y en a deux, ou dès que la mécanique oppose une résistance : la réserve de la carte est de l’ordre de 500 mA sur câble USB, partagée avec l’électronique. Au-delà, une source dédiée et une masse commune règlent le problème.
Combien de servomoteurs puis-je piloter avec une carte ?
La bibliothèque Servo en commande jusqu’à douze sur une Uno, mais la limite réelle est le courant : la carte ne peut pas fournir l’alimentation de douze moteurs. Le montage courant passe alors par un driver I2C PCA9685 : il génère seize impulsions à partir de deux fils de données et reçoit une alimentation moteur indépendante de celle du microcontrôleur.
Peut-on le commander depuis une carte en 3,3 V ?
Oui. La commande est une largeur d’impulsion, et les microcontrôleurs modernes en 3,3 V la produisent sans adaptation. C’est l’alimentation du servo qui doit rester dans sa plage de 4,8 à 6 V, avec la masse réunie à celle de la carte.
Le servo frémit en position, sans bouger
Un frémissement de quelques degrés autour de la consigne est presque toujours une question d’alimentation : une source faible laisse la tension varier au rythme des corrections du moteur. Un léger bourdonnement permanent peut aussi venir de la charge, qui tire l’axe hors de sa position — le servo corrige alors sans arrêt. Notez enfin que la zone morte de ce modèle est d’environ 10 µs : une consigne qui s’en écarte de moins que cela n’entraîne aucun mouvement.
Pourquoi mon montage perd-il sa position au démarrage ?
Le servo prend la position que lui donne le programme à la mise sous tension. Tant que attach() n’a pas été appelé, la sortie est flottante et l’axe peut partir d’un côté. Pour un montage qui doit se placer toujours au même endroit, écrivez la position de repos dans le setup() avant la boucle, comme dans le programme ci-dessus, et vérifiez que l’alimentation tient la charge au premier mouvement.
Peut-on le faire tourner en continu ?
Non, pas dans cette version. Le SG90 de position possède une butée mécanique et un potentiomètre interne qui mesure l’angle : au-delà de sa course, il force contre la butée, consomme et chauffe sans rien déplacer. Pour un axe qui tourne en continu, il faut un servomoteur à rotation continue, dont la même commande devient une vitesse. Pour le simple va-et-vient, deux angles écrits en alternance suffisent, c’est le montage le plus courant en robotique.
À combiner avec
Le support prévu pour ce format de servo reçoit le boîtier sur sa platine et évite de percer la mécanique ; c’est la façon la plus rapide de monter un axe orientable. Pour vérifier un servo avant de le fixer, le testeur de servomoteur Gear CCPM le fait balayer et met le doigt sur un engrenage usé sans écrire une ligne de programme. Et pour un robot mobile, le support de 4 piles fournit les 6 V nominaux du modèle sans rien partager avec la carte.








