Control de cámara IP usando servos y un servidor web en Raspberry pi

Introducción

En este artículo vamos a mostrar cómo controlar mediante una página web una cámara IP, creando una cámara motorizada. Para ello, utilizaremos servo motores, un poco de Python y el servidor Flask. La imagen de la cámara podrá verse en una página web junto a los controles para moverla. Mira a continuación una imagen de cómo quedan la interfaz web, y un pequeño vídeo de qué sucede cuando movemos los sliders.  Al ser un proyecto que combina varios componentes, resulta un poco más complejo, pero confiamos en que te guste el resultado y te animes a ponerlo en marcha. Si tienes cualquier duda,  te esperamos como siempre en los comentarios. ¿Te animas a ponerlo en marcha?

 

 

¿Qué necesitamos para el proyecto?

  • Raspberry Pi: hemos usado Raspbian Jessy, pero seguramente el proyecto funcione en cualquier versión posterior (como Stretch)
  • Cámara USB: la típica cámara USB que enchufas en el ordenador.
  • Estructura para mover en horizontal y vertical (pan/tilt)
    • Sin montar (https://www.amazon.de/Two-Axis-Platform-structure-assembly-Instructions-Black/dp/B077S3YZWD/ref=sr_1_4?ie=UTF8&qid=1523908240&sr=8-4&keywords=pan+tilt+bracket+kit)
    • Montada (https://www.amazon.de/Tilt-Kit-Frame-SG90-Servos/dp/B01LWKKLMO/ref=sr_1_2?ie=UTF8&qid=1523908240&sr=8-2&keywords=pan+tilt+bracket+kit)
    • Servos en caso de comprar la estructura sin montar (https://www.amazon.de/Mopei-MG90S-Metal-Flugzeug-Helikopter-4-St%C3%BCck/dp/B06XQD18QN/ref=sr_1_1?ie=UTF8&qid=1523908269&sr=8-1&keywords=servo+mg90s)

Instalar la cámara USB

Hacealgún tiempo publicamos un artículo para instalar una cámara USB y hacer streaming de vídeo con nuestra raspberry pi. En ese artículo te mostramos todo lo que necesitas para instalar la cámara, que es un requisito para este tutorial. Pulsa aquí para ver el artículo: Cómo instalar una cámara web usb y acceder a ella desde tu navegador.

Conectar los Servos

Para conectar los servos, seguiremos el tutorial que creamos en la página: Controlar un servo motor con Rasperry Pi. Utilizamos la librería pigpio para enviar los pulsos necesarios para mover los servos. Si quieres saber un poco más sobre qué son los servos, echa un vistazo aquí o pregunta tus dudas en los comentarios.

En este proyecto, utilizaremos los pines GPIO 2 (giro horizontal) y GPIO 3 (giro vertical) para controlar los servos, aunque si los tienes ocupados con otro proyecto solo tienes que cambiar los pines en el código que te mostraremos en los siguientes apartados. Observa cómo también hemos conectado el pin 5 a la misma GND que la fuente de alimentación.

Nota: para evitar culaquier daño a la Raspberry pi debido a los motores, hemos utilizado una fuente de energía independiente. Como los servos funcionan a 5V, puedes alimentar con la misma fuente de alimentación tanto a la raspberry como a los motores, siempre que tu fuente tenga suficiente potencia. De todas formas, en todos los proyectos con motores recomendamos que sencillamente los alimentes por separado. No alimentes los motores con las salidas de voltaje de la Raspberry: acabarás chamuscando algo.

Instalar Flask

Flask es un servidor que se programa en Python, lo  que nos permitirá utilizar código para controlar nuestra raspberry pi dentro del servidor. Para instalar Flask, te recomendamos seguir nuestro tutorial sobre Flask. De este modo, te familiarizarás con el servidor y cómo lo empleamos para poner en marcha nuestro código.

Preparando el código

Crea los ficheros del proyecto

El proyecto necesita dos ficheros. Uno se trata de la página web, donde tendremos el código html que interactúa con el servidor. El otro es el código del servidor, que recibe las instrucciones de la página web y controla los servo motores que mueven la cámara. En las secciones posteriores podrás copiar el código y pegarlo en los ficheros que te mencionamos a continuación.

  1. Crea un directorio para el proyecto, llámalo proyecto_camara.
  2. En ese directorio deberás poner el código del servidor. Llama al fichero codigo_servidor.py (el código lo encontrarás más abajo, sencillamente cópialo en el editor.).
  3. Dentro del diretorio proyecto_camara, crea un subdirectorio llamado templates. En ese directorio deberás poner el código html. Llama al fichero index.html (el código lo encontrarás más abajo, sencillamente cópialo en el editor).

Código html para la página web

El código de template tiene que colocarse en el subdirectorio proyecto_camara/templates. Cada vez que alguien conecte a la dirección de la raspberry pi en el puerto 5000, el servidor enviará esta template, que tiene los siguientes contenidos:

  • Visualización de la cámara web.
  • Controles de movimiento horizontal y vertical.
  • Código que realiza las llamadas al servidor para mover los motores.
  • Alguna modificación en el css de la página para mejorar el aspecto.

Parametrización del código html

Al tratarse de un prototipo, tendrás que ajustar algunos de los parámetros dentro del código para que el proyecto funcione. Te explicamos a continuación las partes que tendrás que modificar y cómo hacerlo para adaptarlo a tu instalación.

Streaming de cámara

En este parámetro, pondremos la IP de la cámara web. Normalmente, se tratará de la misma raspberry pi, pero puedes tener la cámara instalada en otro lugar y acceder a ella a través de su IP.

Rango de los motores vertical y horizontal (calibrando los servos)

Los servomotores se posicionan en función de la duración de los pulso de la señal que les eviamos en PWM. Aquí hemos calibrado los valore mínimos y máximos para las posiciones que ocupan los servos. Si bien el datasheet indica  un rango más completo de movimiento para los servos, en la práctica no podemos mover completamente el servo en todos los ángulos debido a la estructura que hemos usado para sujetar la cámara. Básicamente, jugamos un poco con los valores, ampliando el rango si vemos que el servo se puede mover fuera de ese rango, y si vemos que se atasca en una u otra dirección disminuyéndolo.

IP del servidor

La IP del servidor se puede escribir en la inputbox en la pantalla. Por defecto tenemos el valor de nuestra Raspberry de prueba, pero tendrás que sustituirlo por la dirección IP de la tuya.

Código completo html

Aquí tienes el código completo html. Recuerda parametrizarlo para tus motores y tu servidor. Recuerda que es un prototipo, si eres un desarrollador web y tienes ganas de prepararnos una template más resultona, estaremos encantados de publicarla ;-).

Código del servidor Flask

El código del servidor flask es muy sencillo. Tiene dos rutas para posicionar los servos, y una ruta para realizar un test (que simplemente mueve los servos de un lado a otro para estar seguros de que lo tenemos todo bien conectado). Recuerda que es un prototipo muy básico. Si eres un desarrollador python con experiencia en Flask y quieres ganas de preparar un código más profesional, ¡estaremos encantados de publicarlo!

Lanzar el servidor de video

Tal como describimos en el artículo de instalación de una cámara de vídeo, el servidor de vídeo se lanza de la siguiente manera:

Lanzar el servidor Flask

Una vez tienes todos los ficheros del proyecto, para lanzar el servidor flask vamos a emplear los siguientes pasos:

Crear el entorno virtual

Los siguientes pasos sólo serán necesarios la primera vez que creemos el entorno virtual. Lo que hacen es crear un entorno virtual en el que trabajaremos (recuerda: el entorno virtual es muy útil cuando estás trabajando en muchos proyectos en python, pues instala las librerías localmente en este entorno y no nos causará problemas con otros proyectos.

Ejecutar el servidor

Estos pasos son los necesarios para trabajar una vez lo tienes instalado todo. Lo que hacen es lanzar el demonio de pigpio (para controlar los servos) y poner en marcha el servidor de Flask.

Y si todo ha ido bien, el siguiente paso es el más satisfactorio, ya que vamos a ver el streaming de vídeo en el servidor, pudiendo controlarlo desde nuestro navegador. Si te sale cualquier mensaje de error, puedes contactar con nosotros en los comentarios.

Acceder al servidor web

¿Estás listo? ¡Este es el paso definitivo! Si todo funciona perfectamente, tendrás un streaming de vídeo en el que podrás controlar la posición horizontal y vertical de la cámara mediante barras de desplazamiento en el navegador. Mira a continuación algunas capturas de pantalla.

 

 

Posibles usos del proyecto e ideas

Te mostramos a continuación algunos proyectos e ideas de lo que puedes hacer con estos programas. ¡Esperamos tus aportaciones en los comentarios!

  • Cámara de seguridad: podrás mover la cámara de derecha a izquierda y arriba y abajo, de manera manual o automatizada, y grabar el streaming de vídeo en un servidor.
  • Vehículo con cámara: ya sea un coche teledirigido, o un quadricóptero, puedes añadirle una cámara y controlarla remotamente para mostrar los vídeos a tus amigos.
  • Cámara web accesible para todo el mundo: ¿Qué te parecería publicar un streaming de vídeo en internet, y permitir a todo el mundo mover la cámara para ver distintas zonas? Puedes instalar esta cámara en una playa, una zona de surf, un campo de golf, ¡donde quieras!

 

¿Te ha gustado? ¿Quieres hacerlo tú? ¿Tienes alguna duda? ¡Escríbenos un comentario!

 

 

(Visto 17 vecess, 1 visitas hoy)
¡Comparte este articulo!

Deja un comentario

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