Stap 4: ServoBlaster installatie
Greta library to worden gebruikt om controle van de servo's is ServoBlaster
Dit is software voor de RaspberryPi, dat als intermediair optreedt te rijden meerdere servo's via de GPIO pinnen. U beheren de posities van de servo door opdrachten te sturen naar het stuurprogramma zeggen welke pulsbreedte een bijzondere servo uitgang moet gebruiken. De bestuurder onderhoudt dat pulsbreedte totdat u een nieuwe opdracht aanvragen van sommige andere breedte.
Standaard is het geconfigureerd voor station 8 servo's, hoewel je configureren kunt om te rijden tot 21. Servo's over het algemeen hoeft een actieve hoge pols van ergens tussen 0.5ms en 2.5ms, waar de pulsbreedte de positie van de servo bepaalt. De pols moet worden herhaald ongeveer elke 20 MS, hoewel pulse frequentie niet kritisch is. De pulsbreedte is kritisch, zoals dat vertaalt zich rechtstreeks naar de positie van de servo.
Naast het rijden servo's, kan ServoBlaster worden geconfigureerd voor het genereren van puls breedte tussen 0 en 100% van de cyclustijd, makend het geschikt is voor het regelen van de helderheid van maximaal 21 LEDs, bijvoorbeeld.
Het stuurprogramma maakt een apparaatbestand, / dev/servoblaster, in waarnaar u opdrachten kunt verzenden. De opdracht formaat is ofwel
[servo-nummer] = [servo-positie]
(ex.: echo P1 - 11 = 80% >/dev/servoblaster)
of
P [kop]-[pin] = [servo-positie]
(ex: echo P0 = 80% >/dev/servoblaster)
Ten eerste, laten we Richardghirst project van GITHUB clonen:
cd
sudo git clone https://github.com/richardghirst/PiBits
Verandering dir:
CD PiBits
CD ServoBlaster
CD gebruiker
Lijst van de inhoud en controleer of als de map het bestand "servod.c bevat"
ls
Compileer en installeer het bestand served.c:
sudo make servod
sudo maakt installeren
Op dit moment, moet de servod van het programma worden geïnstalleerd. Wijzig de machtigingen en test het programma uit te voeren:
sudo chmod 755 servod
sudo. / servod
Als alles OK is, kun je zien op de monitor, de volgende informatie:
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
Opmerking de servo Mapping hierboven. We zullen alleen moeten 2 servo's, dus we de pinnen beperken moeten moet worden gebruikt. Laten we eens bekijken:
- GPIO.17 (P1-11) zal worden gebruikt voor TILT
- GPIO.23 (P1-16) worden gebruikt voor PAN
Als u wilt definiëren de pinnen moet worden gebruikt, moeten de balg-parameters worden gebruikt:
sudo. / servod--p1pins = 11, 16
De bovenstaande opdracht uit te voeren, zal de monitor nu in het onderste deel weergeven:
Met behulp van P1 pinnen: 11,16
Servo mapping:
0 op P1-11 GPIO-17
1 op de P1-16 GPIO-23
Merk ook op dat als u reboot de RPi, de configuratie zal l worden verloren, zo. het is belangrijk om op te nemen van de laatste opdracht in /etc/rc.local
sudo nano /etc/rc.local
...
cd /home/pi/PiBits/ServoBlaster/user
sudo. / servod--p1pins = 11, 16
cd
...
Het is ook belangrijk verandering het script balg:
sudo nano /etc/init.d/servoblaster
...
Case "$1" in
Start)
/usr/local/sbin/servod $OPTS >/dev/null
Ga naar:
/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
nu herstart uw systeem, zodat de wijzigingen permanente kunnen
sudo reboot
Thats it. Servo blaster is geïnstalleerd. Merk op dat op dit punt ServoBlaster slechts twee servo's herkent:
Servo 0 == > p1-11
Servo 1 == > 01-16
De opdracht echo kan worden gedaan op een van de balg-formaten, met hetzelfde resultaat:
ECHO P1 - 11 = 40% >/dev/servoblaster
ECHO P1 - 16 = 60% >/dev/servoblaster
of
echo 0 = 40% >/dev/servoblaster
echo 1 = 60% >/dev/servoblaster