INVESTIGACIÓN
Cámaras antiguas: cómo construir con Arduino un medidor de velocidad del obturador
Nuestro tutorial para realizar con Arduino un dispositivo de medida de la velocidad de un obturador fotográfico. Realizado y experimentado sobre una antigua y rara cámara de 1900.
La espléndida cámara retratada en la foto es una folding que toma sobre placas de vidrio en el formato 82 × 107 mm., llamado también “1/4 de placa”, realizada a mano en 1900 por el célebre químico y constructor de aparatos fotográficos Dr. Rudolf Krugener de Fráncfort, por cuenta del productor londinense George Houghton, titular de la marca registrada Klito, y vendida por un óptico de Mánchester, de nombre A. Franks, a un comprador desconocido que probablemente nunca la usó.
Aunque el origen de este aparato sea fácilmente identificable por algunos detalles constructivos característicos de Krugener y por las etiquetas pegadas en el chasis, no sabemos nada de su historia hasta el momento en que llegó a nuestro Spazio Chirale tras una subasta ganada por nuestros investigadores, siempre a la caza de material significativo para nuestros estudios.
Las condiciones casi perfectas del cuerpo de la cámara, del fuelle y de los relativos accesorios revelan que la máquina nunca ha sido usada.
Es seguramente un objeto muy raro porque monta una óptica constituida por una simple lente menisco y un obturador de rotación con solo dos opciones: la clásica “T” y la “I” que identifica el disparo Instantáneo del cual no se indica el valor de la relativa velocidad. Los diafragmas están constituidos por una serie de orificios circulares colocados en un disco montado frontalmente respecto a la lente.
Sabemos que Krugener construyó cámaras que serían marcadas Klito por Houghton hasta 1912 y en casi la totalidad de los modelos conocidos y clasificados por los sitios de coleccionismo está presente un objetivo más complejo y un obturador central de mayor complejidad.
El modelo en nuestro poder es por tanto uno de los ejemplares de la primerísima serie.
La ausencia de un obturador con regulación de los tiempos puede parecer una limitación, pero en realidad no representaba en aquellos tiempos un problema dado que la sensibilidad típica de las placas fotográficas de vidrio era de aproximadamente 2-3 ISO y solo al final del siglo XIX comenzaron a aparecer placas con emulsión de 25 ISO. Este último hecho, junto con las indicaciones de los números “f” reportados en el selector de los diafragmas que varían de f12 a f34, hace pensar que la velocidad de disparo en la posición I podría estar entre 1/20 y 1/30 de segundo, suficiente para disparar al aire libre en jornadas de normal iluminación solar con cierta adaptabilidad de la exposición.
Es inútil decir que nuestro propósito es utilizar la cámara haciéndola disparar por primera vez en su vida, haciendo justicia a esta joya. Por eso pedimos enseguida dos cajas de placas fotográficas de vidrio de 2 ISO y de 25 ISO.
¡Pues sí! En 2019 es posible adquirir placas fotográficas vírgenes con las mismas características que se tenían en la primera mitad del 1800 o en la segunda mitad, según las preferencias. Todo mérito de Internet y de la cola larga de Anderson, y si no sabéis de qué estamos hablando poco importa porque basta con ir al sitio e-commerce Etsy en este enlace y completar la compra de las placas que os agraden, gracias a la obra de Jason Jane, ingeniero óptico y fotógrafo residente en Míchigan (USA), que decidió iniciar una producción artesanal para devolver a la vida esta antigua tecnología.
Con las placas de 2 ISO los tiempos de exposición tendrán que ser necesariamente de algunos segundos, por lo que utilizaremos la modalidad T con cronometraje manual.
Sería interesante también el uso de la modalidad I, pero ¿cuál será el tiempo efectivo de exposición y sobre todo cuán fiable?
Haría falta un shutter meter. Un dispositivo de este tipo resultaría útil también para verificar la precisión de los obturadores en todos los casos en los que tuviéramos que evaluar la fiabilidad de cámaras de época.
Realizar un shutter meter no es difícil. Se trata de emitir un haz luminoso que atraviese el objetivo y colocar sobre el dorso abierto de la cámara un sensor que registre el tiempo durante el cual se percibe el paso de luz.
Con Arduino es algo que se implementa rápidamente.
Si estáis pensando utilizar como sensor un fotorresistor como el presente en todos los starter kit Arduino, quitároslo enseguida de la cabeza.
La variación de resistencia en las transiciones luminosas de un componente de este tipo emplea de 20 a 30 milisegundos. Un tiempo del mismo orden de magnitud del intervalo que pretendemos medir. En los tiempos rápidos, simplemente no llegaríamos a tiempo a darnos cuenta de que el obturador se ha abierto.
Necesitamos por tanto un sensor que reaccione rápidamente de modo que pueda detectar tiempos al menos hasta 1/1000 de segundo que son el límite para un obturador mecánico.
Fotodiodos y fototransistores son componentes idóneos; sin embargo, buscando en el rico panorama de sensores y componentes chinos a bajo coste que proliferan en el mercado maker, una solución rápida y a bajísimo coste consiste en el empleo de dos componentes fácilmente adquiribles en sitios como Ebay, Amazon o Aliexpress al precio de pocos euros.
El primero es una fuente láser, normalmente utilizada como puntero: dispone de tres terminales, pero basta conectar dos a GND y a +5V para activar el haz luminoso. En los sitios de e-commerce lo encontráis a menudo indicado como laser sensor, pero obviamente la denominación es incorrecta tratándose de un simple actuador.
El sensor de láser, de hecho, es el segundo componente. Se trata de un simple sensor digital. En el PCB están presentes los clásicos tres terminales +Vcc, GND y Signal (S). Una vez alimentado, el sensor proporciona en el terminal S un valor que, según los modelos, puede ser ALTO (+Vcc) o BAJO (GND). Si el sensor es iluminado por un haz láser, tras un tiempo de latencia de pocos microsegundos, el valor en el terminal S es invertido.
Una vez adquiridos los dos componentes podéis testear su funcionamiento con un sencillo sketch Arduino y determinar el tipo de transición que efectúa el sensor. Por ejemplo los nuestros muestran un valor ALTO en ausencia de iluminación láser que se vuelve BAJO si el sensor es golpeado por el haz.
El código fuente que presentamos está por tanto desarrollado para gestionar este comportamiento, pero es fácilmente modificable para gestionar sensores que tienen el comportamiento inverso.
El principio sobre el cual está basado el prototipo de shutter meter es muy simple y puede ser lógicamente resumido en los siguientes pasos:
- La fuente láser está siempre alimentada y se posiciona enfrente del objetivo de la cámara fotográfica.
- El sensor de detección del haz láser está conectado a un PIN digital de Arduino configurable como interrupt (por ejemplo el PIN 2 en Arduino UNO) y se posiciona en la parte trasera de la cámara, cuyo dorso debe estar abierto o quitado, de manera que cuando el obturador se abre, el sensor es golpeado por el haz luminoso. Manteniendo abierto el obturador utilizando la posición T o B es fácil alinear sensor y fuente.
- Una vez alineados sensor y fuente, el obturador puede ser cerrado y el test de medida puede ser efectuado fijando la rueda de los tiempos y efectuando el disparo.
- Cuando el obturador se abre tras el disparo, el sensor cambia de estado y se registra el marcador del tiempo en aquel instante.
- Cuando el obturador se cierra al término del disparo, el sensor cambia nuevamente de estado y se registra el marcador del tiempo corriente en este instante.
- La velocidad del obturador es por tanto calculada efectuando la diferencia entre los marcadores temporales detectados en la apertura y en el cierre del obturador.
En nuestro prototipo conectamos la señal del sensor láser al PIN 2 de Arduino UNO y utilizamos la gestión del relativo interrupt para detectar las medidas de los tiempos.
El código fuente lo encontráis en este enlace: https://github.com/spaziochirale/ArduinoShutterMeter
Quienes hayan seguido nuestros cursos de nivel básico de Arduino y todos quienes conozcan la programación de las Interrupt Service Routine no tendrán ninguna dificultad en interpretar el algoritmo.
En cualquier caso reportamos algunos detalles sobre la estructura del código.
- Para detectar el marcador del tiempo corriente utilizamos la función de librería Arduino micros() que proporciona el número de microsegundos transcurridos desde el encendido de la placa. Los datos devueltos son números enteros potencialmente muy grandes y por tanto de tipo unsigned long.
- Dado que en un único PIN se puede instalar una sola ISR, nuestra rutina, que hemos denominado shutterEvent() e instalado en el PIN 2, es invocada para cualquier transición de estado del sensor (modo CHANGE) y en su interior determina cuál ha sido la transición (de ALTO a BAJO o de BAJO a ALTO) leyendo el valor corriente en el PIN 2.
- Como primera cosa nuestra ISR registra el valor corriente del tiempo, invocando la micros() y actualizando la variable global now. Como es notorio, dentro de la ISR la función micros() no se incrementa, esto es proporciona siempre el mismo valor ya que los interrupts, y por tanto también la gestión del timer interno al microcontrolador, están deshabilitados, pero en nuestro caso necesitamos exactamente el marcador temporal en el instante del evento que ha invocado el interrupt.
- Como segunda acción nuestra ISR determina si el evento que ha causado su invocación ha sido la apertura o el cierre del obturador. Recordemos que nuestro sensor varía de ALTO a BAJO cuando es iluminado y de BAJO a ALTO cuando el haz láser es interrumpido.
- La función ISR shutterEvent() registra el tipo de evento poniendo a 1 las variables globales shutterOpen o shutterClose utilizadas como flag, y por tanto termina. No recibe parámetros, no devuelve valores y desarrolla acciones rápidas y esenciales como es correcto que haga una ISR bien diseñada.
La función loop() de nuestro sketch cicla constantemente testando el valor de los dos flag shutterOpen y shutterClose.
Si resulta activo el flag shutterOpen significa que se ha detectado la apertura del obturador, con consiguiente llamada a la ISR shutterEvent() que ha por tanto actualizado el marcador temporal en la variable now. Tal valor es por tanto copiado en la variable tOpen.
El flag shutterOpen es reseteado a cero y el loop continúa por tanto en su ciclo de test de los dos flag. Si resulta activo el flag shutterClose significa que se ha detectado el cierre del obturador, con consiguiente llamada a la ISR shutterEvent() que ha nuevamente actualizado el marcador temporal en la variable now. Tal valor es por tanto copiado en la variable tClose y se efectúa el cálculo del tiempo transcurrido desde el evento de apertura cuyo marcador temporal está contenido en tOpen.
El flag shutterClose es reseteado y se imprimen los resultados en el formato típico usado en fotografía. En particular la diferencia entre tClose y tOpen proporciona el número de microsegundos durante los cuales el obturador ha permanecido abierto. Si tal tiempo es mayor de 1.000.000 microsegundos, esto es 1 segundo, tal tiempo se indica en segundos y se imprimen también los decimales por efecto de la conversión a float del dato. Para tiempos inferiores al segundo se imprime el valor como fracción sin el uso de los decimales.
El tiempo de ejecución de un ciclo de loop() es de pocos microsegundos, por lo que la lógica de este programa funciona en el range de tiempos deseado que prevé una velocidad máxima de obturación cercana a 1/1000 de seg.
En este caso, el tiempo detectado será de unos 1.000 microsegundos, superior al tiempo de ejecución del ciclo individual de al menos tres órdenes de magnitud.
En el caso de nuestra cámara fotográfica, los tiempos detectados por nuestro shutter meter haciendo disparar varias veces el obturador en la posición I han resultado bastante variables, con lecturas comprendidas entre 1/19 de segundo hasta 1/40 de segundo, con la mayoría de las medidas iguales a unos 1/30 de segundo.
Esto no sorprende ya que estamos hablando de un simple mecanismo de muelle probablemente no utilizado desde hace casi 120 años.
Al final la variabilidad en la exposición está contenida en un intervalo de más o menos 2/3 de stop, coherente con la grosera resolución en la posible elección de los diafragmas que muestran solo los valores f12, f17, f24 y f34.
No debería ser un problema obtener negativos en placa de vidrio decentemente expuestos, considerando que serán desarrollados en bandeja con luz roja, siendo la emulsión ortocromática, con la posibilidad de controlar a vista el índice de contraste.