IoT: Raspberry Pi Robot med Video Streamer och Pan/Tilt kamera fjärrkontroll över internet (4 / 10 steg)
Steg 4: ServoBlaster Installation
Greta bibliotek för att kontrollera servon är ServoBlaster
Detta är programvara för RaspberryPi, som tillhandahåller ett gränssnitt för att köra flera servon via GPIO stiften. Du styr servo positioner genom att skicka kommandon till drivrutinen säger vilken puls bredd en särskild servo utgång ska använda. Föraren har den bredden för synkpuls förrän du skickar ett nytt kommando begära några andra bredd.
Som standard är det konfigurerad enhet 8 servon, även om du kan konfigurera den för att driva upp till 21. Servon oftast behöver en aktiv hög puls av någonstans mellan 0.5ms och 2.5ms, där bredden för synkpuls styr placeringen av servo. Pulsen bör upprepas ungefär varje 20ms, även om puls frekvens inte är kritisk. Bredd för synkpuls är kritisk, eftersom som översätter direkt till servo position.
Förutom körning servon, kan ServoBlaster konfigureras för att generera puls bredder mellan 0 och 100% av cykeltiden, vilket gör den lämplig för att styra ljusstyrkan på upp till 21 lysdioder, t.ex.
Föraren skapar en enhetsfil, / dev/servoblaster, i vilken du kan skicka kommandon. Kommandot format är antingen
[servo-nummer] = [servo-läge]
(ex.: echo P1 - 11 = 80% >/dev/servoblaster)
eller
P [header]-[pin] = [servo-läge]
(ex: echo P0 = 80% >/dev/servoblaster)
Första, låt oss klona Richardghirst projekt från GITHUB:
CD
sudo git klon https://github.com/richardghirst/PiBits
Ändra dir:
CD PiBits
CD ServoBlaster
CD-användare
Lista innehållet och kontrollera om katalogen innehåller filen "servod.c"
LS
Kompilera och installera filen served.c:
sudo make servod
sudo göra installera
Just nu, måste programmet servod installeras. Ändra behörigheterna och köra programmet för att testa den:
sudo chmod 755 servod
sudo. / servod
Om allt är OK, kan du se på bildskärmen, följande information:
Styrelse modell: 2
GPIO konfiguration: P1 (40 stift)
Med hjälp av hårdvara: PWM
Med DMA-kanal: 14
Idle timeout: funktionshindrade
Antal servon: 8
Servo cykeltid: 20000us
Pulsen steg stegstorlek: 10us
Minsta värde: 50 (500us)
Maximal breddvärde: 250 (2500us)
Output nivåer: Normal
Med P1 stift: 7,11,12,13,15,16,18,22
Mappning av servo:
0 på P1-7 GPIO-4
1 på P1-11 GPIO-17
2 på P1-12 GPIO-18
3 på P1-13 GPIO-27
4 på P1-15 GPIO-22
5 på P1-16 GPIO-23
6 i P1-18 GPIO-24
7 på P1-22 GPIO-25
Observera servo kartläggning ovan. Vi behöver bara 2 servon, så vi måste begränsa stiften skall användas. Låt oss betrakta:
- GPIO.17 (P1-11) kommer att användas för TILT
- GPIO.23 (P1-16) kommer användas för PAN
Om du vill definiera stiften skall användas, skall parametrarna nedan användas:
sudo. / servod--p1pins = 11, 16
Kör ovanstående kommando, visar bildskärmen nu i dess nedre del:
Med P1 stift: 11,16
Mappning av servo:
0 på P1-11 GPIO-17
1 på P1-16 GPIO-23
Observera också att om du pånyttfödd RPi, konfiguration kommer l vara förlorat, så. Det är viktigt att ta det sista kommandot på /etc/rc.local
sudo nano /etc/rc.local
...
CD /home/pi/PiBits/ServoBlaster/user
sudo. / servod--p1pins = 11, 16
CD
...
Det är också viktig förändring den skript nedan:
sudo nano /etc/init.d/servoblaster
...
fallet "$1" i
Start)
/usr/local/sbin/servod $OPTS >/dev/null
ändra till:
/usr/local/sbin/servod --p1pins = 11, 16 $OPTS >/dev/null
...
;; ;; #! / bin/sh
### BÖRJA INIT INFORMATION
# Ger: servoblaster
# Krävs-Start: hostname $local_fs
# Krävs-Stop:
# Bör-Start:
# Standard-Start: 2 3 4 5
# Standard-Stop: 0 1 6
# Kort-beskrivning: starta/stoppa servod.
# Beskrivning: Detta skript startar/stoppar servod.
### AVSLUTA INIT INFO
Stig = / sbin: / usr/sbin: / bin: / usr/bin
. /lib/init/vars.sh
ALTERNATIV = "--idle-timeout = 2000"
STATUSFILE = "/ tmp/servoblaster-status"
om [$(id -u)! = 0]; sedan
ECHO "fel: måste köras som root"
utgång 1
Fi
fallet "$1" i
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)
om [! -e/dev/servoblaster]; sedan
ECHO "fel: / dev/servoblaster finns inte"
utgång 2
Fi
RM -f $STATUSFILE
ECHO "status $STATUSFILE" >/dev/servoblaster
sömn 0,2
om [! -e $STATUSFILE]; sedan
ECHO "fel: servod svarar inte"
utgång 3
Elif grep - q "^ OK" $STATUSFILE; sedan
ECHO "OK"
utgång 0
Elif grep "^ fel:" $STATUSFILE; sedan
utgång 4
annat
ECHO "fel: ingen status från servod"
utgång 5
Fi
;;
*)
ECHO "användning: servoblaster [start|stop|status]" > & 2
utgång 6
;;
ESAC
utgång 0
nu starta om ditt system, så att ändringarna kan vara permanent
sudo omstart
Det var allt. Servo blaster är installerad. Observera att på denna punkt ServoBlaster känner igen bara två servon:
servo 0 == > p1-11
servo 1 == > 01-16
Kommandot echo kan göras på något av de nedan format, med samma resultat:
ECHO P1 - 11 = 40% >/dev/servoblaster
ECHO P1 - 16 = 60% >/dev/servoblaster
eller
ECHO 0 = 40% >/dev/servoblaster
ECHO 1 = 60% >/dev/servoblaster