Comment contrôler plusieurs servos simultanément avec Arduino : un guide complet étape par étape_Custom Drive_Industry Insights_Kpower
Maison > Aperçu de l'industrie >Lecteur personnalisé
ASSISTANCE TECHNIQUE

Comment contrôler plusieurs servos simultanément avec Arduino : un guide complet étape par étape

Publié 2026-04-16

Cet article fournit un guide pratique et testé sur le terrain pour contrôler plusieursservomoteurmoteurs avec une carte Arduino. Vous apprendrez les techniques exactes de configuration matérielle, de câblage, de codage et de gestion de l'alimentation nécessaires pour déplacer plusieursservomoteurs en même temps sans gigue, décrochage ou réinitialisation de la carte. Toutes les recommandations sont basées sur des projets réels tels que des bras de robot multi-articulés, des marcheurs hexapodes et des cardans de caméra.

01Le défi principal : puissance et épingles

Contrôler simultanément plusieursservomoteurs estpasà propos d'en ajouter plusécrire()lignes dans votre code. Deux limitations physiques doivent être abordées en premier :

1. Alimentation– Chaque microservo standard peut consommer 200 à 500 mA en mouvement et jusqu'à 1 A au décrochage. Trois servos se déplaçant ensemble peuvent exiger plus de courant qu'un port USB (500 mA) ou que la broche 5 V de l'Arduino (≈800 mA max) ne peut en fournir. Le résultat : des réinitialisations soudaines de la carte, des mouvements erratiques ou des servos qui refusent de tourner.

2. Broches et minuteries PWM– Le intégréServomoteurla bibliothèque utilise des interruptions de minuterie. Sur un Arduino Uno typique, vous pouvez contrôlerjusqu'à 12 servos(broches 2 à 13) à l'aide de la bibliothèque, mais uniquement si vous n'utilisez pas également d'autres fonctions dépendantes de la minuterie (par exemple,tonifier()). Sur les cartes avec moins de minuteries (par exemple Arduino Nano), la limite pratique peut être de 8 à 10 servos. Le dépassement de la limite du minuteur entraîne un comportement imprévisible.

> Exemple concret: Un amateur construisant un bras robotique à 6 DOF (six servos) a connecté tous les servos à la broche 5 V de l'Arduino. Le bras a tremblé et le port USB s'est éteint à plusieurs reprises. La solution était une alimentation externe 5V 5A.

02Méthode 1 : Utilisation de la bibliothèque de servos standard (jusqu'à environ 10 servos)

Si votre projet a besoin12 servos ou moinset vous disposez d'une source d'alimentation séparée, leServomoteurla bibliothèque fonctionne de manière fiable.

Câblage (correct)

Connectez lefil de signalisation(généralement orange, jaune ou blanc) de chaque servo à une broche numérique Arduino différente compatible PWM (3,5,6,9,10,11 sur Uno ; les broches 2 à 13 fonctionnent également mais certaines utilisent un logiciel PWM).

Connectez toutfils de terre(marron ou noir) à un rail de masse commun –celui-ci doit également se connecter au GND de l'Arduino.

Connectez toutfils d'alimentation(rouge) auborne positive d'une alimentation externe 5V(jamais sur la broche 5V de l'Arduino pour plus de 2 petits servos). L'Arduino lui-même est alimenté séparément (via USB ou sa propre prise d'alimentation).

Exemple de code (mouvement simultané fluide)

#inclureServoservo1 ; Servoservo2 ; Servoservo3 ; void setup() { servo1.attach(9); servo2.attach(10); servo3.attach(11); } void loop() { // Déplacez les trois servos de 0° à 180° en même temps pour (int pos = 0; pos = 0; pos--) { servo1.write(pos); servo2.write(pos); servo3.write(pos); retard(10); } délai (1000); }

Note: Leretard(10)est essentiel. Sans cela, lepourla boucle écrit de nouveaux angles plus rapidement que les servos ne peuvent répondre, provoquant un mouvement saccadé.

Lorsque cette méthode échoue

Plus de 12 servos– La bibliothèque ne compilera pas ou provoquera des conflits de minuterie.

Servos à couple élevé ou à rotation continue– Leurs pointes de courant sont trop importantes pour le régulateur interne de l’Arduino, même avec une alimentation externe ? (Non, l'alimentation externe résout le problème, mais l'intégrité du signal peut souffrir avec des fils longs.)

Besoin d'un contrôle de vitesse indépendant ou d'une synchronisation précise- LeServomoteurla bibliothèque définit uniquement les angles cibles ; il ne vous permet pas de contrôler la vitesse de chaque servo individuellement.

03Méthode 2 : Utilisation d'un module pilote PWM (pour 16 à 32+ servos)

Pourplus de 12 servosou des projets nécessitant un mouvement fluide et indépendant (par exemple, animatroniques, robots humanoïdes à 16 servos), utilisez unModule pilote PWM 16 canauxcommuniquant via I²C. C'est la solution professionnelle.

Pourquoi ça marche

Le pilote génère jusqu'à 16 signaux PWM distincts sans utiliser de minuterie Arduino.

Seules deux broches analogiques (SDA, SCL) sont nécessaires pour contrôler les 16 servos.

La plupart des pilotes disposent d'un bornier intégré pour une alimentation externe de 5 à 6 V pouvant fournir 5 à 10 A.

Configuration matérielle (cas courant : 16 servos)

1. Connectez le piloteVCCà Arduino 5V (pour alimenter le côté logique).

2. Connectez le piloteGNDà Arduino GND.

3. Connectez le piloteSDAà Arduino A4 (ou broche SDA dédiée).

4. Connectez le piloteSCLà Arduino A5 (ou broche SCL dédiée).

5. Connectez-vousalimentation externe 5V 5A+à la borne d’alimentation du conducteur.

6. Branchez jusqu'à 16 servos sur la carte pilote (signal, alimentation, masse).

Exemple de code (à l'aide de la bibliothèque compatible PCA9685)

#inclure#inclure// Bibliothèque de pilotes génériques – aucune approbation de marque // L'adresse 0x40 est par défaut pour la plupart des pilotes à 16 canaux Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(0x40); // Limites de largeur d'impulsion du servo (généralement 150 à 600 pour 0° à 180°) #define SERVOMIN 150 #define SERVOMAX 600 void setup() { pwm.begin(); pwm.setOscillatorFrequency(27000000); pwm.setPWMFreq(50); // Fréquence d'asservissement analogique standard } // Fonction pour déplacer un servo spécifique (0-15) vers un angle (0-180°) void setServoAngle(uint8_t canal, int angle) { int pulse = map(angle, 0, 180, SERVOMIN, SERVOMAX); pwm.setPWM(canal, 0, impulsion); } void loop() { // Déplacez les 16 servos en douceur de 0° à 180° et inversement for (int angle = 0; angle = 0; angle--) { for (int ch = 0; ch

Avantage clé: Nonretard()à l'intérieur de la boucle per-servo ? En fait, le code ci-dessus déplace tous les servos d'un pas toutes les 8 ms, produisant un mouvement parfaitement synchrone.

Cas réel

Un robot hexapode à 12 servos utilisant la bibliothèque standard a subi des contractions aléatoires des jambes lors de la marche. Le passage à un pilote PWM à 16 canaux a éliminé tous les conflits de synchronisation et a permis au robot de transporter une charge utile de 1 kg car l'alimentation externe délivrait un 5 V 8 A stable.

04Dépannage critique (d'après l'expérience sur le terrain)

Symptôme Cause la plus probable Réparer
Les servos tremblent lorsqu'ils se déplacent ensemble Courant d'alimentation insuffisant Utilisez une alimentation externe de 5 V conçue pour au moins 2 A + 0,5 A par servo supplémentaire.
Arduino se réinitialise dès que les servos démarrent Alimentation du servo connectée à la broche 5V de l'Arduino Déplacez les fils d'alimentation vers une alimentation externe, ne conservez que le signal et la masse.
Seuls les premiers servos répondent Limite de minuterie dépassée Passer au module pilote PWM
Les servos se déplacent les uns après les autres, pas simultanément Utiliser plusieursretard()appels à l’intérieur de boucles per-servo Utilisez une seule boucle qui met à jour toutes les positions des servos à chaque itération (voir exemples ci-dessus)
Les servos bourdonnent fort mais ne tournent pas Plage de largeur d'impulsion insuffisante Mesurez les largeurs d'impulsion min/max de votre servo avec un oscilloscope ou utilisez 150 à 600 comme démarrage en toute sécurité.

05Recommandations concrètes pour garantir le succès

1. Commencez par le pouvoir– Pour plus de 3 servos standard, utilisez toujours une alimentation externe de 5 V (minimum 2 A pour 3 servos, 5 A pour 8 à 10 servos). Connectez la masse d'alimentation à la masse de l'Arduino.

2. Comptez vos servos– ≤10 servos → le standardServomoteurla bibliothèque va bien. ≥12 servos ou toute gigue → achetez un module pilote PWM à 16 canaux (coût moins de deux servos).

3. N’alimentez jamais les servos à partir de la broche 5 V de l’Arduino– Cette broche est uniquement destinée aux capteurs et aux appareils à faible courant.

4. Utiliser un terrain d’entente– Tous les servos, l'Arduino et l'alimentation externe doivent partager une connexion à la terre. Sans cela, les signaux PWM n’ont aucun sens.

5. Écrire du code non bloquant– Pour les projets où l'Arduino doit également lire des capteurs ou communiquer, remplacezretard()avec une minuterie basée sur millis() qui met à jour les positions des servos toutes les 10 à 20 ms.

6. Tester progressivement– Commencez avec un servo sur l’alimentation externe. Ajoutez les servos un par un tout en surveillant les chutes de tension (utilisez un multimètre). Si la tension tombe en dessous de 4,8 V pendant le mouvement, mettez à niveau l'alimentation.

06Conclusion et point central final

Le contrôle multiservo simultané représente 80 % de gestion de l'énergie et 20 % de code.Vous pouvez utiliser la normeServomoteurbibliothèque pouvant accueillir jusqu'à 12 servos, mais uniquement avec une alimentation dédiée qui n'est jamais tirée de la carte Arduino. Pour des projets plus importants ou des performances sans problème, un module pilote PWM sur I²C est la solution professionnelle et éprouvée. Mettez toujours tout à la terre ensemble, dimensionnez toujours votre alimentation en fonction du courant de décrochage de pointe et testez toujours chaque servo individuellement avant le mouvement de groupe.

Votre action immédiate: Comptez les servos dans votre projet. S'il y en a plus de 10, commandez dès aujourd'hui un pilote PWM 16 canaux et une alimentation 5 V 5 A. Utilisez ensuite le deuxième exemple de code ci-dessus – il fonctionnera lors de votre premier téléchargement.

Heure de mise à jour:2026-04-16

Alimenter l’avenir

Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.

Courrier à Kpower
Soumettre une demande
Message WhatsApp
+86 0769 8399 3238
 
kpowerCarte