para controlar 2 servo-motores
Hola de nuevo!. Llevo unos días probando pi-blaster, se trata de otro modulador de PWM por software, para nuestros Raspberrys. Ya había probado servoblaster, que va de maravilla, pero este va igual de bien y consume mucho menos recursos.Pi-blaster permite controlar el PWM de 8 GPIOs, para nuestro ejemplo vamos a limitarlos a 2 GPIOs, para poder usar el resto de GPIOs para otros menesteres. La instalación es facilísima, primero descargamos:
cd /usr/src git clone https://github.com/sarfata/pi-blaster.git cd pi-blastersi lo dejamos tal cual, tendremos los 8 GPIOs listos para modular PWM. Así que modificamos pi-blaster.c para dejarlo en 2 GPIOs. Esta es la parte del código original:
static uint8_t pin2gpio[] = { 4, // P1-7 17, // P1-11 18, // P1-12 21, // P1-13 22, // P1-15 23, // P1-16 24, // P1-18 25, // P1-22 };y esta es como lo dejamos para que tenga sólo 2:
static uint8_t pin2gpio[] = { 17, // P1-11 18, // P1-12 };El GPIO 17 responderá al código 0 y el GPIO 18 responderá al código 1. Después de hacer unas pruebas, veo que la modulación mínima a la que responden estos servos de juguete es 0.045 y como máximo 0.25, con una precisión la mar de aceptable 0.00001. Compilamos con:
make make installPara usarlo:
echo "0=0.045" > /dev/pi-blaster echo "1=0.25" > /dev/pi-blastercon eso estamos moviendo los servos a esas posiciones. Podemos hacer un bonito script /usr/local/bin/servo.sh:
#!/bin/bash # prueba de servos while ((1)); do for n in $(seq 0.045 0.00001 0.25); do echo "$1=$n" > /dev/pi-blaster ; done for n in $(seq 0.25 -0.00001 0.045); do echo "$1=$n" > /dev/pi-blaster ; done doney lo usamos:
./servo.sh 0 & ./servo.sh 1 &facilísimo. Nos permitimos el lujo de montar unos brazos pan-tilt, la instalación es bastante provisional, no me acuséis de ser un cutre (al menos no por esto):
Hay miles de vídeos en youtube con esto mismo, mis servos son demasiado baratos/malos y requieren más alimentación eléctrica que la que el Raspberry es capaz de proveer, este es mi esquema eléctrico:
Y un vídeo de ejemplo (lo siento por la calidad del vídeo, prometo mejorarla):
Hola felicidades un proyecto genial, yo estoy intentado hacerlo tambien, pero tengo un problema cuando los conecto empiezan a temblar de una forma extraña como si tuviesen parquinson o algo raro... te ha pasado? creo que tengo los mismos servos que tu de dealextreme tpwer pro 9g sg90
ResponderEliminarcomo solucionaste eso? en arduino funcionan bien
gracias
Hola buenas, ten cuidado con las pilas que añades yo he hecho ese mismo circuito y me he cargado la raspberry por sobrevoltaje si lo montas asi mejor poner un diodo para que la bateria no entre a alimentar la raspi o te pasará como a mi...
ResponderEliminaruna de las grandísimas pegas que tiene el raspberry, precisamente es que no tiene limitador de intensidad/voltaje a la entrada. En mi opinión es una cagada, ya que otras plaquitas como el arduino si que lo tienen y encarece el producto pocos céntimos. Yo uso una fuente de alimentación mini-itx para estos menesteres.
EliminarQue tu raspberry descanse en paz ...
ya he comprado otra nueva raspberry para volver al ataque con los servos, que me recomiendas hacer para que no me muera otra?
Eliminarhe intentado volver a hacerlo pero me he dado cuenta que aparte de la raspberry se funció un servo, asi que solo me queda uno pero ese tampoco se menea con el script...
desde arduino funciona asi que vivo me queda un servo pero no quiere funcionar con raspi, jejeje que me aconsejas??
te aconsejo tener cuidado, alimentar servo y raspberry desde la misma fuente, sobre todo con estos servos chungos, yo uso una mini itx para estos menesteres.
EliminarHola que tal? estoy siguiendo tu tutorial para montar la camara pi oficial con el pan tilt por ahora tengo los servos que funcionan y tal pero tengo una duda dices que hay que graduarlos los tuyos a 30... no entiendo bien eso me lo puedes explicar??? gracias yo me compre los servos y y pan tilt en un pack del dealextreme.
ResponderEliminarPor otro lado he intentado hacer la guia de mjpg-stremer pero la url ha cambiado y los paquetes tambien por lo que al seguir esa guia no llego a buen puerto, supongo que es por que ha cambiado todo el escenario del mjpg no?
gracias y a ver si me puedes tirar un cable que estoy a medias :)
Hola, no veo eso de "graduar los mios a 30" ¿te refieres a este mismo post?
Eliminarhay no perdona es que tengo todos los post tuyos abiertos para seguir el orden
Eliminares de este Videocámara de seguridad motorizada
te parecerá una tontería pero ... te importa preguntarmelo en el otro post? Por si a alguien le surge la misma duda.
Eliminarclaro no te preocupes ya lo tienes en el otro :)
EliminarHola que tal Juanmol ya voy por la modulación de los servos, estoy en este punto
ResponderEliminarecho "0=0.045" > /dev/pi-blaster
echo "1=0.25" > /dev/pi-blaster
pero no se exactamente como graduar los mios, no entiendo a que corresponde los valores he hecho pruebas desde que dejan de hacer ruido (no se si se hace asi...)
pero me salen estos valores, a ver que opinas...
0=0.26 --- 0.099
1=0.050 -- 0.25 y para que deje de hacer ruido 0.0
me podrias explicar un poco por favor ando un poco liado y el script de abajo que haces no los hace rular, supongo que será por los valores
gracias compañero
simplemente tienes que encontrar los valores minimos y maximos de tus servos, vas dando valores hasta que deje de moverse. En realidad le estas indicando una posicion a la que moverse, un angulo. Llegará un punto en el que servo no se mueva más, pues justo antes tienes uno de los limites.
EliminarEn el script tienes que trasladar los valores que te ha dado, si no no te funcionará. Es fácil, no mas de un minuto de pruebas.
Buenas Juan Mol, he hecho todo el proceso pero no consigo hacer mover el servo alguna idea de que hago mal? muchas gracias
ResponderEliminarme imagino que cuando ejecutas:
Eliminarecho "0=0.045" > /dev/pi-blaster
echo "1=0.25" > /dev/pi-blaster
no te sale ningún fallo ¿verdad? Has probado otros valores? puede ser que le llegue poca alimentación al raspberry? Si vas a usar una fuente externa, ten mucho cuidado con meterle voltios de más al rasp!
correcto, no me da ningun fallo, he probado con otros valores y nada, la raspberry la alimento con el usb, y el servo con alimentacion externa con un transformador para cargar baterias del mismo voltaje
ResponderEliminarque rango de valores puedo probar?
Gracias
no se, ve probando valores enteros, o incluso hazte un for:
Eliminarfor n in $(seq 1 100);
do
echo "0=$n" > /dev/pi-blaster
done
o algo por el estilo ;)