Tutoriel Raspberry #12
Contrôler un Servo moteur


Mis à jour le : 27/07/2017


Le Raspberry peut permettre de réaliser divers projets de robotique. Le servo moteur est un composant souvent utilisé Servo moteur - Espace Raspberry Francais dans ce domaine. Le Servo moteur permet en effet de déplacer un bras, sur lequel peut-être fixé un objet,jusqu'à une certaine position définie par un angle, puis à maintenir solidement cette position. Un servo moteur a la capacité de tourner d'un angle de 0° à un angle de 180°.

I. Prérequis

Pour contrôler un Servo moteur à l'aide d'un Raspberry, il faut :

- Un Raspberry Pi,
- Un Servo Moteur,
- Une résistance 1KΩ (facultative mais conseillée pour préserver les GPIO),
- Des cables,
- Une alimentation en plus de celle du Raspberry (4 piles AAA ou une batterie externe 5V).

Une fois tous les éléments réunis, on peut passer au branchement.

II. Connexion du Servo au Raspberry

Le Servo moteur possède 3 fils :

- Un fil rouge : +5V;
- Un fil noir : GND, 0V;
- Un fil blanc ou jaune : fil de données, permet de contrôler le Servo.


Pour alimenter le Servo, on doit utiliser une alimentation externe d'environ 5V, celle du Raspbery pouvant ne pas suffir.

On peut donc brancher le Servo comme ceci :


Shéma de branchement d'un Servo Moteur sur Raspberry Pi 3
Shéma de branchement d'un Servo Moteur sur Raspberry Pi B rev 2

III. Programmation

Afin de contrôler le Servo moteur, j'ai créé un programme en Python qui permet de :
- Lui donner un angle qu'il gardera pendant une durée que l'on détermine, ou de
- Lui ordonner de faire des aller-retour de l'angle 0° à 180°

Voici le code du programme ci-dessous.


import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setwarnings(False)

ajoutAngle = 5

print("\n+----------/ ServoMoteur  Controlleur /----------+")
print("|                                                |")
print("| Le Servo doit etre branche au pin 11 / GPIO 17 |")
print("|                                                |")
print("+------------------------------------------------+\n")

print("Comment controler le Servo ?")
choix = input("1. Choisir un angle\n2. Faire tourner de 0 a 180\n")

if choix == 2 :

    nbrTour = input ("Entrez le nombre d'aller-retour que fera le Servo :\n")

    pwm=GPIO.PWM(17,100)
    pwm.start(5)

    angle1 = 0
    duty1 = float(angle1)/10 + ajoutAngle

    angle2=180
    duty2= float(angle2)/10 + ajoutAngle

    i = 0

    while i <= nbrTour:
         pwm.ChangeDutyCycle(duty1)
         time.sleep(0.8)
         pwm.ChangeDutyCycle(duty2)
         time.sleep(0.8)
         i = i+1
    GPIO.cleanup()

if choix == 1 :
    angle = input("Entrez l'angle souhaite :\n")
    duree = input("Entrez la duree durant laquelle le Servo devra tenir sa position : ( en secondes )\n")

    pwm=GPIO.PWM(17,100)
    pwm.start(5)

    angleChoisi = float(angle)/10 + ajoutAngle
    pwm.ChangeDutyCycle(angleChoisi)
    time.sleep(duree)
    GPIO.cleanup()

Voilà, ce tutoriel est maintenant terminé, vous pouvez adapter le code à votre projet de robotique quel qu'il soit.


EspaceRaspberryFrançais

N'hésitez pas à aimer notre page Facebook en cliquant ci dessous !


Pour plus de soutien, une pièce nous permettrai d'acheter de nouveaux composants... et nous motiverai à proposer encore plus de contenu. Merci d'avance :)

Accéder à la page des donations !