Publié 2026-04-18
Ce guide fournit une procédure complète et pratique pour contrôler un standardservomoteurmoteur à l’aide d’un ordinateur monocarte Raspberry Pi. Vous apprendrez le câblage exact, le code Python et les paramètres PWM nécessaires pour obtenir un contrôle angulaire précis, sur la base de tests réels et de la documentation officielle du matériel.
Raspberry Pi (tout modèle avec broches GPIO, par exemple 3B+, 4B ou 5)
Carte MicroSD avec Raspberry Pi OS (Bookworm ou version ultérieure)
Norme 5Vservomoteurmoteur (couramment utilisé dans la robotique de loisir)
Alimentation externe 5 V (2 A ou plus) – la plupartservomoteurs consomment un courant élevé
Fils de liaison (femelle à femelle)
Petit potentiomètre (en option, pour exemple de contrôle manuel)
> Remarque du monde réel: Dans une configuration typique de salle de classe ou d'amateur, les utilisateurs endommagent souvent leur Raspberry Pi en alimentant le servo directement à partir de la broche 5 V. Ce guide montre la méthode d'isolation de puissance correcte.
Un servomoteur standard ne tourne pas en continu. Au lieu de cela, il se déplace vers un angle spécifique (généralement de 0° à 180°) basé sur un signal PWM (Pulse width Modulation). Le Raspberry Pi génère ce signal sur une broche GPIO.
Paramètres critiques (à partir des fiches techniques des servos et de la documentation officielle du Raspberry Pi) :
Fréquence du signal : 50 Hz (période = 20 ms)
Largeur d'impulsion pour 0° : 0,5 ms (rapport cyclique = 2,5 %)
Largeur d'impulsion pour 90° : 1,5 ms (rapport cyclique = 7,5 %)
Largeur d'impulsion pour 180° : 2,5 ms (rapport cyclique = 12,5 %)
Ces valeurs sont des normes industrielles pour la plupart des servos analogiques et numériques. Vérifiez toujours avec la fiche technique de votre servo – de petites variations existent.
N’alimentez jamais le servo directement à partir de la broche 5 V du Raspberry Pi.Un servo typique peut consommer 200 à 800 mA pendant le mouvement et les courants de crête dépassent 1A. La broche 5 V du Raspberry Pi est directement connectée à l’entrée USB et ne peut fournir qu’environ 500 mA de manière fiable (moins sur les anciens modèles). Tirer davantage de courant peut provoquer une chute de tension, un gel du système ou des dommages permanents.
Câblage correct (testé avec des configurations courantes) :
Pourquoi un terrain d’entente est obligatoire :Le signal de commande du servo (0–3,3 V du Pi) et l'alimentation du servo (5 V provenant d'une alimentation externe) doivent partager une tension de référence. Sans terrain d'entente, le signal devient indéfini et le servo tremblera ou ne bougera pas.
Raspberry Pi OS est livré avec Python préinstallé. Il existe deux méthodes fiables pour générer des signaux PWM précis. La méthode recommandée pour les débutants consiste à utiliserRPi.GPIOavec matériel PWM sur des broches spécifiques.
Broches GPIO matérielles compatibles PWM sur l'en-tête Raspberry Pi à 40 broches :
GPIO12 (broche 32) – canal PWM 0
GPIO13 (broche 33) – canal PWM 1
GPIO18 (broche 12) – Canal PWM 0 (le plus couramment utilisé)
GPIO19 (broche 35) – canal PWM 1
![]()
Activer l'interface PWM (si vous utilisez le matériel PWM) :Aucune étape supplémentaire n'est nécessaire : le matériel PWM est toujours disponible. Pour le logiciel PWM (n'importe quelle broche), aucune configuration n'est requise mais la synchronisation peut être moins stable.
Vous trouverez ci-dessous un script Python complet et testé qui déplace le servo selon trois angles (0°, 90°, 180°) avec une pause de 2 secondes entre chacun. Ce code suit la documentation officielle RPi.GPIO.
importer RPi.GPIO comme heure d'importation GPIO # Utiliser la numérotation des broches BCM GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # Configurer GPIO18 comme sortie PWM servo_pin = 18 GPIO.setup(servo_pin, GPIO.OUT) # Créer une instance PWM à 50 Hz pwm = GPIO.PWM(servo_pin, 50) pwm.start(0) # Commencer par 0 % de cycle de service défini set_servo_angle(angle): """ Convertir l'angle (0-180) en cycle de service (2,5 à 12,5) Formule : service = (angle / 180)10 + 2,5 Vérifié avec plusieurs fiches techniques servo """ si angle 180 : angle = 180 service = (angle / 180,0)10.0 + 2.5 pwm.ChangeDutyCycle(duty) # Autoriser le servo à atteindre la position time.sleep(0.5) # Arrêter d'envoyer le signal pour réduire la gigue (facultatif) pwm.ChangeDutyCycle(0) time.sleep(0.1) try: while True: print("Moving to 0°") set_servo_angle(0) time.sleep(2) print("Moving to 90°") set_servo_angle(90) time.sleep(2) print("Déplacement à 180°") set_servo_angle(180) time.sleep(2) except KeyboardInterrupt : print("Arrêté par l'utilisateur") pwm.stop() GPIO.cleanup()
Détail clé :Après chaque position, le code définit le rapport cyclique sur 0 % et attend 0,1 seconde. Cela évite une consommation d'énergie continue et réduit la gigue du servo. De nombreux exemples en ligne omettent cela, ce qui entraîne une consommation de courant inutile.
Enregistrez le script sousservo_control.py. Dans le terminal, exécutez :
python3 servo_control.py
Comportement attendu :L'arbre du servo tourne à 0°, fait une pause de 2 secondes, se déplace à 90°, fait une pause, se déplace à 180°, puis répète.
Si le servo ne bouge pas :
Vérifiez les points communs – erreur la plus fréquente
Vérifiez que l'alimentation externe est allumée et fournit au moins 5 V.
Confirmez le numéro de broche GPIO (BCM 18 = broche physique 12)
Réduire le temps de sommeil aprèsChangeDutyCycle? Non – le servo a besoin d'environ 300 à 500 ms pour atteindre la position
Pour les projets interactifs, vous pouvez lire un potentiomètre analogique à l'aide d'un ADC MCP3008 (puisque Raspberry Pi n'a pas d'entrées analogiques). Cependant, une méthode de test plus simple consiste à utiliser la saisie au clavier :
importer RPi.GPIO comme heure d'importation GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT) pwm = GPIO.PWM(18, 50) pwm.start(0) def angle_to_duty(angle): return (angle / 180.0) * 10.0 + 2.5 try: while True: cmd = input("Entrez l'angle (0-180) ou 'q' pour quitter : ") if cmd == 'q' : break try : angle = float(cmd) if 0
Point essentiel répété :Pour contrôler en toute sécurité et avec précision un servo avec un Raspberry Pi, vous devez (1) utiliser une alimentation externe de 5 V pour le servo, (2) connecter une masse commune entre le Pi, le servo et l'alimentation, (3) générer un signal PWM de 50 Hz avec des cycles de service correspondant à des impulsions de 0,5 à 2,5 ms et (4) arrêter le signal PWM (service à 0 %) après chaque mouvement pour réduire la gigue et la consommation d'énergie.
Étapes d'action pour appliquer ce guide :
1. Rassemblez les composants répertoriés ci-dessus – aucune marque spécifique n’est requise, n’importe quel servo 5 V standard fonctionne.
2. Câblez exactement comme indiqué, en revérifiant la connexion à la terre commune.
3. Copiez le script Python et exécutez-le. Observez le servo se déplacer à 0°, 90° et 180°.
4. Modifiez les valeurs d'angle dans le script pour répondre aux besoins de votre projet.
5. Pour tout projet de production ou de longue durée, utilisez toujours le matériel PWM et ajoutez un condensateur électrolytique de 100 à 470 µF sur les lignes d'alimentation du servo pour lisser les pics de tension.
Sources fiables pour une vérification plus approfondie :Documentation officielle du Raspberry Pi (/documentation/computers/os.html#gpio-and-the-40-pin-header) et fiche technique du servomoteur (généralement disponible sur le site Web du fabricant). Référez-vous toujours à la plage de largeur d'impulsion spécifique de votre servo – alors que 0,5 à 2,5 ms est la norme, certains servos utilisent 0,7 à 2,3 ms. Un simple script d'étalonnage qui balaie le servo et enregistre les limites réelles vous donnera une précision parfaite.
Heure de mise à jour:2026-04-18
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.