Raspberry Pi Tutorial
Controlling a Servo Motor in Python


November 17, 2017 • 17 • 4.5

The Raspberry allows for various robotics projects. The servo motor is a component often used in this field. It's not a simple motor; it's smart. We can ask it to reach a certain position and it will execute the command without the need for end-stop sensors, etc. Unfortunately, its travel is only 180°. Other types of servos exist, such as winch servos. They offer more than 3 turns of travel but are more expensive.

Control a Servo Motor on Raspberry Pi - Raspberry Lab

Prerequisites

To control a servo motor with a Raspberry Pi, you need:

Once you have everything, you can move on to wiring.

Connecting the Servo to the Raspberry

The servo motor has 3 wires:

Red wire: +5V;
Black wire: GND, 0V;
White/yellow wire: data line, where commands flow from the Raspberry to the Servo.

To power the servo, it is better to use an external 5V supply, especially if your Raspberry power supply provides little current.
Wire the servo as follows:

Wiring diagram of a Servo Motor on Raspberry Pi 3

Programming

Once everything is properly wired, we can move on to programming. To control the servo motor, here is a Python program that lets you:

Ask the servo to reach a position (an angle) and hold it for a set duration,
Have it sweep back and forth from 0° to 180°

This program is of course meant to be modified and adapted to your project needs—your turn to play!

Read next

Article image

Choose and use a camera on Raspberry Pi


Article image

Get temperature with a DS18B20 sensor






Ce tutoriel vous a plu ?

starstarstarstarstar

4.5/5 | 13 votes




Commentaires

17 commentaires publiés.

Anonyme, le 28/11/2020 à 11h12
Bonjour,
Récemment j'ai acheté un bras robotique waveshare pour raspberry pi (https://www.robotshop.com/eu/fr/kit-bras-robotique-bluetooth-wifi-4-dof-pour-raspberry-pi.html?gclid=Cj0KCQiAh4j-BRCsARIsAGeV12CxfEScwAQ6RnbrpFwil-hQD7LVR5j0sTjbCh5gaiUQGjPb8RxAhcYaAm3xEALw_wcB) et quand je le fait fonctionner avec le logiciel AlphaBot le raspberry affiche un message en haut à droite qui dit alimentation faible veuillez vérifier votre alimentation. Avec le bras robotique il y avait un câble secteur vers micro usb type B je l'ai dénudé pour le connecter au connecteur vert de ma carte Servo_Driver_HAT (https://www.waveshare.com/servo-driver-hat.htm) pense-tu qu'il fallait remplacer l'alimentation de mon raspberry par ce cable au lieu de le connecter a la carte Servo_Driver_HAT ?
Anonyme, le 20/01/2020 à 15h01
merce mec tu fait trop plz
Anonyme, le 06/07/2019 à 17h44
Bonjour,
Merci pour l'information.
Je voudrais savoir si vous êtes en mesure de refaire le code en utilisant le module GPIOZERO.
Merci d'avance
Anonyme, le 09/06/2019 à 22h42
Bonjour,
merci pour votre aide, en fait sur python on m'indique que le module RPi is not definded je sais pas comment faire
Merci
Anonyme, le 28/04/2019 à 21h14
Bonsoir, je peux lire un peu partout que les servo fonctionne en 50hz, pourquoi le faire fonctionner en 100hz ?
Anonyme, le 27/03/2019 à 08h55
bonjour monsieur,
est ce que ce programme peut marché sur une Raspberry pi2
merci
Raspberry Lab, le 27/03/2019 à 12h35
Bonjour @Anonyme,
En effet, le programme fonctionne sur tous les Raspberry Pi. Il suffit d'adapter le branchement, qui est disponible sur cette page pour les Raspberry 1, 2 et 3.

Bonne continuation sur votre Raspberry,
RaspberryLab.

Anonyme, le 07/02/2019 à 13h20
Bonjour. Merci pour ce petit programme. J'aimerais controler deux servomoteur, un pour les axes X et l'autre pour les axes Y par exemple. Comment dois-je faire?!
Est ce que : GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(27, GPIO.OUT)
GPIO.setwarnings(False)

Fonctionnerai ou bien fait il "configurer" le programme autrement?!

Merci d'avance pour votre reponce.
Raspberry Lab, le 10/02/2019 à 09h42
Bonjour,
Je ne possède qu'un Servo moteur donc je ne peux malheureusement pas tester mais je pense que on peut faire fonctionner le script avec autant de Servo que l'on veut.
En plus de l'ajout de GPIO.setup(27, GPIO.OUT), il faut ajouter ligne 23 : pwm2=GPIO.PWM(27,100) pour définir le deuxième servo et ensuite faire ce que vous voulez avec ce dernier.

Bonne journée,
RaspberryLab.
Anonyme, le 12/02/2019 à 06h38
Merci pour votre reponse. Je teste ca au plus vite. :)
Anonyme, le 23/12/2018 à 02h57
Bonsoir, j'aimerai savoir a quoi sert la variable ajoutAngle S.V.P
Anonyme, le 08/12/2018 à 13h15
Il faut une bread board?
Et est ce qu'on peut utiliser un Raspberry Pi zero ?
Raspberry Lab, le 09/12/2018 à 18h45
Bonjour Romain,
La Bread Board n'est pas obligatoire, mais sans, il faut souder la résistance du schéma aux fils, ce qui est un peu plus compliqué.
Sinon, oui le tuto est réalisable sur Raspberry Pi Zero, en utilisant le même GPIO qu'avec un Raspberry Pi 3.

Bonne soirée !
Anonyme, le 23/11/2018 à 16h44
bonjour
le programme m'indique une erreur :
unorderable type : int () <= str()
merci de votre aide
Raspberry Lab, le 24/11/2018 à 10h18
Bonjour tafiolemika,
Je viens de changer le code, cela devrait marcher maintenant !
Le problème venait du fait qu'il restait des input qui n'étaient pas convertis en entier dans le code et qui donnaient donc des str.

Bonne journée,
RaspberryLab.
Anonyme, le 16/09/2018 à 17h42
Merci pour ce petit tuto.
Pour info, input donne des types str, donc il faut convertir en int pour que ça fonctionne.
Raspberry Lab, le 16/09/2018 à 17h46
Bonjour dood,

Merci pour l'info, je viens de corriger le code :)

Bonne continuation sur votre Raspberry Pi !


Commenter
Votre adresse mail ne sera pas visible sur le site.

Les commentaires sous soumis à vérification avant publication.