Añadiendo movimiento: servos

Tener una cámara (o dos) conectadas a nuestra raspi nos hace descubrir rápidamente una de las molestas limitaciones de las camaritas: ¡no se mueven!.
Afortunadamente, hay disponibles un buen montón de posibilidades para añadir este aspecto. Yo me incliné por adquirir unos servomotores

Son baratos, ocupan poco sitio y son algo ruidosos.

Como ya hay muchas páginas por ahí explicando los fundamentos de su funcionamiento, recordaremos aquí dos o tres cosillas: tienen un determinado radio de giro (en este caso 180 grados) y la manera que tienen de moverse es yendo a una determinada posición, que se indica mediante el envío de pulsos cuya longitud determina la amplitud del giro (para gente interesada lo cuentan en, por ejemplo How do servos work? -en inglés- o en Trabajar con Servos -en español-).

Desde un programa nuestra misión será encontrar la forma de enviar esos pulsos a través de las conexiones adecuadas (recuerden interacición entre el mundo físico y el ordenador).

Afortunadamente la red está llena de ejemplos y consejos sobre como hacerlo.

Por ejemplo, los programas: servo, servo2, servoYT, y servoYT2 están basados en lo que se ve en el vídeo Servo control using Raspberry pi (y también, pero menos, en Servo Control with the Raspberry Pi).

Los pasos fundamentales serían, siguiendo el tercer programa, primero indicar los módulos que utilizaremos:

import RPi.GPIO as GPIO
import time

El primero sirve para mandar instrucciones a gravés de los pines adecuados de la raspi. El segundo para manejar los datos relativos al tiempo.

Haremos referencia a los pines por su numeración y ponemos el 11 en modo salida:

GPIO.setmode(GPIO.BOARD)

GPIO.setup(11,GPIO.OUT)

Definimos el controlador con una frecuencia de 50Hz y lo ponemos en marcha, llevándolo a la posición central:

p = GPIO.PWM(11,50)

p.start(7.5)

Finalmente, cambiamos de posición cada segundo, poniéndolo en movimiento:

try:
    while True:
        print "Uno"
        p.ChangeDutyCycle(7.5)
        time.sleep(1)
        print "Dos"
        p.ChangeDutyCycle(12.5)
        time.sleep(1)
        print "Tres"
        p.ChangeDutyCycle(2.5)
        time.sleep(1)

Esto es, empieza en el centro y se va moviendo hacia los extremos. Desde el centro va a uno de los extremos, luego al otro y finalmente vuelve a la posición inicial, como puede verse en este vídeo:

Como se ve hacia el final del vídeo, nada nos impide añadir otro motor (más allá de los pines que haya disponibles) que es el código incluido en el cuarto programa, servoYT2).
Allí se ha añadido el pin 12 y se genera otro controlador (ahora son p1 y p2) y simplemente se van alternando las instrucciones enviadas a uno y a otro. En este mini-vídeo los dos motores en acción:

Próximamente explicaremos el montaje para poner la cámara sobre uno de los motores y poder finalizar el proyecto.

3 comentarios en “Añadiendo movimiento: servos

  1. Pingback: Adding movement: servos | Making Fernand0

  2. Pingback: Movimiento suave con los servos | Mbpfernand0's Blog

  3. Pingback: Detección de paso con el sensor de distancia | Mbpfernand0's Blog

Deja un comentario