banner
Hogar / Noticias / Cómo hacer un escáner automático de película de 35 mm con Arduino Nano y Python
Noticias

Cómo hacer un escáner automático de película de 35 mm con Arduino Nano y Python

Mar 09, 2024Mar 09, 2024

Esperar mientras los escáneres de superficie plana escanean una película negativa en color no es algo que deba entusiasmarse. Este proceso y la posterior precorrección del color pueden tardar entre una hora y dos.

Una configuración típica de escaneo de cámara digital incluye una cámara digital, un trípode (o soporte para copias) y un soporte para películas. Entre los 3, me imagino que el elemento más escaso es el porta películas. Afortunadamente, empresas como Negative Supply comenzaron a fabricar estos soportes de películas tan necesarios. Pero también pueden resultar bastante caros. Afortunadamente, cualquier soporte de película hecho por usted mismo hecho de cartón que sea capaz de empujar y tirar de una película sin cortar de formato 135 (35 mm) mediante un sistema de eje simple funcionará muy bien. ¡Más sobre eso más adelante!

Un poco de historia. De buenas a primeras, debo decir que no estoy afiliado a Negative Supply, Capture One o Negative Lab Pro. Resulta que soy dueño de sus productos y me gusta usarlos (por ahora). Antes, utilizaba la venerable Epson V600 para escanear películas. Esto fue muy bueno ya que me permitió escanear mis propias películas, pero la velocidad no estaba ahí. Además, no disfrutaba completamente de los cereales que estaba consumiendo.

Dicho esto, las razones por las que decidí hacer este proyecto son más multifacéticas. Disfruto apoyando a la comunidad cinematográfica y a empresas centradas en el cine como Negative Supply, Lomography y Negative Lab Pro. También me gusta la idea de impulsar un poco a la comunidad de bricolaje hacia este dominio de nicho. Por último, también tenía muchas ganas de programar un microcontrolador por primera vez. Asumir este proyecto me ha hecho pensar muchas cosas. Lo admito, hace sólo un mes, no podía distinguir entre un Arduino y una Raspberry Pi.

Después de decidirme aleatoriamente por un Arduino, principalmente por su precio, necesitaba encontrar un problema que resolver.

¡Esto NO tomó mucho tiempo! Primero solucioné el problema del desarrollador UniRoller, que era resultado del uso de un tanque experto JOBO 3010. Y luego me concentré en regar automáticamente mis plantas de tomate cuando salía de excursión. Y mi proyecto final y actual era solucionar este problema que tenía al escanear películas. Esto también me dio la excusa para practicar algo de programación en Python.

A día de hoy, he completado 2 programas de escaneo de películas independientes. Uno escrito en lenguaje Python y el otro escrito en C++ (también conocido como boceto de Arduino). Ambos utilizan el mismo hardware, pero existen grandes diferencias en su funcionamiento. Uno está habilitado por la visión por computadora de Python y es completamente autónomo (posicionamiento automatizado, toma de fotografías y paso al siguiente fotograma). El otro sólo mecaniza la progresión de la película. El usuario realiza las correcciones necesarias en la posición de la película y luego toma la fotografía usando los botones del controlador.

Para implementar este proyecto sería ideal conocer Python (C/C++ para Arduino), pero no es necesario hacer clic en el botón Ejecutar en un navegador que ejecute Jupyter Notebook (que se encuentra en Anaconda). Dicho esto, el usuario debe descargar Python y 4 bibliotecas. Recomiendo encarecidamente el paquete Anaconda, ya que es una solución única, con una comunidad en línea muy rica.

Después de esta instalación, también se requieren las bibliotecas de Python, Numpy, pyFirmata, SciPy y cv2. Puede instalar estas bibliotecas de Python utilizando Anaconda-Navigator o PIP install em desde la terminal. Internet está plagado de tutoriales prácticos sobre esto. Dicho esto, he utilizado la interfaz web de Jupyter para crear y ejecutar el código Python. Estos programas tendrán una extensión ipynb. Sin embargo, sería mejor comenzar instalando el IDE de Arduino, ya que aquí es donde comienza todo (los scripts de Arduino tienen una extensión .ino). Habrá más detalles sobre esto más adelante.

Bien, pasemos a la increíble configuración real:

¡Veamos esta configuración en acción!

Modo 1: Solo Arduino y usando la posición de corrección manual:

Modo 2: Corrección automática con Python:

Modo 3: Arduino más Python en acción en un soporte de película de cartón de bricolaje:

Si Python y la automatización no son lo tuyo, pero aun así quieres un motor paso a paso para impulsar tu película. También puedes encontrar un boceto dedicado de Arduino en el sitio de Github. Me gusta este código porque es extremadamente simple de usar y una vez cargado en el microprocesador, usando la aplicación Arduino IDE, uno nunca necesitaría ver un script de computadora, además es un poco más rápido, lo cual es realmente conveniente.

Aquí, las microcorrecciones a izquierda y derecha se realizan utilizando los botones dedicados (los dos del medio en la Figura 5). El botón más a la izquierda es el disparador y el más a la derecha es para pasar al siguiente fotograma. Esta configuración debería funcionar en cámaras Fujifilm y Canon. Esto se debe a que el cable disparador que alguna vez tuve era de la marca Canon y traté de imitar los valores de voltaje que leí en él. Tenga en cuenta que existen riesgos asociados con la conexión de circuitos externos a su cámara. Intente esta configuración de bricolaje bajo su propia responsabilidad.

¿Qué hace un microcontrolador?

En primer lugar, el microcontrolador utilizado aquí se llama Arduino Nano. Hay millones de videos en YouTube de aficionados al bricolaje que utilizan este tablero. Lo esencial de un microcontrolador es un circuito integrado (un chip que tiene muchos componentes eléctricos discretos) que utiliza voltaje discreto (3,3 V o 5 V) para decir sí (en términos informáticos equivale a 1, Verdadero, etc.) o 0 V para decir no (0, Falso, etc.). También hay una zona gris en el medio donde no es bueno, pero no conozco los detalles en este momento. Se comunica mediante sus pines que se encuentran en su lateral.

Estos pines también pueden leer voltajes. Los pines que leen y escriben 1 y 0 se denominan pin digital y se indican con D. Algunos de los pines D también pueden modular el pulso a lo largo del tiempo. Esto se indica con PWM o ~. Y algunos pines pueden leer señales analógicas que se indican con A. Estos no son 1 ni 0. Por lo general, leen un rango de 0 a 1000 en una placa Arduino y así es como ingresamos la velocidad deseada del motor paso a paso. La disposición de los pines de los microcontroladores está disponible en Internet. Entonces, al cablear su circuito, cuide el cableado. Además, no encienda su placa mientras realiza el cableado.

Corrección de la posición de la película usando Python.

Para corregir la posición de la película, Python requiere retroalimentación. Para ello utilizamos la Tarjeta de Captura de Vídeo HDMI a USB 1080p (elemento 4).

Al colocar perfectamente la película en el soporte, se logra la máxima resolución del sensor de la cámara por cada fotograma de 35 mm.

Cuando la resolución máxima se combina con una buena lente macro, puede ser un placer mirar los granos. Para activar esto, se determinan los bordes entre fotogramas y esta información se utiliza durante la fase de corrección. Esto significa que si tenemos un sensor de 24 megapíxeles como el que tenemos en la Fujifilm X-T2, nuestros escaneos tendrán casi 4000 por 6000 píxeles por imagen. Para posicionar el marco perfectamente nuestro programa Python sólo requiere una resolución de 100p. Por lo tanto, la captura de vídeo de 1080p se reduce en Python. Sin embargo, una transmisión de video completa de 1080p con la tarjeta sería una excelente cámara web a través de Skype, Zoom, etc.

La versión actual del programa Python no funcionará con películas positivas en color.

Solo he estado trabajando a tiempo parcial en este proyecto desde agosto pasado. Espero actualizar el programa en un futuro próximo para rollos de película positiva en color. La próxima vez que tenga un rollo de película positiva sin cortes, me tomaré un fin de semana para que esto suceda.

Este es un proyecto de código abierto sujeto a la licencia de código abierto del MIT. Lo que significa que su distribución, cambio y uso son gratuitos. A su vez, el software para detectar fotogramas podría mejorar drásticamente con algoritmos nuevos y sofisticados con el tiempo. Recomiendo encarecidamente a mis compañeros programadores de Python y científicos de datos que bifurquen el proyecto desde mi Github y muestren sus talentos.

Mi intención era que esta página fuera entendida por personas que recién están comenzando su viaje hacia el mundo de los microcontroladores. Por lo tanto, si tienes alguna pregunta o sugerencia no dudes en compartirla.

Comencemos a hacer nuestra máquina de escaneo:

1.Montaje del motor paso a paso y fabricación de un nuevo eje.

2.El controlador

3.Comenzando con el Arduino Nano (Azul) y la placa del Motor Paso a Paso (ROJO)

4.el cableado

5.Descargando desde Github y comenzando

6.Artículos utilizados y costos.

Esta parte del proyecto es quizás una de las más divertidas a medida que las cosas empiezan a tomar forma. Es la parte más fácil, pero paradójicamente también la más difícil. La parte crucial a la que prestar atención es asegurarse de que la tensión de la correa sea igual durante la rotación del eje. Y que no tire del motor paso a paso, ya que está fijado con una cinta de montaje adhesiva de silicona (cinta de doble cara Gorilla). Además, tenga cuidado: al montar las poleas y perillas de sincronización GT2 (Figura 3 a, b y c), no ejerza demasiada fuerza sobre los tornillos ya que la rosca del tornillo podría empañar la pieza de aluminio blando. Esto es lo que me pasó a mí con la perilla de Suministro Negativo.

El motor paso a paso (elemento 1) se monta primero en el soporte del motor paso a paso (elemento 19). Usando la cinta transparente de doble cara Gorilla, el soporte del motor se monta en el soporte de suministro negativo como se ve en la Figura 3. Utilicé este tipo sabiendo que no sería un gran problema despegarlo si era necesario.

Así debería quedar al final cuando todas estas piezas estén montadas y ajustadas. La longitud del eje podría ser 1 cm menor. Pero a veces hacer las cosas es mejor que simplemente esperar a que llegue la pieza perfecta.

El controlador será el mismo para ambas versiones del programa de empuje de película. Sin embargo, los botones tienen una función diferente excepto una, que son los disparadores. Además, el mando azul que ajusta la velocidad de progresión de la película, en la parte superior izquierda, no se utiliza en la versión totalmente automática. Esto se debe a Python. No es tan bueno como Arduino IDE cuando se trata de sincronizar las cosas con precisión.

Es necesario cargar bocetos de Arduino para ambos modos. Para hacer esto necesitarás instalar la aplicación Arduino IDE. Después de abrir la aplicación, desde herramientas/tablero, seleccione "Arduino Nano", desde herramientas/procesador, seleccione "ATmega328P (antiguo gestor de arranque)" y, por último, desde herramientas/puerto, seleccione lo que se parece a "/dev/cu.usbserial -14xx” para usuarios de Mac y posiblemente “/com3” para usuarios de Windows. Tome nota de esta dirección, ya que es necesaria para el programa Python.

En este punto, le recomiendo encarecidamente que pruebe el Blink Sketch que se encuentra en Files/Examples/01.Basics/Blink. Aparecerá una nueva ventana de boceto. En esta ventana, presione el botón Cargar que está en la parte superior izquierda, al lado del botón que tiene un signo de marca. En la parte inferior izquierda, la ventana de boceto abierta mostrará Compilando boceto/Cargando/Carga finalizada y deberías observar un LED en tu Arduino Nano parpadeando. Esto muestra que la placa está funcionando y que puedes cargar un boceto de Arduino. En mi Macbook Pro 2012mid, solo el puerto USB más cercano al puerto de pantalla funciona para cargar bocetos de Arduino. Entonces, si tiene un problema aquí, verifique si otros sitios USB funcionan en su computadora portátil.

Los 2 cables naranjas en la Figura 6 (uno al lado del otro en la parte superior, el otro es rojo pero admito que también parece naranja) alimentan la placa controladora del motor paso a paso. El cableado incorrecto aquí hará que la placa controladora del motor paso a paso deje de funcionar. Además, preste atención a los colores de los cables del motor paso a paso. El cableado correcto garantizará que el motor paso a paso bipolar reciba los voltajes en la secuencia correcta para una rotación exitosa de 360 ​​grados. Pero esto no es tan sensible.

Este es un sistema simple de cablear y no tiene muchos componentes. Sin embargo, durante el cableado, es importante desconectar la alimentación.

Comencemos con el conector de 2,5 mm que se encarga del obturador de la cámara. Necesitará un gato de 3 polos, Figura 8(A). Usar 3 en lugar de 2 evitará la activación del enfoque automático (las lentes manuales son ideales aquí). La sección central (roja en la Figura 8) activa el enfoque automático y no está conectada a la mini placa. El cable negro está conectado a tierra y el cable blanco activa el obturador.

Lo siguiente sería averiguar qué cable es cuál en su conector de 2,5 mm. Un método poco ortodoxo pero confiable es la batería de 9 V y el sensor de lengua. Otra forma sería utilizar el poder de deducción. Para ello, inserte el conector de 2,5 mm en su cámara, dejando todos los cables expuestos (blanco, rojo y negro). Sabiendo que el enfoque automático se activa cuando la sección central está conectada a la sección derecha (probablemente negra), y el obturador de la cámara se activa cuando el lado izquierdo está conectado a la derecha (probablemente blanco), podemos deducir nuestros cables. Pero debo admitir que no estoy seguro de qué sucede en el lado izquierdo cuando primero se conectó con el medio. Con suerte, nada :) La mejor solución sería utilizar un multímetro.

Por lo general, me gusta hacer funcionar el motor paso a paso con 9 V, ya que se calienta con el tiempo, pero si la tensión en la correa es demasiado fuerte, es posible que necesite su fuente de alimentación especificada de 12 V.

Acabo de empezar a usar GitHub. Es una excelente manera de realizar un seguimiento de los cambios y compartir ideas. Si está interesado en cómo se mueve Python a la posición correcta, no dude en consultar el algoritmo. Y además, no dude en bifurcar el proyecto y compartir sus ideas. Puedes encontrarlos y descargarlos aquí.

Un buen lugar para comenzar es ejecutando Arduino Sketch. Esto asegurará que el cableado y los componentes funcionen correctamente. Para hacer esto, descargue Semi-automaticUsingArduino.ino de GitHub y cargue este boceto en su Arduino Nano como se describe en la Sección 3. Esto debería ser todo.

Si su motor paso a paso hace un ruido extraño, juegue con el potenciómetro azul hasta que suene correcto y la velocidad sea la de su agrado. Si la progresión del fotograma de la película se queda corta repetidamente, aumente la variable FrameLength en el boceto y, a la inversa, si avanza demasiado. Este valor probablemente sea específico de su dispositivo, ya que podría haber pequeñas diferencias entre dispositivos. Tome nota de su variable FrameLength, porque será útil cuando utilice el programa Python.

Si lo desea, puede cambiar la resolución del motor paso a paso, puede hacerlo cambiando los valores de los 3 motMS(X)Pin. Por ejemplo, con el modo 0,0,0 son 200 pasos por rotación completa (que es el más rápido), con el modo 1, 1, 1 son 3200 pasos por rotación completa, lo que se conoce como micropasos. Esta es la mayor resolución espacial que podemos lograr con esta placa paso a paso. Esta placa de control paso a paso también tiene otros 3 modos de 400, 800 y 1600 pasos por 1 rotación completa (elemento 2). Esto es más fácil de cambiar en el boceto de Arduino que en el programa Python, ya que requiere cambios en varios lugares.

Si desea que el sistema funcione en modo completamente automático, Arduino necesita un archivo llamado Standart Firmata cargado desde el IDE de Arduino. Este boceto se encuentra en Archivo/Ejemplos/Firmata/StandartFirmata. Esto hace que Arduino Nano esté listo para interactuar con Python. Por otro lado, la biblioteca de Python responsable de comunicarse con Arduino se llama pyFirmata. Con suerte, pyFirmata ya está instalado desde la ventana Anaconda-Navigation o mediante instalación PIP, junto con Cv2, Numpy y SciPy. La biblioteca de tiempo es una biblioteca estándar que ya está instalada. El programa Python se llama Full-AutomaticUsingPython.ipynb y se puede descargar desde Github.

Generalmente usé Amazon para comprar lo que necesitaba para este proyecto. Esto fue principalmente por conveniencia. Tampoco fue necesario que fuera físicamente a las tiendas durante la pandemia. A veces también prefiero la opción de entrega más rápida. Eso significaba que normalmente compraba más piezas de las que necesitaba. Me justifiqué esto porque pensé que lo usaría en otros proyectos.

Si al final también te quedan piezas que no necesitas, siempre puedes donarlas a las escuelas locales. Gasté unos 300 dólares canadienses en esta configuración. Y ahora tengo suficientes resistencias, condensadores, cables de puente y Arduino Nano para toda la vida. Sin embargo, creo que puedes reducir el costo a alrededor de $100-150, si exploras y buscas en Internet sitios como Alibaba, eBay, etc.

Un breve descargo de responsabilidad: si utiliza los enlaces a continuación para su compra, recibiré una pequeña comisión. Este pequeño soborno también podría motivarme a compartir otros proyectos en el futuro. El uso de estos enlaces no afecta el precio. Dicho esto, también te sugiero que utilices otros sitios web a precios más económicos.

0. Lente Venus Laowa 65 mm f/2.8 2X Ultra Macro Apo. Realmente me gusta esta lente.

1. El motor paso a paso. (Sobre el papel, este es idéntico al que he usado. Sólo espero que el diámetro del eje sea el mismo. Desafortunadamente, el que compré ya no está disponible)

2. El controlador del motor paso a paso

3. El microcontrolador

4. Tarjeta de captura de vídeo con salida HDMI a USB

5. Cinturones (se utilizaron 158 mm)

6. Varilla redonda de acero inoxidable de 100 mm x 6 mm (tampoco disponible actualmente). En el futuro podría probar con un diámetro de 6,5 o 7 mm.

7. Mini placas de pruebas

8. Caja de resistencias (se usaron 4 de 10k ohmios en el controlador, uno de 2k ohmios y otro de 5k ohmios como divisor de voltaje para el disparador de la cámara)

9. Ajuste la velocidad del motor paso a paso cuando use solo Arduino (no es necesario para la ayuda de Python)

10. Se utilizaron llaves hexagonales de 1,27 y 1,5 para fabricar el nuevo eje.

11. Fuente de alimentación CC. Corté el cable para exponerlos y usé pinzas de cocodrilo para alimentar la placa. Ésta no es una solución a largo plazo.

12. Imprescindible para conectar los circuitos. Sin embargo, tendrás mucho más de lo que necesitas.

13. Este cable fue útil para el cable del obturador, pero puede que no sea necesario

14. Esta cinta de montaje era bastante buena. El adhesivo era fuerte y pude quitarlo sin problemas.

15. Mucho más de lo necesario, pero usé este tipo de botón

16. Solo se usó una polea GT2 en el motor paso a paso (Dientes: 20, 5 mm de diámetro)

17. Apagar y encender el motor paso a paso (muy importante si quieres utilizar el asa portapelículas)

18. Utilicé un condensador de 1000 uF y 35 V, lo cual fue excesivo. Un 100uF 25V debería ser suficiente

19. Soporte del motor

20. Cinta aislante para conexiones de cables sin soldadura.

21. Conector de 3 secciones de 2,5 mm (resulta que no es necesario cortar el cable del disparador)

22. Dientes: 20, 6,35 mm de diámetro utilizados en el eje.

Espero que hayas disfrutado de este manual de instrucciones.

Sobre el Autor : Seckin Sinan Isik es un fotógrafo que explora el mundo analógico. Las opiniones expresadas en este artículo son únicamente las del autor. Puede encontrar más trabajo de Isik en su sitio web, Facebook e Instagram. Este artículo también fue publicado en su blog.

Modo 1Modo 2Modo 3¿Qué hace un microcontrolador?Corrección de la posición de la película usando Python.Al colocar perfectamente la película en el soporte, se logra la máxima resolución del sensor de la cámara por cada fotograma de 35 mm.La versión actual del programa Python no funcionará con películas positivas en color.1.2.3.4.5.6.Sobre el Autor