Commander un servomoteur avec le Raspberry Pi

Le principe

Pour commander un servomoteur, il faut lui envoyer une impulsion comprise entre 1 ms et 2 ms, répéter cette impulsion toutes les 20 ms pour maintenir l'axe du servomoteur en position. La position neutre du sevomoteur correspond à une impulsion de 1,5 ms.

Le câblage

Un servomoteur possède un connecteur à 3 broches, par exemple :
Rouge-> +5 v
Noir -> Gnd
0range -> Commande
Il existe d'autres connecteurs avec d'autres couleurs. Il faut vérifier le brochage avant essai.

Attention il ne faut pas utiliser le 3,3 V pour l'alimenter mais le rail 5V, ou mieux une alimentation externe.

Le fil de commande (jaune) sera relié à la broche GPIO 17

 

Le programme sous Python

Avec un Raspbery Pi 2 et Pi .., il faut charger la bibliothèque compatible RPi.GPIO.0.7.0, l'archive est disponible sur le site Python. L' installation se fait avec :
$ pip install RPi.GPIO

Pour l'installation de la bibliothèque RPIO.PWM , taper les commandes suivantes :

$ sudo apt-get install python-setuptools
$ sudo easy_install -U RPIO

Le module RPIO.PWM possède une fonction PWM.Servo() qui comme son nom l'indique commande directement un servomoteur. Après quelques tests j'ai rencontré quelques problèmes de stabilité avec cette fonction et j'ai utilisé une autre fonction PWM.add_channel_pulse () qui comme l'atteste la recopie de l'oscillogramme ci-dessous fonctionne parfaitement. Sur cet oscillogramme la largeur d'impulsion est de 1,5 ms (position neutre) et la période de 20 ms.

 

Commentaires :

Importation des modules

Broche GPIO 17 en sortie

Initialisation du canal DMA 0

Faire tourner le servomoteur de gauche à droite ( 100 -> 1ms 200 -> 2ms)

 

Répéter l'impulsion toutes les 20 ms

 
# !/usr/bin/python
import time
import RPi.GPIO as GPIO
from RPIO import PWM

GPIO.setmode(GPIO.BCM)
GPIO.setup(17,GPIO.OUT)
PWM.setup()
PWM.init_channel(0)
while True :

	for i in range(100,201):

		PWM.add_channel_pulse(0, 17, 0, i)
		time.sleep(0.05)