En este tutorial, vamos a ver cómo poder mover una cámara EyeToy de PS2 conectada a un servomotor y sacar fotos mediante comandos enviados por email, partiendo de que sabemos instalar el entorno Arduino y conectar el EyeToy a la Raspberry. Este proyecto lo he realizado como práctica para el curso Raspberry Pi Básico de la Universidad de Granada.

Descripción del proyecto
En este proyecto vamos a conectar vía USB una placa Arduino a la Rasbperry PI. A su vez, a esta placa le conectaremos un servomotor de 180º, que moverá la cámara web hacia la izquierda o hacia la derecha o la colocará en el centro.
Se conectará, además, un led a la Raspberry Pi que se encenderá cuando se reciba una orden externa. Si ésta es correcta, se encenderá y apagará, mientras que si es errónea parpadeará.
Como resultado, podremos enviar nuevas órdenes al sistema para indicarle que gire la cámara hacia la derecha o hacia la izquierda o centrarla, además de la orden de sacar una foto, y podremos visualizar si la orden es correcta gracias al led. También podremos enviar una orden para detener la ejecución del programa.
Descarga
El código lo tengo compartido en mi cuenta de GitHub:
https://github.com/diegorys/ejemplo-control-webcam-email
Montaje y configuración
Preparación de Arduino
En primer lugar, vamos a preparar el material necesario para Arduino:
- Placa Arduino, con cable USB y fuente de alimentación.
- Servomotor de 180º
- Placa protoboard
- Cables
A continuación, realizamos el montaje, según el siguiente esquema:

Y programamos el firmware que reciba por serial las órdenes necesarias para mover la webcam. El código se encuentra en arduino.ino.
Preparación de la Raspberry Pi
Conectamos al puerto 7 GPIO el led con una resistencia de 47 ohmios, según el siguiente esquema:

Conectamos la placa Arduino a la Raspberry Pi por cable USB. Dado que la Raspberry no tendrá potencia suficiente para alimentar Arduino con un motor, vamos a poner una fuente de alimentación externa a la placa Arduino.
Programación del led
Para que el led funcione, necesitamos importar la siguiente librería:
import RPi.GPIO as GPIO
Importada la librería, tenemos que inicializar GPIO:
GPIO.setmode(GPIO.BOARD) GPIO.setup(7, GPIO.OUT)
Y ya podemos encender el led mediante:
GPIO.output(7, True)
O apagarlo mediante:
GPIO.output(7, False)
Al final del programa, tenemos que liberar GPIO, mediante:
GPIO.cleanup()
Programación de la conexión con Arduino
Para que Rasbperry sea capaz de hablar con Arduino, escribiremos un programa en Python que le envíe órdenes por el puerto serial. Para ello, instalamos, si no lo tenemos ya, la utilidad de Python para el manejo del puerto serie, mediante:
sudo apt-get install python-serial
Después, vamos a averiguar en qué puerto se encuentra Arduino. Para ello, primero lo desconectamos y ejecutamos en el terminal de la Raspberry el siguiente comando:
ls /dev/tty*
Conectamos Arduino, volvemos a ejecutar el comando y aparecerá un nuevo dispositivo. Ése es Arduino. Anotamos el nombre del dispositivo. En mi caso: /dev/ttyACM0.
Una vez conocemos el dispositivo, ya sólo tenemos que inicializar el puerto serie a la misma velocidad que hemos escrito en el firmware grabado en la placa Arduino (9600 en mi caso):
ser = serial.Serial('/dev/ttyACM0', 9600) # send serial data to Arduino
Y enviar órdenes a Arduino:
ser.write('a')
Programación de la Raspberry Pi
Programamos en Python la Raspberry Pi para que sea capaz de recibir órdenes por email, encender y apagar su led, mover la cámara enviando órdenes vía puerto serie a Arduino y disparar fotos.
El código completo del programa se puede ver en raspberry.py.
Script en PHP
Para facilitar el envío de emails y hacer una interfaz web sencilla que permita controlar la cámara, se ha realizado un sencillo script en PHP que envía el mail adecuado según el comando que se seleccione. El código se puede ver en web.php.
Prueba final
El resultado final puede verse en el siguiente vídeo: