miércoles, 16 de agosto de 2017

Construye una Cabina de fotos (fotomatón) con Orange Pi


http://orangepiweb.es/fotomaton.php

Construye un fotomatón con Orange Pi

Publicado en Septiembre de 2016 Los fotomatones (cabina o quiosco de fotos) se han convertido en algo muy popular en bodas y otros eventos, proporcionando un montón de diversión para los asistentes a la fiesta. Así que me he decidido a crear uno que almacenará las fotografías para luego poder repartirlas a los invitados.

Que necesitas:

Alimentación
Alimentación
Cámara web
Webcam
Pulsador
Pulsador empotrable
Antes de nada, un par de opciones. Voy a usar una webcam para simplificar el proceso, pero puedes cambiarla por una cámara digital o una reflex, que tendrán muchísima más calidad, todo depende de lo que quieras hacer con las fotos finales (y lo que quieras complicar tu proyecto...). La mayoría de las cámaras se pueden controlar con un programa que se llama gphoto2 o disponen de un puerto en el que conectar un cable que, mediante un pulsador, dispara la cámara. Se puede simular esta pulsación a través de los puertos GPIO.
También puedes conectar un monitor para que la gente pueda ver en directo como saldrán en la foto. Si usas una webcam, puedes usar motion y hacer que en pantalla se vea la captura de la webcam, pero impidiendo que el programa motion haga ninguna captura, ya que se hará a través de un pulsador. Incluso podríamos dejar que entre en modo de suspensión y activarlo mediante un sensor de presencia como vimos en esta guía y que, cuando alguien se ponga delante, mágicamente la pantalla se active. Muy efectista.
También podemos elegir entre almacenar las imágenes en la propia tarjeta de la Pi, o enviarlas a, por ejemplo, Dropbox si disponemos de conexión a internet. Para el envío de imagenes a Dropbox mirad esta guía. Las imágenes se enviarán a la nube y mantendremos el espacio en la Orange Pi. O ambas cosas, con el riesgo de llenar la tarjeta.
Lo primero que haremos será actualizar con update y upgrade, (como siempre) y luego configurar la webcam. Yo he usado Armbian y para tomar imágenes, vamos a usar un sencillo programa que se llama fswebcam:
sudo apt-get install fswebcam
Una vez instalado, podemos probar que todo funciona con:
fswebcam foto.jpg -r 1280x720
Tendremos una fotografía en el directorio desde el que ejecutamos el comando llamada foto.jpg y con una resolución de 1280x720 pixels. La cámara ya funciona.
Como nos interesa disparar la cámara desde un pulsador, vamos a escribir un pequeño programa que lo haga usando un puerto GPIO. Necesitamos instalar cualquiera de las librerías que manejan el BUS GPIO. Para este ejemplo usaré la librería de duxingkei33. Para instalar consulta este otro artículo. Crea un fichero llamado disparo.py con tu editor favorito y escribe el siguiente código:
from pyA20.gpio import gpio
from pyA20.gpio import port
import time
import datetime
import subprocess

sensor = port.PA6

gpio.init()
gpio.setcfg(sensor, gpio.INPUT)

while True:
 if gpio.input(sensor) == 0:
  print("Espera 3 segundos")
  time.sleep(3)
  sufijo = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
  nombre = "orangepi-" + sufijo + ".jpg"
  subprocess.call(["fswebcam", "-r", "1280x720", nombre])
 time.sleep(0.5)
Para probar nos vale con este código. En mi caso, el PIN PA6 (PIN número 7) está en HIGH (valor 1), tengo que conectar el pulsador a través de una resistencia de 10KΩ a GND (masa o tierra). Comprueba el estado del PIN antes de hacer las pruebas. Vamos a ver un diagrama:
Cada vez que se oprima el pulsador, el valor del PIN PA6 será igual a 0, con lo que se hará una pausa de 3 segundos y disparará una fotografía cuyo nombre estará compuesto por la fecha y hora del momento del disparo, así el nombre será único. Ahora tú debes elegir como avisar de la pausa. Puedes hacerlo con leds con un programa muy sencillo que parpadee o si has hecho que se vea la salida de la cámara en un monitor, avisar mediante mensajes. Las posibilidades son infinitas. Imprime una hoja explicando el funcioamiento para pegar sobre la carcasa.
También puedes hacer que dispare varias fotografías con una pausa en medio y luego elegir la mejor o presentarlas como una tira de 4 fotografías como hacen los fotomatones. Repito: las posibilidades son infinitas...
Un apunte. Si tienes poca capacidad de almacenamiento y quieres que las fotos se suban a la nube y borrar cada vez que se haga una nueva foto, simplemente cambia las lineas:
sufijo = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
nombre = "orangepi-" + sufijo + ".jpg"
subprocess.call(["fswebcam", "-r", "1280x720", nombre])
por esta única linea:
subprocess.call(["fswebcam", "-r", "1280x720", "captura.jpg"])
Después sube cada foto, por ejemplo, a dropbox y el archivo se borrará después de cada nueva fotografía, salvando así espacio en disco. Al subirse el archivo, ya se le asigna un nombre único. Esto es bastante arriesgado si se corta la conexión a internet... así que habría que darle una vuelta para no perder ninguna fotografía.
Mételo en una caja, haz los agujero para el objetivo, alimentación y pulsador. Puede caber en una caja del tamaño de una de zapatos. Mi primera prueba la hice con una de botellas de vino.
Al final, he quedado un proyecto muy abierto, con muchos detalles en el aire, porque hay muchas variantes. Si necesitas cualquier tipo de ayuda, escríbeme y resolveremos el problema.
Espero que te haya sido de utilidad, no dudes en escribir un comentario si ves algún error o si puedo ayudarte.

No hay comentarios:

Publicar un comentario