Cómo controlar una webcam por email con Raspberry Pi y Arduino

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.

Webcam con Raspberry y Arduino

Webcam con Raspberry y Arduino

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:

Esquema Arduino

Esquema Arduino

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:

Esquema Raspberry Pi

Esquema Raspberry Pi

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:

 

diegorys

Ingeniero en Informática, apasionado de la robótica, con alma de investigador en nuevas tecnologías, analista programador y profesional del desarrollo ágil en entornos web y smartphones, con amplios conocimientos y experiencia desde antes de 2008 en entornos WAMP/LAMP, experimentando con Arduino desde 2012 y con Raspberry Pi desde 2014.

Share

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.