Tag Archives: DIY

DIY – Disparador automático con Arduino

Thumbnail

English Version

Resulta que llevo algún tiempo queriendo mancharme las manos con algún proyectito con Arduino y casualmente estos días, leyendo sobre fotografía, he encontrado uno bastante simpático. Inicialmente la idea era desarrollar un disparador remoto para la cámara pero, tras algún que otro problema técnico con el módulo bluetooth que tengo en casa, se quedó en un disparador automático. Esto podría ser interesante por ejemplo para hacer timelapses con poco esfuerzo (el timelapse del gif se ha hecho con este cacharrito).

TImeLapse_1400kb

El cambio no es demasiado traumático puesto que la parte interesante, disparar fotografías con un Arduino, se tiene que resolver igualmente. Una vez que se consigue esto, la razón por la que se disparen pasa a un segundo plano. Antes de seguir con la parte “aburrida”, adjunto un pequeño video en el que se ve el conjunto funcionando.

El primer problema que aparece es cómo comandar el disparo de la cámara con un microcontrolador? Pues resulta que la serie Canon EOS permite hacer esto a través del conector minijack 1.5 mm. No se demasiado sobre otras marcas/series de cámaras pero igualmente debería existir una forma de hacer esto. Aunque parezca sorprendente, tan solo conectando un cable al conector y puenteando Shutter-GND o Focus-GND se consigue que la cámara enfoque o dispare.

Mini_Jack

Obviamente, la forma más directa de hacer esto con un Arudino es usando un par de transistores o optoacopladores conectados dos salidas digitales. El interés de usar optoacoplaores (más concretamente el 4N35) en lugar de transistores reside en conseguir aislar el circuito de la cámara del Arduino y así asegurarnos que ninguna corriente no deseable se cuela en la cámara. Obviamente esto es opcional. El esquema básico es el siguiente.

Schematics

Importante lo de las resistencias a la entrada de los optoacopladores si no los quieres quemar jeje.

El circuito montado sobre una protoboard tiene la siguiente pinta.

Automatic_Shutter_V1

y conectado con la cámara…

Arduino_Camera

Una vez se tiene claro que la cosa funciona bien pasamos a montar una plaquita más compacta

Automatic_Shutter_V2

El código escrito para Arduino no tiene mucho misterio.

void setup() {
   pinMode(8, OUTPUT);
   pinMode(9, OUTPUT);
   digitalWrite(8, LOW);
   digitalWrite(9, LOW);
}

void loop() {
   digitalWrite(8, HIGH); // Focus
   delay(1500); // wait 1.5 second
   digitalWrite(9, HIGH); // Say cheese!
   delay(1000); // wait 1 second
   digitalWrite(8, LOW); 
   digitalWrite(9, LOW);
   delay(2000); 
}

Y listo. Es un proyectito bastante simple y, si os gusta la fotografía, podría seros útil en algún momento. Para cualquier pregunta, comentario o consejo, comenta!

Nos vemos pronto.

Tagged , , , , , ,

DIY: Scanimations

Head_Scanimation_1920

English version.

Resulta que acabo de abrir los ojos y es 2015! (feliz año nuevo por cierto). La consecuencia de las navidades es una cola de posts pendientes esperando a que los exámenes me dejen un par de minutillos libres para ser escritos (además de un par de kilitos de polvorones).

Estas Navidades, buscando algún regalo creativo encontré un par de vídeos que me llamaron la atención. Seguramente los hayas visto alguna vez… En el vídeo se veía cómo con una lámina de acetato en la que había impresa una especia de “código de barras” y un folio con una “imagen codificada” se generaba una animación al mover una capa sobre la otra. Tal como leí en algún sitio, parecía un gif sacado de la pantalla. Tras un poco de investigación di con el nombre de la criatura (tambores)… Scanimation! Resulta que es el nombre que reciben estas animaciones (basadas en algo llamado “patrones de Marié” (wiki)).

Es muy interesante cómo algo tan aparentemente simple puede generar tal efecto así que, rápidamente me puse manos a la obra para ver si era capaz de hacer uno “hecho en casa”! Como intuirás, las herramientas que utilicé son Photoshpo, Illustrator (opcional), y en este caso Matlab, y parece que me he acercado a la solución (siento la mala calidad pero si no quería postear imágenes demasiado pesadas es lo que hay 😦 , para verlo un poco mejor -> Youtube ) :

GIF_Prop

Figura 1: Ejemplo.

El mecanismo es muy simple. La historia está en que según la posición en la que esté el acetato, solo podamos ver UN frame de la animación. Dicho esto, un hipotético flujo de trabajo podría ser:

  1. Coger un frame de la animación.
  2. Poner el acetato encima en una posición.
  3. Eliminar el contenido del frame que queda oculto por las columnas opacas del “código de barras”.
  4. Desplazar el acetato a una nueva posición y volver al paso #1 (con el siguiente frame).

Como podrás imaginar, hay un par de problemas que hay que resolver antes de pasar a la acción. Más específicamente, problemas relacionados con cómo generar el código de barras “mágico”?… bien, como puedes ver en la animación anterior, el código de barras que se desliza es un patrón repetitivo, por tanto, con fijar el ancho de las columnas transparentes-opacas es suficiente no? Obviamente es justo ahí donde está la miga del asunto. Para conseguir generar el efecto, la relación entre el ancho de las columnas opacas y el ancho de las columnas transparentes viene fijado por el número de frames que tenga la animación… QUÉÉ?… nada.. que el grosor de las columnas negras depende del grosor de las columnas transparentes, y además del número de frames que tenga la animación. En caso de tener una animación con N frames, debe cumplirse lo siguiente:

Ancho_{Opaco} = (N-1)\cdot Ancho_{Transparente}

Por tanto, para generar el patrón del acetato, lo primero que tenemos que hacer es fijar el ancho de la columna transparente y lo demás viene rodado. Ahora bien… Qué ancho le damos a esa columna?… malas noticias… no hay una respuesta genérica a esa pregunta, depende. Depende de si pretendes ver el efecto en el ordenador o por contra lo quieres imprimir; y también dependerá del tamaño y resolución de la propia imagen. Normalmente mientrás más finas sean las columnas, mejor será el resultado pero OJO!, si imprimes un patrón con separaciones de 1 pixel… dudo que el resultado sea el esperado.

Ex

Figure 2: Scanimations de la misma animación generadas con tres anchos diferentes.

Vengo de la escuela de “10 minutos de trabajo extra hoy, para trabajar sólo un minuto mañana” así que, en lugar de crear una scanimation a mano, me fuí a Matlab y escribí un pequeño código (próximamente en C, que creo que será más accesible) para generar esto de forma automática así que, aquí tienes un pequeño tutorial de cómo hacerlo funcionar (recursos disponibles aquí).

  • Genera los frames que forman la animación.
  • (CUIDADO) Guarda los frames nombrados secuencialmente (1.jpg, 2.jpg 3.jpg, etc). Es importante para que el código funcione corretamente.
  • Sitúa el archivo “pattern.m” en la misma carpeta donde tienes las imágenes.
  • Abre Matlab y sitúate en la carpeta de trabajo.
  • Ejecuta la función de la siguiente manera: “pattern( número_de_frames , Ancho_columna_Transparente_(en_pixels))
  • Esto generará dos archivos .png uno con el patrón y otro con la animación codificada.
  • (Opcional) En caso de que quieras ver el efecto en el ordenador, simplemente tienes que abrir Photoshop, situar ambas imágenes en capas diferentes y mover la “capa acetato”.

GIF_RESNo creas que la única forma de ver el efecto es deslizando una capa sobre otra. En este asunto, la “perspectiva” juega de nuestra parte. Si colocamos las capas con una pequeña separación entre ellas, seremos capaces de percibir el efecto moviéndonos a su alrededor. El siguiente vídeo contiene un ejemplo práctico bastante vistoso.

Y esto es todo! Como siempre, espero que haya resultado interesante y te invito a añadir o preguntar cualquier cosa en los comentarios.

Cuídate.

Tagged , , , , , , , ,