Laboratorio: Timelapse: Arduino + FFMPEG

Etiquetas: FFMPEG, Arduino

Source + Doc

Introducción

Éste pequeño tutorial (WIP), si es que merece llamarse así, muestra cómo tomar fotografías automáticamente cada cierto lapso de tiempo, para luego generar un video con las mismas, logrando el bien conocido efecto "Timelapse".

El código es sencillo, espero mejorarlo en algún momento y agregar mas inputs para hacerlo autónomo y no depender de una computadora si es que se quiere modificar el valor.

Materiales utilizados

  • Canon Rebel XT (ó 300 / 350D)
  • Cable USB / Mini USB
  • Seeeduino (Arduino Diecimila Compatible). Se puede adquirir en Ditentec
  • Optoacoplador 4N26 (ó 4N28, 4N35) = u$s0,63 en Ditentec
  • Plug 2.5 mm Stereo(3/32")

Softwares utilizados

Proceso

Las cámaras Canon Rebel o EOS nos permiten conectar un control remoto a través de un plug estándar de 2.5 mm (3/32"), para disparar a distancia, lo cual facilita automatizar la tarea, en este caso con un Arduino (Seeeduino) y un Optoacoplador 4N26.

"Un optoacoplador, también llamado optoaislador o aislador acoplado ópticamente, es un dispositivo de emisión y recepción de luz que funciona como un interruptor excitado mediante la luz. La mencionada luz es emitida por un diodo LED que satura un componente optoelectrónico, normalmente en forma de fototransistor. De este modo se combinan en un solo dispositivo semiconductor, un fotoemisor y un fotorreceptor cuya conexión entre ambos es óptica. Estos elementos se encuentran dentro de un encapsulado que por lo general es del tipo DIP. Se suelen utilizar como medio de protección para dispositivos muy sensibles." - http://es.wikipedia.org/wiki/Optoacoplador

Imágenes

Arduino Canon Rebel Timelapse Schematic

Esquema del circuito.

Prototipo funcionando.

Optoacoplador 4N26

1: Digital Pin 9 del Arduino.
2: GND del Arduino.
3: No se usa.
4: Tip del plug.
5: GND de la camara, si juntáramos el cable verde con el rojo,
cerraríamos el circuito y se dispararía la cámara.
6: No se usa.

Shield: GND de la cámara.
Ring: Foco, equivalente al "Half Press", no lo usamos en este caso.
Tip: Disparador ("Shutter")

Código

int ledPin = 13; // LED en el pin 13
int optoPin = 9;
int lapso = 15; // valor del lapso
char unidad = 's'; //v 's' = segundos, 'm' = minutos
int inicio = 0;
int s = 0;
int m = 0;
int h = 0;
int fotos = 0;
int contador = 0;

void setup(){
// Led
pinMode(ledPin, OUTPUT);
// Opto
pinMode(optoPin, OUTPUT);

Serial.begin(9600);

}


void loop(){
if(inicio == 0){
inicio=1;
delay(10000); // 10 segs de gracia antes de arrancar
}

if(unidad=='m'){contador=m;}else{contador=s;}

if(contador==lapso){
tomaFoto();
Serial.println("Whisky!");
Serial.println(fotos);
contador = 0;
s=0;
m=0;
h=0;
}else{
delay(1000);
s = s+1;
if(s>59){m=m+1; s=0;}
if(m>59){h=h+1; m=0;}
}
}

void tomaFoto(){

digitalWrite(ledPin, HIGH); // prende LED
digitalWrite(optoPin, HIGH); // prende OPTO
delay(300);
digitalWrite(optoPin, LOW); // apaga OPTO
delay(300);
digitalWrite(ledPin, LOW); // apaga LED
fotos = fotos+1;

}
void toggleUnidad(){
// resetea contador y cambia la unidad
contador = 0;
if(unidad=='m'){
unidad = 's';
}else{
unidad = 'm';
}
}

Atención: No copien y peguen, descarguen el .pde desde acá

Generando el video a partir de los .JPG's

En GNU/Linux, teniendo instalado FFMPEG, éste comando obtenido en http://www.munz.li/?p=48 me dió excelentes resultados:

 

$ cd /path/a/fotos/

 

 

$ mencoder -nosound mf://*.jpg -mf w=800:h=371:type=jpg:fps=15 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000:mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o time_lapse-test.avi

 

Ejemplo

Bibliografía

http://wordpress.bolanski.com/
http://www.image-in.com/fredmiranda/Detector.doc
http://www.munz.li/?p=48

Descargas Disponibles

Source + Doc

Confiaron en nosotros:

Política DEYTEC

Nuestros proyectos utilizan software no propietario y de código abierto. Esto permite a nuestros clientes disminuir el costo de soporte y mantenimiento de las aplicaciones, y eliminar la dependencia del desarrollador de la aplicación

Compromiso social

En deytec creemos que internet debe contribuir a la integración de la sociedad en su conjunto, y para eso es necesaria la presencia de todos los actores sociales.

Por esto, deytec colabora brindando herramientas de comunicación a organizaciones sin fines de lucro que puedan llevar a cabo tareas positivas para el desarrollo social.

Entregables

El material entregado al concluir un proyecto consiste en un CD con el código fuente de la aplicación y el manual del usuario, que contiene explicaciones de los distintos módulos, capturas de pantalla y sugerencias de uso.

Deytec.net - Desarrollos y Tecnología. - 2009/2018