Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU
Publicité

Contrôler un servo en Python avec un RaspberryPI

4 Mars 2017 , Rédigé par cnickelfr Publié dans #Raspberry PI, #Electronique et robots, #Python

Pour contrôler l'angle d'un servo, il faut moduler le signal qui lui est transmit. Les servos présentent 3 fils :

  • +5V (fil du milieu, rouge),
  • ground (fil marron ou noir)
  • modulation (jaune ou blanc)

La modulation se fait par la méthode PWM qui signifie Pulse Width Modulation. Généralement les servos attendent un signal à 50Hz, c'est à dire 50 pulses/sec soit des pulses de 20ms. L'angle du servo est contrôlé en fonction du % du cycle pendant lequel le signal est ON (5V), le reste du cycle le signal est OFF (0V). Par exemple si le signal est ON pendant 0.5 ms le servo se mettra à l'angle 0. Si le signal est ON pendant 2.5ms l'angle sera de 180°.

Sur le Raspberry PI, en Python, la durée du cycle est calculée en % du cycle (duty cycle). Si l'on veut que le signal ait une durée de 0.5 ms (0°) cela correspond donc à 0.5/20 * 100 = 2.5%. Pour 180° (2.5 ms) cela donne 2.5/20 * 100 = 12.5%

En pratique :
  • Connecter +5 et GND du servo au GPIO par exemple en position 4 et 6.
  • Connecter le fil de modulation en position 11 (GPIO P17)

 

Voici ce que ça donne en Python :

#importer RPi.GPIO

import RPi.GPIO as GPIO

#numerotation des pins d'apres leur position physique

GPIO.setmode(GPIO.BOARD)

#declarer pin11 comme pin du signal

GPIO.setup(11,GPIO.OUT)

#declarer un objet pwm en indiquant le pin et la frequence

pwm=GPIO.PWM(11,50)

#initialiser l'objet PWM avec un duty cycle de 2.5% (angle 0°)

pwm.start(2.5)

#changer l'angle (0 à 90°) en modifiant le duty cycle à 12.5%

pwm.ChangeDutyCycle(12.5)

#etc....

#A la fin fermer l'objet pwm et reset du GPIO

pwm.stop()

GPIO.cleanup()

 

Dans mon cas (servo Tower Pro SG90) les % de duty cycle ne correspondaient pas exactement. A 12.5 le servo est en butée alors qu'a 2.5% il y a encore de la marge. 2.0% et 11.75% semble mieux correspondre. Mais j'ai remarqué que les angles n'étaient pas très stables...

Publicité
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article