Étape 4: Installation de ServoBlaster
Une bibliothèque de greta à utiliser pour contrôler des servos est ServoBlaster
Il s’agit de logiciels pour le RaspberryPi, qui fournit une interface pour piloter plusieurs servos via les broches GPIO. Vous contrôlez la position du servo en envoyant des commandes du pilote disant quelle largeur d’impulsion doit utiliser une sortie particulière servo. Le pilote maintient cette largeur d’impulsion, jusqu'à ce que vous envoyez une commande nouvelle demandant une autre largeur.
Par défaut est il configuré pour servos drive 8, bien que vous pouvez configurer pour conduire jusqu'à 21. Servos doivent généralement une impulsion haute active de quelque part entre 0.5ms et 2.5ms, où la largeur d’impulsion contrôle la position du servo. L’impulsion doit être répétée environ chaque 20ms, bien que la fréquence des impulsions n’est pas critique. La largeur d’impulsion est critique, car cela correspond directement à la position du servo.
Outre la conduite servos, ServoBlaster peut être configuré pour générer des largeurs d’impulsion entre 0 et 100 % de la durée du programme, ce qui convient pour le contrôle de la luminosité des LEDs jusqu'à 21, par exemple.
Le pilote crée un fichier de périphérique, / dev/servoblaster, à laquelle vous pouvez envoyer des commandes. Le format de la commande est soit
[numéro-servo] = [servo-position]
(ex.: echo P1 - 11 = 80 % >/dev/servoblaster)
ou
P [header]-[pin] = [servo-position]
(ex : echo P0 = 80 % >/dev/servoblaster)
Tout d’abord, nous allons clone Richardghirst projet de GITHUB :
CD
sudo git clone https://github.com/richardghirst/PiBits
Réal de changement :
CD PiBits
CD ServoBlaster
utilisateur de CD
Le contenu de la liste et vérifiez si le répertoire contient le fichier « servod.c »
LS
Compiler et installer le fichier served.c :
sudo make servod
sudo faire installer
En ce moment, le servod de programme doit être installé. Modifier les autorisations, puis exécutez le programme pour le tester :
sudo chmod 755 servod
sudo. / servod
Si tout est OK, vous pouvez voir à l’écran, les informations suivantes :
Board model: 2 GPIO configuration: P1 (40 pins) Using hardware: PWM Using DMA channel: 14 Idle timeout: Disabled Number of servos: 8 Servo cycle time: 20000us Pulse increment step size: 10us Minimum width value: 50 (500us) Maximum width value: 250 (2500us) Output levels: Normal Using P1 pins: 7,11,12,13,15,16,18,22 Servo mapping: 0 on P1-7 GPIO-4 1 on P1-11 GPIO-17 2 on P1-12 GPIO-18 3 on P1-13 GPIO-27 4 on P1-15 GPIO-22 5 on P1-16 GPIO-23 6 on P1-18 GPIO-24 7 on P1-22 GPIO-25
Notez le servo mappage ci-dessus. Nous devrons seulement 2 servos, alors nous devons limiter les broches à utiliser. Nous allons examiner :
- GPIO.17 (P1-11) sera utilisé pour l’inclinaison
- GPIO.23 (P1-16) sera utilisé pour PAN
Pour définir les broches à utiliser, les paramètres ci-dessous doivent être utilisées :
sudo. / servod--p1pins = 11, 16
Exécutez la commande ci-dessus, le moniteur affiche maintenant dans sa partie inférieure :
À l’aide de goupilles de P1 : 11, 16
Cartographie du servo :
0 sur P1-11 GPIO-17
1 sur GPIO-23 P1-16
Notez également que si vous redémarrez l’IPD, la configuration sera l être perdu, donc. Il est important d’inclure la dernière commande dans /etc/rc.local
sudo nano /etc/rc.local
...
CD /home/pi/PiBits/ServoBlaster/user
sudo. / servod--p1pins = 11, 16
CD
...
Il est également important changement du soufflet de script :
sudo nano /etc/init.d/servoblaster
...
case « $1 » dans
mise en œuvre)
/usr/local/sbin/servod $OPTS >/dev/null
Remplacez :
/usr/local/sbin/servod --p1pins = 11, 16 $OPTS >/dev/null
...
;; ;;#!/bin/sh ### BEGIN INIT INFO # Provides: servoblaster # Required-Start: hostname $local_fs # Required-Stop: # Should-Start: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/stop servod. # Description: This script starts/stops servod. ### END INIT INFO PATH=/sbin:/usr/sbin:/bin:/usr/bin . /lib/init/vars.sh OPTS="--idle-timeout=2000" STATUSFILE="/tmp/servoblaster-status" if [ $( id -u ) != 0 ]; then echo "ERROR: Must be run as root" exit 1 fi case "$1" in start) /usr/local/sbin/servod --p1pins=11,16 $OPTS >/dev/null<br> ;; restart|reload|force-reload) killall servod /usr/local/sbin/servod $OPTS >/dev/null ;; stop) killall servod ;; status) if [ ! -e /dev/servoblaster ]; then echo "ERROR: /dev/servoblaster does not exist" exit 2 fi rm -f $STATUSFILE echo "status $STATUSFILE" > /dev/servoblaster sleep 0.2 if [ ! -e $STATUSFILE ]; then echo "ERROR: servod not responding" exit 3 elif grep -q "^OK" $STATUSFILE; then echo "OK" exit 0 elif grep "^ERROR:" $STATUSFILE; then exit 4 else echo "ERROR: No status from servod" exit 5 fi ;; *) echo "Usage: servoblaster [start|stop|status]" >&2 exit 6 ;; esac exit 0
maintenant redémarrer votre système, donc les modifications peuvent être permanentes
sudo reboot
C’est tout. Blaster du servo est installé. Notez qu’à ce stade ServoBlaster reconnaîtra que deux servos :
servo 0 == > p1-11
servo 1 == > 01-16
La commande echo peut être faite sur n’importe lequel des formats ci-dessous, avec le même résultat :
echo% P1 - 11 = 40 >/dev/servoblaster
echo% P1 - 16 = 60 >/dev/servoblaster
ou
0 = 40 % d’écho >/dev/servoblaster
écho 1 = 60 % >/dev/servoblaster