Tutoriel Raspberry #12
Contrôler un Servo moteur en Python


Mis à jour le : 17/11/2017


Le Raspberry permet de réaliser divers projets de robotique. Le servo moteur est un composant très souvent utilisé Servo moteur - Espace Raspberry Francais dans ce domaine. En effet, ce n'est pas un simple moteur, il est "intelligent". On va pouvoir lui demander d'aller à une certaine position, et il va executer les ordres, sans avoir besoin d'ajouter de capteurs de fin de courses, etc. Malheureusement, sa course de sortie n'est que de 180°.
D'autres types de servo moteurs existent, comme les Servo treuil. Ils offrent une course de sortie de plus de 3 tours mais sont plus cher.

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 :

- Le fil rouge : +5V;
- Le fil noir : GND, 0V;
- Le fil blanc/jaune : fil de data, où les ordres circulent du Raspberry vers le Servo.

Pour alimenter le Servo, il est préférable d'utiliser une alimentation externe de 5V, surtout si l'alimentation de votre Raspberry délivre peu de courant.
Le Servo se branche donc 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

Une fois que tout est branché correctement, on peut passer à la programmation. Pour contrôler le Servo moteur, voici un programme Python qui permet de :

- Demander au Servo d'atteindre une position (un angle), qu'il maintiendra pendant une durée déterminée,
- Lui demander de faire des aller-retour de 0° à 180°
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()

Ce programme est évidemment là pour être modifié et adapté aux besoins de votre projet, donc à vous de jouer !


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 !