Paso 4: Instalación de ServoBlaster
Una biblioteca de greta que se utilizará para el control de servos es ServoBlaster
Se trata de software para el RaspberryPi, que proporciona una interfaz para controlar varios servos a través de los pines GPIO. Controlar la posición del servo enviando comandos al conductor diciendo: Qué ancho de pulso debe usar una salida de servo particular. El controlador mantiene ese ancho de pulso hasta que usted envíe un comando nuevo solicitando alguna otra anchura.
Por defecto se se configura para servos de la unidad 8, aunque se puede configurar para conducir a 21. Servos normalmente necesitan un pulso alto activo de en algún lugar entre los 0.5ms y 2.5ms, donde el ancho de pulso controla la posición del servo. El pulso debe repetirse aproximadamente cada 20 MS, aunque la frecuencia del pulso no es crítico. La anchura de pulso es crítica, ya se traduce directamente en la posición del servo.
Además de manejar servos, ServoBlaster puede configurarse para generar anchuras de pulso entre 0 y 100% del tiempo de ciclo, lo que es adecuado para controlar el brillo del LED de hasta 21, por ejemplo.
El controlador crea un archivo de dispositivo, / dev/servoblaster, a la que puede enviar comandos. El formato del comando es
[número de servo] = [posición de servo]
(ej.: Eco P1 - 11 = 80% >/dev/servoblaster)
o
P [encabezado]-[pin] = [posición de servo]
(ex: echo P0 = 80% >/dev/servoblaster)
Primero, vamos a clonar Richardghirst proyecto en GITHUB:
CD
sudo git clone https://github.com/richardghirst/PiBits
Cambie dir:
CD PiBits
CD ServoBlaster
usuario CD
El contenido de la lista y verificar si el directorio contiene el archivo "servod.c"
LS
Compilar e instalar el archivo served.c:
sudo make servod
sudo hacer instalar
En este momento, debe instalarse el programa servod. Cambiar los permisos y ejecutar el programa para probarlo:
sudo chmod 755 servod
sudo. / servod
Si todo está bien, se puede ver en el monitor, la siguiente información:
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
Nota el servo asignación anterior. Sólo necesitamos 2 servos, por lo que debemos restringir los pines a utilizar. Vamos a considerar:
- GPIO.17 (P1-11) se utilizará para la inclinación
- GPIO.23 (P1-16) se utiliza para PAN
Para definir los pines a utilizar, se utilizarán los siguientes parámetros:
sudo. / servod--p1pins = 11, 16
Ejecutar el comando anterior, el monitor ahora se mostrará en su parte inferior:
Con pernos que P1: 11,16
Mapeo de servo:
0 a P1-11 GPIO-17
1 en P1-16 GPIO-23
También tenga en cuenta que si reinicia el IPC, la configuración voluntad l perder, así que. es importante incluir el último comando en /etc/rc.local
sudo nano /etc/rc.local
...
CD /home/pi/PiBits/ServoBlaster/user
sudo. / servod--p1pins = 11, 16
CD
...
También es importante cambiar el siguiente script:
sudo nano /etc/init.d/servoblaster
...
Case "$1" en
Inicio)
/usr/local/sbin/servod $OPTS >/dev/null
cambiar a:
/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
ahora reinicie el sistema, por lo que los cambios pueden ser permanentes
sudo reboot
Eso es todo. Blaster de servo está instalado. Tenga en cuenta que en este momento ServoBlaster se reconocen sólo dos servos:
servo 0 == > p1-11
servo 1 == > 01-16
El comando echo se puede hacer en cualquiera de los formatos de abajo, con el mismo resultado:
echo P1 - 11 = 40% >/dev/servoblaster
echo P1 - 16 = 60% >/dev/servoblaster
o
Eco 0 = 40% >/dev/servoblaster
echo 1 = 60% >/dev/servoblaster