Mindstorms NXT-G Time lapse

Un time lapse es una técnica fotográfica que consiste en la captación de imágenes fijas tomadas a intervalos temporales determinados. Normalmente estas fotografías se editan en un vídeo tomando como fotogramas cada una de las imágenes. De este modo se pueden mostrar sucesos que en realidad suceden en un intervalo de tiempo muy amplio en apenas unos segundos. Algunos ejemplos muy recurrentes son los atardeceres, el crecimiento de plantas, la construcción de edificios o la descomposición de materia orgánica.

Esta técnica crea una ilusión de imágenes aceleradas en las cuales podemos observar cómo por ejemplo una planta engulle a un insecto en poco tiempo o las vistas de la Estación Espacial Internacional en su órbita, siendo en realidad un proceso mucho más largo.

El time lapse requiere usualmente un programador, llamado intervalómetro, que suele ser un accesorio bastante caro (sobre unos 130 €) y una cámara de gama media-alta donde conectarlo. En éste artículo mostraremos cómo hacerlo con una cámara digital compacta asequible y el Mindstorms NXT de LEGO.

Intervalómetro comercial.

Lo primero que debemos hacer es montar con algunas piezas una carcasa para la instalar la cámara. Lógicamente el montaje de la carcasa variará mucho dependiendo del diseño de la cámara que vayamos a utilizar. También debería tener algún tipo de “patas” que hagan las veces de trípode y permita apuntar con la cámara, pero la estructura tendrá que ser lo suficientemente fuerte para soportar los movimientos.

Carcasa para la cámara.

Esta carcasa deberá incorporar un algún mecanismo que presione el botón de disparo de la cámara. En este caso hemos usado un motor Mindstorms con una biela que al girar presiona el botón con un eje.

Mecanismo para pulsar el botón.

El montaje es bastante sencillo, como se puede ver en las fotos anteriores. En cuanto a la programación hemos hecho dos tipos de programa. El primero es mucho más sencillo, pero tiene el inconveniente de no poder variar el número de fotos o el tiempo entre ellas. El segundo es un programa bastante más complejo, pero permite configurar desde el procesador el número de fotografías y el intervalo de tiempo en un menú antes de iniciar.

Versión sencilla:

Click sobre la imagen para verla más grande.

En la imagen superior podéis ver el pantallazo de la versión sencilla. En primer lugar movemos el motor hacia adelante durante 1 segundo, para que la biela empuje al eje que pulsa el botón. La razón de marcar la duración en segundos es que de este modo el motor puede forzarse y presionar el motor, sin tener que esperar a completar el movimiento para continuar con los siguientes comandos. Después movemos en sentido contrario el motor unos 40 grados, para dejar de presionar el botón. Tras estos movimientos hemos colocado una espera de 5 segundos, que dentro de un bucle, servirá para marcar el intervalo de tiempo entre la toma de las fotografías. El bucle tiene como limitación “contar 5”, para que tras cinco vueltas finalice el bucle y emita un sonido que nos avise de que el programa ha acabado.

Con este programa el robot tomará 5 fotografías con 5 segundos entre ellas. Para cambiar el número de fotos que se van a tomar, deberíamos cambiar la cuenta del bucle, y para cambiar el intervalo de tiempo entre ellas deberíamos cambiar el tiempo de la espera.

Versión compleja:

Click sobre la imagen para verla más grande.

Lo complicado de esta versión no es tanto la programación de los movimientos y las esperas, sino el menú de configuración previo a la toma de las imágenes. En primer lugar mostramos la frase “Mindstorms NXT Time-lapse” en la pantalla durante 3 segundos, tras lo cual inicializamos las variables “photos” y “time”. Luego reiniciamos la pantalla y entramos en una macro llamada “selectphotos”.

Click sobre la imagen para verla más grande.

Dentro de esta macro se encuentra la parte del programa que permite la selección del número de fotos que se van a tomar. Lo primero que hacemos es abrir un bucle y luego mostramos en la pantalla la frase: “How many photos” y en otra línea de texto mostramos el valor de la variable photos. Luego encontramos una variable en la que detectamos si se pulsa el botón iquierdo del procesador. En tal caso leemos el valor de photos y le restamos 5 unidades, y a continuación guardamos el resultado en la misma variable. Fuera de esta bifurcación creamos otra igual, sólo que detectamos si pulsamos el botón derecho y en ese caso sumamos 5. Con esto conseguimos que el valor de photos aumente o disminuya de 5 en 5 unidades. Como limitación del bucle le indicamos pulsar el botón central del procesador.

Tras esta macro continuamos con el programa completo. A continuación del bloque “selectphotos” hacemos una comprobación: comparamos si el valor de photos es menor que 5, en tal caso mostramos en la pantalla la palabra “ERROR” y tras cinco segundos finalizamos el programa. Esto impide que el programa continúe si seleccionamos tomar cero o menos fotografías. Si no se da el caso, continuamos con el programa reiniciando la pantalla y entrando en una nueva macro llamada “selecttime”.

Click sobre la imagen para verla más grande.

Esta macro es muy similar a “selectphotos”. En ella se encuentra la parte del programa que permite la selección del tiempo que se va a transcurrir entre toma y toma. Lo primero que hacemos es abrir un bucle y luego mostramos en la pantalla la frase: “How much time between photos” y en otra línea de texto mostramos el valor de la variable time seguido de la palabra “seconds”. Luego encontramos una variable en la que detectamos si se pulsa el botón iquierdo del procesador. En tal caso leemos el valor de time y le restamos 5 unidades, y a continuación guardamos el resultado en la misma variable. Fuera de esta bifurcación creamos otra igual, sólo que detectamos si pulsamos el botón derecho y en ese caso sumamos 5. Con esto conseguimos que el valor de time aumente o disminuya de 5 en 5 unidades. Como limitación del bucle le indicamos pulsar el botón central del procesador. Tras el bucle, tomamos el valor de time y lo multiplicamos por mil, puesto que el tiempo lo utilizaremos en milisegundos.

Tras esta marco realizamos otra comprobación para ver si time es menor que 5. Si es así mostramos la palabra “ERROR” durante cinco segundos y después finalizamos el programa.

A continuación entramos en otra macro llamada “shooting” en la que tomaremos las fotos con las opciones seleccionadas.

Click sobre la imagen para verla más grande.

Dentro de “shooting” abrimos un bucle en primer lugar. Al principio del bucle usaremos el bloque de HiTechnic PID (podéis ver cómo funciona y cómo conseguir dicho bloque en el artículo Coche con control remoto NXT-G: versión PID + sensor de rotación), y le indicaremos al motor que se mueva hacia adelante hasta que no pueda más (definiendo en ese punto el set point), con una potencia de 25, para que no apriete demasiado el botón de la cámara. Después lo mantendremos en el set point con otro bloque PID indicándole que avance al set point 0, y esperaremos 1 segundo. De este modo le dará tiempo a la cámara a realizar la fotografía. Si la cámara es más lenta y la foto no se realiza, entonces habría que aumentar la espera.

Después tomamos el valor de photos, le restamos una unidad y al resultado le restamos el valor del contador del bucle. Así conseguimos la cantidad de fotografías que quedan, y para mostrarlo en pantalla le añadimos el texto “Photos left: “. Después colocamos otro bloque PID pero esta vez movemos el motor al set point 40, para dejar de pulsar el botón.

Como no se puede modificar el valor de una espera de tiempo, lo que haremos será reiniciar un cronómetro y entrar en un bucle controlado por un valor lógico. Dentro de ese bucle usaremos el valor de time como valor de comparación de la lectura del cronómetro y uniremos el resultado al bucle. Con esto conseguimos que el bucle se repita hasta que el valor del cronómetro es mayor que el valor de time. Como no hacemos nada más en el bucle, lo que hará el robot es esperar sin hacer nada.

Por último, lo que haremos será comprobar si el valor de photos es igual al valor del contador. Si es así saldremos del bucle y acabará la macro “shooting”.

De vuelta en el programa completo, lo único que nos queda es finalizar el programa y avisar que se ha terminado. Para ello mostramos en la pantalla la palabra “Finished” y emitimos un sonido durante cinco segundos.

La cámara:

Antes de ponernos a tomar fotos sería conveniente seguir una serie de instrucciones para que la serie de fotografías nos quede lo mejor posible. Lo mejor para controlar que todas las fotos salgan con los mismos ajustes es usar el modo manual (M en el dial de la cámara), aunque las cámaras asequibles normalmente tienen todos los ajustes automatizados y no permiten tanto control, pero debemos intentar controlar todos los parámetros que podamos.

En primer lugar deberíamos ajustar una combinación de diafragma y exposición adecuadas para la aquello que vayamos a tomar. Si sabemos que la escena se va a oscurecer o iluminar durante la secuencia deberíamos tenerlo en cuenta. También es conveniente enfocar a una misma zona y no cambiar el enfoque, o si no fijar el autofoco en el mismo punto. Además, deberíamos fijar un balance de blancos, no dejarlo en auto, porque si no no se perderán matices en cambios de la iluminación.

Por último, deberíamos ajustar el tamaño de las fotografías que vamos a tomar. Si es para un vídeo, normalmente no es necesario que sean muy grandes (1080 píxeles de ancho son suficientes para una calidad HD) y deberíamos evitar los formatos pesados, como el RAW. De este modo nos aseguramos que podremos sacar cientos de fotos sin preocuparnos de llenar la tarjeta.

Y por último, una buena idea es conectar si es posible el cargador de la batería del Mindstorms y de la cámara para que no se agoten las baterías mientras tomamos la secuencia de fotos.

Ejemplo:

Para finalizar, podéis ver a continuación un vídeo que muestra el funcionamiento del dispositivo y un ejemplo realizado con el mismo.

Comments are closed.