Composant · Actionneur
SG90 Servo Motor
Le SG90 est le minuscule servo 9 g des articulations et directions de robots débutants. Tenue d'un angle, charge soulevée, et pilotage.
Présentation
Le SG90 est un micro servomoteur : un petit actionneur autonome qui tourne vers un angle commandé et l’y tient. Là où un moteur à courant continu simple tourne, un servo vise — dites-lui « 90 degrés » et il va à 90 degrés et résiste quand on le pousse. Cela en fait le choix naturel pour tout ce qui doit aller à une position connue : une articulation de bras robotique, une pince qui s’ouvre et se ferme, une monture pan-tilt pour caméra, ou la direction d’un petit rover.
À neuf grammes et quelques dollars, c’est le servo par lequel presque tous commencent. Pas assez fort ni précis pour du travail sérieux, mais le moyen le plus rapide de comprendre concrètement le contrôle de position.
Fonctionnement
Ouvrez-en un et vous trouvez quatre choses : un petit moteur à courant continu, un train d’engrenages qui échange vitesse contre couple, un potentiomètre lié à l’arbre de sortie, et un circuit de commande. Le potentiomètre est l’astuce — il rapporte en continu l’angle réel de l’arbre. Le circuit compare cet angle mesuré à l’angle commandé et pilote le moteur dans le sens qui comble l’écart. C’est une boucle de rétroaction complète en miniature, et c’est exactement pourquoi le bras à cinématique inverse peut compter sur un servo pour atteindre une pose cible.
Vous commandez l’angle avec un signal PWM 50 Hz, et la largeur d’impulsion porte le message : environ 1 ms pour une fin de course, 1,5 ms pour le centre, 2 ms pour l’autre fin. C’est du PWM utilisé comme code de position plutôt que code de vitesse. En pratique, la bibliothèque Servo de l’Arduino cache la temporisation et vous écrivez juste un angle.
Quand l’utiliser
Utilisez un SG90 dès qu’une pièce de robot doit aller et tenir un angle précis en charge légère : doigts de pince, petites articulations de bras, tourelles de capteurs, ou la tringlerie de direction d’une petite voiture. Sa plage ~180° et sa commande instantanée « va à cet angle » sont idéales pour apprendre la cinématique et construire des mécanismes expressifs.
Regardez ailleurs quand l’articulation porte un vrai poids (prenez un servo à engrenages métal ou taille standard), quand il faut une rotation continue pour une roue (prenez un moteur à courant continu et un L298N, ou un servo à rotation continue), ou quand il faut beaucoup de degrés de mouvement précis à fort couple (prenez un moteur pas à pas).
Câblage et pièges
- Alimentez-le séparément. Un SG90 en blocage peut tirer 500–700 mA — bien plus que la broche 5 V d’un microcontrôleur. Utilisez une alimentation 5 V dédiée et reliez sa masse à celle de la carte, ou la carte décroche et redémarre.
- Ce n’est pas une rotation continue. Un SG90 standard parcourt ~180° et s’arrête. Commander « tourne pour toujours » ne fait rien ; pour une roue motrice, il faut un autre actionneur.
- Ne le forcez pas ni ne le bloquez. Les engrenages nylon s’arrachent en surcharge ou choc franc. Gardez des charges légères, ou passez aux engrenages métal.
- Attendez-vous à un peu de tremblement. Les servos économiques chassent légèrement autour de la cible. Une alimentation stable et propre et détacher le signal quand l’articulation n’a pas besoin de tenir réduisent cela.
Câblage
Trois fils, et les couleurs sont quasi universelles sur les servos hobby :
| Fil | Couleur (SG90) | Rôle |
|---|---|---|
| 1 | Marron | Masse |
| 2 | Rouge | Alimentation, 4,8–6 V |
| 3 | Orange | Signal — le PWM 50 Hz |
Certains servos utilisent noir/rouge/blanc ou noir/rouge/jaune. La règle qui tient toujours : le rouge est au milieu, et la masse est le plus sombre des trois.
| SG90 | Arduino Uno | Note |
|---|---|---|
| Marron | GND | Doit être commune avec la masse de l’alimentation du servo |
| Rouge | Pas le 5 V de l’Arduino | Une alimentation 5 V séparée — voir ci-dessous |
| Orange | Toute broche numérique | La bibliothèque Servo marche sur toute broche |
Pourquoi pas la broche 5 V de l’Arduino
Un SG90 tire environ 10 mA au repos, 150–250 mA en mouvement, et 650 mA bloqué. L’alimentation USB d’un Uno est limitée à 500 mA pour toute la carte, et le régulateur embarqué en alimentation par jack a sa propre limite thermique.
Un servo bougeant doucement marche souvent, et c’est exactement le problème : cela marche sur l’établi puis décroche dès que le servo rencontre une résistance. Le symptôme est une carte qui redémarre quand le bras atteint une position donnée — ce qui se lit comme un bogue logiciel.
Donnez-lui sa propre alimentation 5 V, reliez les masses, et mettez un condensateur 470 µF sur l’ alimentation du servo près du connecteur.
La relation largeur d’impulsion vers angle
Un servo ne lit pas la tension. Il lit la durée de l’impulsion, cinquante fois par seconde.
| Largeur d’impulsion | Angle nominal | Ce que fait vraiment le SG90 |
|---|---|---|
| 1,0 ms | 0° | S’arrête souvent 10–15° avant |
| 1,5 ms | 90° | Centre, et généralement juste |
| 2,0 ms | 180° | S’arrête souvent 10–15° avant |
| < 0,5 ms ou > 2,5 ms | — | Bourdonne contre une butée, en tirant du courant de blocage |
La plage 1–2 ms est une convention, pas une norme. Beaucoup de SG90 atteignent leurs vraies butées
plus près de 0,6 ms et 2,4 ms, c’est pourquoi le attach() de la bibliothèque Servo de l’Arduino prend
des largeurs d’impulsion min et max optionnelles :
servo.attach(9, 600, 2400); // instead of the 544/2400 defaults
Étalonner cela par servo est la différence entre un bras qui atteint son espace de travail et un mystérieusement court de 20° aux deux bouts.
Code minimal fonctionnel
#include <Servo.h>
Servo joint;
const int PIN = 9;
void setup() {
joint.attach(PIN, 600, 2400); // calibrate these two numbers per servo
joint.write(90); // centre before doing anything else
delay(500);
}
// Move gently instead of jumping — a servo commanded to jump goes at full speed.
void sweepTo(int target, int stepDelayMs) {
int current = joint.read();
int step = (target > current) ? 1 : -1;
while (current != target) {
current += step;
joint.write(current);
delay(stepDelayMs);
}
}
void loop() {
sweepTo(20, 15);
delay(400);
sweepTo(160, 15);
delay(400);
}
joint.write(160) et le balayage finissent tous deux à 160°, mais ce sont des événements complètement différents
électriquement. Le saut commande la pleine vitesse, soit sur une articulation chargée un pic à 650 mA et un
choc mécanique dans les engrenages nylon. Le balayage étale le même mouvement sur deux secondes et
tire une fraction du courant. Sur un bras multi-articulations, c’est la différence entre une alimentation qui
tient et une qui ne tient pas.
Couple : ce que 1,8 kg·cm signifie vraiment
La spécification est 1,8 kg·cm à 4,8 V — le servo peut tenir 1,8 kg à 1 cm de l’arbre, ou 1,8/L kg à L centimètres. Cette dernière partie piège tout le monde.
| Bras depuis l’arbre | Charge maximale (blocage) | Charge de travail sûre (~30 %) |
|---|---|---|
| 1 cm | 1800 g | 540 g |
| 5 cm | 360 g | 108 g |
| 10 cm | 180 g | 54 g |
| 15 cm | 120 g | 36 g |
Deux leçons. D’abord, le couple chute linéairement avec la portée, donc un segment de bras de 15 cm ne soulève que 120 g au blocage absolu. Ensuite, ne dimensionnez jamais au chiffre de blocage. Un servo au blocage tire plein courant, ne produit aucun mouvement et chauffe ; un tiers du couple de blocage est un plafond sensé pour une articulation devant tenir une position durablement.
Le chiffre est aussi donné à 4,8 V. À 6 V, le même servo produit environ 2,2 kg·cm, soit l’une des rares mises à niveau gratuites en robotique hobby — à condition que votre alimentation fournisse le courant supérieur correspondant.
Réduire le tremblement
Les servos économiques chassent légèrement autour de leur cible, et il y a quatre causes distinctes à distinguer :
- Bruit d’alimentation. La plus fréquente. Un servo partage un rail avec des moteurs et voit chaque pic de courant comme une perturbation de commande. Alimentation séparée, plus un condensateur au servo.
- Gigue de temporisation du signal. La bibliothèque
Servogénère les impulsions en logiciel, et une boucle occupée ou une autre interruption en décale les fronts. Passer à un PCA9685 corrige cela complètement — il génère les impulsions en matériel. - Zone morte. Le contrôleur propre du servo ignore les erreurs sous environ 5 µs de largeur d’impulsion, soit environ 1°. Sous cette résolution, il ne répondra simplement pas, et demander plus fin ne produit rien.
- Maintien contre une charge. Un servo luttant contre la gravité au bord de son couple bourdonnera
en continu.
detach()quand l’articulation n’a pas besoin de tenir, ou équilibrez mécaniquement l’articulation.
Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
| La carte redémarre quand le servo bouge | Courant servo via l’Arduino | Alimentation 5 V séparée, masse commune, condensateur 470 µF |
| Bourdonne en permanence, chauffe | Commandé passé sa butée | Resserrez la plage de largeurs dans attach() |
| Ne parcourt qu’environ 150° | Les défauts de bibliothèque n’atteignent pas les vraies butées | attach(pin, 600, 2400) et réglez |
| Va à un angle complètement faux | Palonnier monté à une rotation arbitraire | Chaque articulation veut un décalage d’étalonnage — et peut-être une inversion de signe |
| Tremble au repos | Bruit d’alimentation ou impulsions minutées en logiciel | Condensateur d’abord ; un PCA9685 si cela persiste |
| Arraché et patine maintenant | Engrenages nylon morts en choc ou surcharge | MG90S à engrenages métal ; réduisez charge ou vitesse |
| Plus lent et faible avec le temps | Alimentation s’affaissant à mesure que la batterie se vide | Le couple suit la tension — mesurez le rail en charge |
| Ne veut pas tourner en continu | C’est un servo positionnel | Utilisez un servo à rotation continue ou un motoréducteur à courant continu |
SG90 ou autre chose ?
| Pièce | Couple à 4,8 V | Engrenages | Prenez-le quand |
|---|---|---|---|
| SG90 | 1,8 kg·cm | Nylon | Apprendre, pinces légères, tourelles de capteurs |
| MG90S | 2,2 kg·cm | Métal | Même taille, survit aux chocs — la mise à niveau directe |
| MG996R | 9,4 kg·cm | Métal | Articulations taille standard portant un vrai poids |
| SG90 rotation continue | — | Nylon | Une roue motrice, où il faut de la vitesse pas un angle |
| Moteur pas à pas NEMA 17 | ~40 N·cm | — | Positionnement précis et répétable sans zone morte |
Un avertissement sur les « pinces légères » de la première ligne. Une pince est l’application où un SG90 passe sa vie bloqué — tenir un objet n’est pas un mouvement, donc le bobinage prend environ 0,5 A sans rien pour le refroidir, et c’est ainsi qu’ils meurent habituellement. C’est aussi pourquoi la force des mors est fixée par le bras de levier plutôt que par le couple sur la boîte : 0,176 N·m sur un doigt de 30 mm font 5,87 N au blocage et environ 4,11 N tenables réellement. Dimensionner une pince à servomoteur couvre les deux, et le simulateur de pince fera l’arithmétique pour votre propre doigt.
Le résumé honnête : le SG90 est un actionneur d’apprentissage. C’est le moyen le plus rapide de comprendre concrètement le contrôle de position, et il n’est ni assez fort ni assez répétable pour une articulation qui compte. Quand un projet cesse de marcher parce que le servo n’est pas assez bon, le MG90S est généralement la réponse — même empreinte, même câblage, engrenages métal.
Explorer le graphe
Utilisé dans ces réalisations
Projets, parcours d'apprentissage et simulateurs qui intègrent le composant SG90 Servo Motor.
- ProjetConstruire un bras 4 axes : PCA9685, servos, cinématique
- ProjetConstruire un robot de pick-and-place qui sait quand il rate
- ProjetConstruire un robot éviteur d'obstacles : capter, balayer
- ProjetConstruire un traceur à stylo : deux axes pas à pas qui arrivent
- Parcours d'apprentissagePréhenseurs et effecteurs : attrapez-le vraiment
Comparer
Alternatives
Questions
FAQ : SG90 Servo Motor
Qu'est-ce que le servomoteur SG90 ?
Le SG90 est un servomoteur hobby 9 grammes — un petit motoréducteur qui tourne vers un angle commandé et le tient, plutôt que tourner librement. C'est le servo le moins cher et le plus courant pour la robotique débutante, utilisé pour articulations de bras, pinces, montures caméra pan-tilt et directions.
Comment fonctionne un servomoteur ?
À l'intérieur : un moteur à courant continu, un train d'engrenages, un potentiomètre et un circuit de commande. Le potentiomètre indique au circuit l'angle actuel ; le circuit le compare à l'angle commandé et pilote le moteur jusqu'à égalité. Cette boucle de rétroaction intégrée permet au servo de tenir une position précise.
Comment commander un SG90 avec un Arduino ?
On envoie un signal PWM 50 Hz dont la largeur d'impulsion fixe l'angle : environ 1 ms vaut 0°, 1,5 ms vaut 90°, et 2 ms vaut 180°. En pratique, on utilise la bibliothèque Servo de l'Arduino et on appelle juste servo.write(angle) — elle génère la temporisation.
Quel poids un SG90 peut-il soulever ?
Le couple de blocage du SG90 est d'environ 1,8 kg·cm, soit 1,8 kg tenus à 1 cm de bras, ou ~180 g à 10 cm. La charge continue utilisable est bien en dessous. Pour tout ce qui est plus lourd ou un bras plus long, passez à un servo à engrenages métal comme le MG90S ou un servo taille standard.
SG90 vs MG90S — lequel est meilleur ?
Ils ont la même taille et se commandent pareil, mais le MG90S a des engrenages métal et un peu plus de couple, donc il survit aux blocages et charges qui arracheraient les engrenages nylon du SG90. Utilisez le SG90 pour apprendre et les charges légères ; choisissez le MG90S quand l'articulation porte un vrai poids ou prend des chocs.
Combien de courant un SG90 tire-t-il ?
Un SG90 ne tire que quelques milliampères au repos mais peut pointer à 500–700 mA en blocage ou en mouvement en charge. C'est trop pour la broche 5 V d'un Arduino, donc alimentez les servos depuis une alimentation 5 V séparée avec masse commune, ou vous ferez décrocher et redémarrer la carte.
Pour aller plus loin