Cómo construir una cámara estenopeica digital con un Pi de raspberry

| |

COMPARTE EL ARTÍCULO!!!

A finales de 2019, la Fundación Frambuesa Pi sorprendió al mundo con el lanzamiento del diminuto Frambuesa Pi Zero. Además, lo regalaron en la portada de la revista MagPi. Inmediatamente salí corriendo y busqué en varios kioscos hasta que encontré las dos últimas copias en la zona. No estaba seguro de para qué los usaría, pero sabía que su pequeño tamaño me permitiría realizar proyectos interesantes que un Pi de tamaño completo no podría satisfacer.

Debido a mi interés en la astrofotografía, había modificado previamente una cámara web Microsoft LifeCam Cinema HD, quitando su estuche, lente y filtro de corte infrarrojo para exponer el chip CCD desnudo. Lo usé con un estuche hecho a medida en lugar de un ocular en mi telescopio Celestron para la astrofotografía. Ha capturado vistas increíbles de Júpiter, primeros planos de cráteres en la Luna y manchas solares en el Sol (con la protección adecuada de la película de seguridad de Baader).

Incluso antes de eso, había convertido mi cámara réflex de película en una cámara estenopeica perforando un agujero en la tapa de un cuerpo (la tapa que protege el funcionamiento interno de una cámara cuando no tiene una lente fijada) y cubriéndola con un delgado disco cortado de una lata de refresco, perforado con una aguja para proporcionar un estenope. Por casualidad, un día, esta gorra de cuerpo estenopeico estaba sentada en mi escritorio al lado de la webcam de astrofotografía modificada. Me preguntaba si la cámara web tenía el rendimiento suficiente para capturar una imagen desde detrás de la tapa del cuerpo estenopeica. Sólo tomó un minuto con la aplicación Queso de GNOME para verificar que una cámara web estenopeica era realmente una idea viable.

De esta semilla de una idea, tuve una manera de usar uno de mis Pi Zeros de raspberry! Las cámaras estenopeicas que la gente construye son típicamente minimalistas, y no ofrecen ningún control más que la duración de la exposición y la clasificación ISO de la película. Las cámaras digitales, por el contrario, tienen 20 o más botones y cientos de ajustes más enterrados en los menús. Mi objetivo para la cámara digital estenopeica era mantenerme fiel a las tradiciones de la fotografía estenopeica y construir un dispositivo minimalista sin ningún tipo de control, ni siquiera de tiempo de exposición.

La cámara digital estenopeica, creada a partir de una raspberry Pi Zero, una cámara web HD y una cámara compacta de polvo vacío, fue el primer proyecto de una serie de cámaras estenopeicas que construí. Así es como lo hice.

Hardware

Como ya tenía el Pi Zero de raspberry en la mano, necesitaba una webcam para este proyecto. Dado que el Pi Zero se vende al por menor por 4 libras esterlinas en el Reino Unido, quería que otras partes del proyecto tuvieran un precio similar. Gastar 30 libras esterlinas en una cámara para usar con una tarjeta de ordenador de 4 libras esterlinas parece desequilibrado. La respuesta obvia fue ir a un conocido sitio de subastas en Internet y pujar por algunas webcams de segunda mano. Pronto, adquirí una cámara web genérica con resolución HD por sólo £1 más gastos de envío. Después de una rápida prueba para asegurar que funcionaba correctamente con Fedora, me dediqué a desmontar la caja para examinar el tamaño de la electrónica.

Hercules DualPix HD webcam, que sería destripada para extraer la placa de circuito y el sensor de imágenes CCD. .

Luego, necesitaba una caja para guardar la cámara. La placa de circuito de raspberry Pi Zero es una mera 65mm x 30mm x 5mm. La placa de circuito de la webcam es aún más pequeña, aunque tiene un montaje de plástico alrededor del chip CCD para mantener la lente en su sitio. Busqué por toda la casa un contenedor que cabía en las dos pequeñas placas de circuito. Descubrí que la polvera compacta de mi esposa era lo suficientemente ancha para caber en la placa de circuito Pi Zero. Con un poco de manipulación, parecía como si yo también pudiera apretar el tablero de la cámara web dentro.

Polvo compacto que se convirtió en el caso de la cámara estenopeica..

Me propuse quitar la funda de la webcam quitando un puñado de pequeños tornillos para llegar a las entrañas. El tamaño de la carcasa de una cámara web da poca idea del tamaño de la placa de circuito impreso dentro de la misma o de la posición del CCD. Tuve la suerte de que esta webcam era pequeña y con un diseño conveniente. Como estaba haciendo una cámara estenopeica, tuve que quitar la lente para exponer el chip CCD desnudo.

El montaje de plástico era de aproximadamente 1 cm de alto, que sería demasiado alto para caber en el interior del polvo compacto. Podía quitarlo por completo con un par de tornillos más en la parte trasera de la placa de circuito, pero pensé que sería útil guardarlo para bloquear la luz que sale de los huecos de la caja, así que lo recorté a 4 mm de altura usando un cuchillo de artesanía, y luego lo volví a colocar. Doblo las patas del LED para reducir su altura. Finalmente, corté un segundo tubo de plástico montado sobre el micrófono que canalizaba el sonido, ya que no tenía la intención de capturar audio.

Con la lente retirada, el chip CCD desnudo es visible. El collarín cilíndrico mantiene la lente en su lugar y evita que la luz del LED de alimentación estropee la imagen. .

La webcam tenía un cable USB largo con un enchufe de tamaño completo, mientras que el Pi Zero de Raspberry usa un enchufe Micro-USB, así que necesitaba un adaptador USB-Micro-USB. Pero, con el adaptador enchufado, la Pi no cabría dentro de la polvera compacta, como tampoco cabría el cable USB de 1 metro. Así que llevé un cuchillo afilado al adaptador Micro-USB, cortándole completamente el enchufe USB y quitándole el plástico para revelar las pistas de metal que conducen al enchufe Micro-USB. También corté el cable USB de la webcam a unos 6 cm y le quité la cubierta exterior y la envoltura de aluminio para exponer las cuatro hebras de cable individuales. Los soldé directamente a las pistas del enchufe Micro-USB. Ahora la webcam podía conectarse al Pi Zero, y el par aún cabía dentro de la caja compacta de polvo.

El enchufe Micro-USB desmontado con el cable USB de la webcam se suelda directamente en las regletas de contactos individuales. El enchufe ahora sobresale sólo 1cm del Pi Zero de raspberry cuando se conecta..

Originalmente pensé que este sería el final de mi diseño eléctrico, pero después de probarlo, me di cuenta de que no podía saber si la cámara estaba capturando imágenes o incluso encendida. Decidí usar los pines GPIO de la Pi para accionar los indicadores LED. Un LED amarillo se ilumina cuando el software de control de la cámara se está ejecutando, y un LED verde se ilumina cuando la cámara web está capturando una imagen. Conecté los pines BCM 17 y 18 a la pata positiva de los LEDs mediante resistencias limitadoras de corriente de 300 ohmios, y luego conecté ambas patas negativas a una clavija de tierra común.

Los LEDs están conectados a los pines GPIO BCM 17 y BCM 18, con una resistencia de 300 ohmios en serie y una conexión a tierra común .

Después, fue el momento de modificar la polvera compacta. Primero, quité la bandeja interna que sostiene el polvo para liberar espacio dentro de la caja, cortándola con un cuchillo en su bisagra. Planeaba usar el Pi Zero con una batería de banco de energía USB portátil, que no cabía dentro del maletín, así que hice un agujero en el lateral del maletín para el conector del cable USB. Los LEDs tenían que ser visibles fuera de la caja, así que usé una broca de 3mm para hacer dos agujeros en la tapa.

Luego utilicé una broca de 6 mm para hacer un agujero en el centro de la parte inferior de la caja, que cubrí con una fina pieza de metal y utilicé una aguja de coser para perforar un agujero en su centro. Me aseguré de que sólo la punta de la aguja se clavara, ya que al insertar toda la aguja el agujero sería demasiado grande. Utilicé lija fina húmeda/seca para alisar el estenopo, luego volví a perforarlo por el otro lado, de nuevo usando sólo la punta de la aguja. El objetivo de una cámara es conseguir un agujero limpio, redondo, sin deformaciones ni estrías y que apenas deje pasar la luz. Cuanto más pequeño sea el agujero, más nítidas serán las imágenes.

La parte inferior de la caja con la abertura del estenopozo. .

Todo lo que quedaba era ensamblar el dispositivo terminado. Primero fijé la tarjeta de circuito de la webcam en el estuche, usando masilla azul para mantenerla en posición, de modo que el CCD estaba directamente sobre el estenopo. Usar masilla me permite reposicionar fácilmente el CCD cuando necesito limpiar manchas de polvo (y como seguro en caso de que lo ponga en el lugar equivocado). Coloqué el tablero Raspberry Pi Zero directamente sobre el tablero de la webcam. Para proteger contra cortocircuitos eléctricos entre las dos placas, cubrí la parte posterior de la Pi con varias capas de cinta eléctrica.

El Pi Zero de raspberry era tan perfecto para el compacto en polvo que no necesitaba nada más para mantenerlo en posición, además del cable USB para la batería que sobresale por el agujero de la caja. Finalmente, introduje los LEDs a través de los agujeros previamente perforados y los pegué en su lugar. Añadí más cinta eléctrica en las patas de los LEDs para evitar cortocircuitos contra la placa Pi Zero cuando la tapa está cerrada.

El Pi Zero de raspberry se introdujo en la caja con apenas 1 mm de espacio libre en el borde. El enchufe Micro-USB cortado y conectado a la webcam está al lado del enchufe Micro-USB de la batería. .

Software

El hardware de la computadora es inútil sin software para controlarlo, por supuesto. El Pi Zero de Raspberry puede ejecutar el mismo software que un Pi de tamaño completo, pero arrancar una OSimage tradicional de Raspbian es un proceso que consume mucho tiempo debido a la lenta velocidad de la CPU del Zero. Una cámara que tarda más de un minuto en encenderse es una cámara que no tendrá mucho uso en el mundo real. Además, casi nada de lo que un sistema operativo completo de Raspbian funciona es útil para esta cámara. Incluso si desactivo todos los servicios redundantes que se inician al arrancar, el proceso de arranque lleva un tiempo irrazonable. Decidí que el único software de stock que utilizaría sería un gestor de arranque U-Boot y el núcleo de Linux. Un binario de inicio escrito a medida monta el sistema de ficheros raíz desde la tarjeta microSD, carga los módulos del núcleo necesarios para controlar la cámara web, rellena /dev y ejecuta el binario de la aplicación.

El binario de aplicación es otro programa C personalizado que hace el trabajo principal de controlar la cámara. Primero, espera a que el controlador del kernel inicialice la webcam, la abre y la inicializa a través de llamadas v4l ioctl de bajo nivel. Los pines GPIO están configurados para accionar los LEDs a través de /dev/mem.

Con la inicialización fuera del camino, la cámara entra en un bucle. Cada iteración captura un solo fotograma de la cámara web en formato JPEG utilizando la configuración de exposición predeterminada, guarda la imagen directamente en la tarjeta SD y, a continuación, duerme durante tres segundos. Este bucle funciona para siempre hasta que la batería se desenchufa. Esto logra el objetivo original, que era crear una cámara digital con la misma sencillez que una típica cámara estenopeica analógica.

El código para este espacio de usuario personalizado está disponible bajo GPLv3 o cualquier versión posterior. El Pi Zero de Raspberry requiere un binario ARMv6, así que lo construí desde un host x86_64 usando el emulador ARM de QEMU para ejecutar compiladores desde un chroot poblado con la cadena de herramientas para la distribución Pignus (un puerto Fedora 23/rebuild para ARMv6). Ambos binarios estaban estáticamente unidos con glibc, por lo que son autónomos. Construí un disco RAM personalizado que contenía los binarios y algunos módulos necesarios del kernel y lo copié a la tarjeta SD, donde el cargador de arranque puede encontrarlos.

La cámara terminada está completamente escondida dentro del estuche compacto de polvo. El único indicio de algo inusual es el cable USB que sale por un costado.

Tomar fotos

Con el hardware y el software completos, era hora de ver de qué era capaz la cámara. Todo el mundo está familiarizado con la excelente calidad de las imágenes producidas por las cámaras digitales modernas, ya sean DSLR profesionales o teléfonos móviles. Es importante restablecer aquí las expectativas a un nivel más realista. La cámara web HD captura una resolución de 1280×1024 (~1 megapíxel). El CCD lucha por capturar una imagen de la pequeña cantidad de luz permitida a través del estenopo. La webcam aumenta automáticamente la ganancia y el tiempo de exposición para compensar, lo que resulta en imágenes muy ruidosas. Las imágenes también sufren de un rango dinámico muy estrecho, como lo demuestra un histograma aplastado, que tiene que ser estirado en post-procesamiento para obtener blancos y negros verdaderos.

Los mejores resultados se obtienen capturando imágenes en el exterior a plena luz del día, ya que la mayoría de los interiores no tienen suficiente iluminación para registrar cualquier tipo de imagen utilizable. El CCD tiene sólo 1 cm de diámetro y está a sólo unos milímetros del estenopo, lo que crea un campo de visión relativamente estrecho. Por ejemplo, en una venta tomada sosteniendo la cámara a distancia, la cabeza de la persona llena todo el marco. Por último, las imágenes están enfocadas de forma muy suave, lo que es una característica definitoria de todas las cámaras estenopeicas.

Aeropuerto de Farnborough, antiguo edificio terminal

Inicialmente, sólo usé la cámara para capturar un pequeño número de imágenes fijas. Más tarde reduje el retardo del bucle de tres segundos a un segundo y utilicé la cámara utilizada para capturar secuencias de imágenes durante muchos minutos. Convertí las imágenes en videos en lapso de tiempo usando GStreamer.

COMPARTE EL ARTÍCULO!!!

Previous

Teclados mecánicos para programadores y jugadores

Hardware de código abierto: Rápido y maleable

Next

Deja un comentario

shares