Archivo de la categoría: Joanillo Productions

200 mesas de pinball B2S configuradas y testeadas

He aparcado un tiempo el proyecto de la máquina de dardos por dos motivos. El primero que estoy haciendo un curso de edx.org de Inteligencia Artificial. Y después porque tengo ganas de acabar un virtual pinball de dos pantallas.

Ya tengo configuradas 200 mesas de pinball en modo B2S (Backglass to Screen). Esto significa que tenemos dos pantallas: el playfield (la pantalla principal); y la pantalla que hace de backglass, donde hay el score y otros efectos visuales. He tenido que transformar todas las mesas FS (FullScreen) que tenía a B2S, siempre que haya sido posible. Y he buscado otras mesas chulas hasta llegar a las 200.

La foto que he escogido para ilustrar el post es la mesa Centigrade 37, una mesa Gottlieb de 1980 muy chula que he descubierto.

Por otra parte estoy construyendo el mueble (lo ensearé en los próximos posts), y me queda decidir qué mesa esogeré para las artes. También he de resolver otros aspectos técnicos como el plunger analógico.

darts-machine v0.0.12. Avanzando en el proyecto

Espero que la versión 0.0.12 sea la última antes de mezclar todo el código con la detección y calibracinó de los dards, que utiliza dos cámars web i la librería OpenCV.

La principal novedad de las últimas versiones es que ahora se puede rectificar una entrada de los dardos. Desgraciadamente, ahora tengo claro que no se podrá conseguir una fiabilidad del 100% en la detección de los dardos, o sea que más vale pensar en la lógica que nos permitirá rectificar la puntuación de los dardos. Además de anular el punto y restablecer el estatdo anterior, se propone los puntos más próximos, que son los más probables. Por ejemplo, si hemos detectado D20 y es un error, los puntos más probables son MISS, 20, D1 iyD5.

He puesto colores en la consola, com se ve en la foto, pues la idea es que en la máquina se podrá jugar en esta interficie de consola. Sólo falta mezclar el subsistema de detección. Así pues, la parte gráfica, basada en SDL (ya he hecho pruebas de la migració a SDL), y la interface de los botones que necesitaré, lo dejaré para el final de todo.

Los juegos implementados son el 301 (y sus variantes), Cricket, Count-Up, Halve It y Round the Clock. El código está pensado para que sea fácil añadir nuevos juegos de dardos en caso de que sea necesario. Se puede jugar de 1 a 4 jugadores. El código de momento no prevee jugar por equips, es una mejora que se deja para más adelante si fuese necesario.

El proyecto se encuentra en GitHub:

Detección de los dardos: Primeras pruebas

Ya tengo el prototipo del mueble, y ya puedo empezar a hacer pruebas para detectar los dardos. Como se ve en el video, la detección es muy buena. Si nos fijamos en la configuración, la webcam esta en el mismo plano XY que la diana. Esto creo que tiene ventajas en la detección del dardo; y desventajas: necesitaré 2 webcams, y posiblemente 3 webcams para posicionar con fiabilidad el dardo en la diana.

Utilizamos la librería OpenCV sobre C++, i el flujo básico consiste en hacer una captura de la webcam; lanzar el dardo; y hacer otra captura. Entonces se hace la diferencia de las imágenes; se convierte a binario; se aplica una máscara para eliminar buena parte del dardo. En este momento hemos de ver la part de abajo del dardo, y la punta bien clara. Tenemos un número limitado de puntos blancos. Con estos puntos calculamos el momento, que sería el centro de gravedad de los puntos. Y haciendo un bucle sobre todos los puntos puedo detectar el punt más inferior, que sería la punta del dardo. Finalmente, para eliminar posibles errores, calculo la distancia entre la punta y el momento, que ha de ser un valor pequeño.

Aún queda mucha faena. Por una parte, hay que traducir la detección del dardo a los posibles sectores donde está el dardo. Después añadir otra webcam. Y si añado una tercera webcam, seguramente necesitaré algún USB Hub. El objetivo es utilizar una sola Raspberry Pi 3 para todo el proyecto.

Prototipo de diana de dardos II

Hace unos días construí el primer prototipo de mueble, y ya hicimos unas cuantas pruebas para detectar los dardos. He sacado bastantes conclusiones del primer prototipo, y he llegado a la conclusión de que hay que hacer un mueble nuevo, con unas nuevas dimensiones.

La primera consideración es la distancia de la webcam a la diana. Con la webcam con la que estoy haciendo las pruebas (Creative Live! Cam Sync HD), la distancia de la webcam al centro de la diana ha de ser como mínimo de 46 cm. Otro tema importante es que el plano de la cámara ha de coincidir exactamente con el plano XY de la diana (esta es la manera cómo yo abordo la posición de las cámaras, evidentmente necesitaré dos cámaras, o quizás tres). La iluminación ha de ser uniforme, y sobretodo, la construcción ha de ser sólida. La clave está en que cuando hago la sustracción entre una captura y la siguiente (en la que se ha lanzado un dardo), la diferencia entre las imágenes ha de ser realmente la detección del nuevo dardo (no tiene que haber ningún tipo de ruido).

Ya he estado haciendo pruebas con el nuevo prototipo, y hay que decir que los resultados han sido muy buenos (haré un post y un video próximamente), o sea que puedo afrontar con optimismo la parte más crítica del proyecto.

Com se ve en la imagen, la idea que tengo del mueble es integrar una pantalla de 15 pulgadas justo debajo de la diana, y meterle también tres o cuatro botones que necesitaré para interactuar con el software. La parte del software la tengo bastante avanzada, pero ahora me tengo que centrar más en la detección de los dardos.

Otro tema que tengo que hacer los próximos días es convertir la posición del dardo en la puntuación de la diana. No es necesario decir que con una sola cámara (en el mismo plano XY que la diana) esto es imposible, se necesitarán dos cámaras mínimo.

Lazo amarillo: libertad presos políticos

Finalmente hemos colgado el lazo amarillo desde nuestro balcón hasta el balcón del señor Jaume, en la calle Milà i Fontanals de Barcelona. Hoy, 30 de enero de 2018, día que no se ha podido celebrar el pleno del Parlament porque nuestro presidente Puigdemont no puede venir a defensar su candidatura a la presidencia de la Generalitat.

Cada día recordamos que hay presos políticos: Oriol Junqeras, Quim Forn, Jordi Sánchez y Jordi Cuixart, y gent que está en el exilio y que no puede volver con garantías. Delitos? Lo que es delito es continuar siendo súbditos del Reino de España. Alguien dirá que no hay mayoría para proclamar la idependencia… pues hagamos un referéndum.

Prototipo de diana de dardos con buena iluminación

A ver si doy un empujón al proyecto de la diana electrónica. He avanzado bastante en el software. Ya hice pruebas en su día con la librería OpenCV, y ahora es el momento de atacar la parte crítica del problema, que es la detección fiable de los dardos.

Como el problema es bastante crítico, lo primero será tener la diana con unas condiciones de luz bien controladas, con iluminación uniforme y sin sombras. Para ello he montado una estructura de madera con tira de LEDs por los lados, com se ve en la foto. El siguiente paso será conseguir unas webcams decentes. De momento las pruebas las he hecho con una webcam muy sencilla con resolución de 480px. Estoy esperando una webcam de 720px, que a parte de una mejor resolución espero que tenga mejor calidad. Finalmente también dispongo de una RaspiCam NoIR (la cámera de infrarrojos propia de la Raspberry Pi). Esta sí que tiene una buena resolución y calidad, el problema es que no es USB, y por tanto en una Raspberry Pi sólo puede haber una cámara RaspiCam.

La idea inicial es utilizar una Raspberry Pi 3, con dos webcams USB conectadas. Se trata de ir haciendo pruebas e ir controlando todas las variables y causísticas que se puedan dar. Por suerte, en todo este proceso no estoy solo, sino que hay más gente empeñada en la construcción de una diana eletrónica con dardos de punta de hierro. Concretamente el proyecto https://github.com/hanneshoettinger/opencv-steel-darts y la discusión que se genera en el grupo de Facebook de https://www.facebook.com/groups/281778298914107/. Hacía años que no entraba en el Facebook, ya veo que en las próximas semanas seré un asiduo.

Ya iré explicando mis aventuras y avances.

Mesita Pinball, nueva máquina

Por Navidades acabé esta mesa de pinball, en el formato de mesa de café. Ya es la segunda que he hecho siguiendo este esquema, montando una TV de 32». En este caso he incorporado algunas mejoras: la disposición de los botones y la implementación del nudge.

En el proceso de construcción me han entrado ganas de construir una máquina de pinball con dos monitores (la configuración típica de playfield y backlight), o sea que estoy reuniendo las piezas y ya estoy pensando en el diseño. Será uno de los proyectos para este trimestre.

Nueva máquina: recreativa arcade vertical

Esta semana he acabado una nueva máquina, una recreativa vertical. Curiosamente, es la segunda que hago de forma seguida. A mi este formato me gusta mucho, ya veo que no soy el único.

Como novedad, he mirado de perfeccionar el tema del vidrio que protege la pantalla, y el vidrio del marquee retroiluminado. La idea es que con la fresadora se practican unas ranuras en los laterales, y el vidrio va encastado dentro de estas ranuras. El vidrio se pinta por detrás, siguiendo el marco de la pantalla. Queda un resultado muy profesional.

recreativa dardos v0.0.8

Ya tengo ganas de hacer esta nueva recreativa: una máquina de dardos con detección automática de los dardos y su puntuación. Pero no dardos con punta de plástico. Ha de ser un dartboard original de corcho con dardos de punta metálica.

Para la detección de los dardos había la posibilidad de utilizar una malla resistiva y poder posicionar dónde lanzamos los dardos. Pero creo que no sería de fiar. Lo mejor será utilizar visión por computadora con OpenCV. Ya hablaré sobre el tema más adelante.

De momento he estado trabajando con la lógica de los diferentes juegos de dardos que hay. Los más populares son: 301, 501, Count Up, Cricket, Round the Clock, Halve it. Y ahora ya puedo presentar la primera versión de la aplicación, no funcional, que sólo funciona en la consola de Linux. Esta versión simula partidas reales de hasta 4 jugadores: primero escoges el juego; después número de jugadores; después asignas los usuarios; comenzamos a jugar al juego seleccionado pasando por las diferentes rondas (cada ronda son tres tiradas de los dardos). Y así vamos registrando la puntuación hasta que llegamos al ganador.

En las siguientes versiones del programa (escrito en C++) se tendrá que implementar toda la parte de OpenCV, y finalmente toda la parte de SDL (librería gráfica). Todo tendrá que correr en una Raspberry Pi 3, de manera que el desarrollo lo hago en el portátil, pero asegurando la portabilidad en la RPi3. Este tiene que ser el proyecto estrella de este semestre. Es una idea que me persigue de hace tres años. De hecho no es una idea original, hay diversos proyectos que utilizan dardos con punta de hierro y tableros de corcho o fibra, en vez de las dianas electrónicas con puntas de plástico. Quizás ahora el proyecto más similar sería open-cv-steeldarts, que se está desarrollando en Python y que todavía no es plenamente funcional. Le daré una ojeada sobretodo por el tema de la calibración y detección de los dardos.

Enlaces:

Maria 12 años: caja retroiluminada con timer basado en 555

El domingo Maria cumple 12 años. En esta ocasión he hecho una cajita retroiluminada con tres LEDs SMD. La electrónica no es difícil, se trata de un timer 555 configurado para que esté encendido durante 15 minutos. Ha de servir como punto de luz en la habitación cuando los chavales se van a la cama.

El proyecto lo he diseñado primero con Eagle CADSoft, y luego con KiCAD, pues de hecho estoy migrando a KiCAD, como tiene que ser. El prototipo de la placa PCB lo he hecho con la fresadora. Ya tenía experiencia del año pasado de utilizar el script pcb2gcode con el Eagle, y ahora lo estoy utilizando con el KiCAD, con resultados muy buenos.

El Timer 555 se puede configurar como temporizador o para hacer pulsos. En nuestro caso, hemos optado por un diseño de manera que cuando pulsemos el botón se enciendan los LEDs durante 15 minutos. Los 15 minutos se consiguen escogiendo los valores adecuados de R y C (recordar que RxC tiene unidades de tiempo). He escogido un TLC555CD para minimizar el consum . El TLC555CD es SMD y tiene formato SOIC. La idea es alimentarlo todo con 3V y minimizar al máximo el consum durante los periodos de stand-by, pues se alimenta con 2 piles AAA i se espera que duren bastante tiempo.

He ensayado con la soldadura SMD, de la que no soy ningún experto. El timer TLC555CD (format SOIC-8) lo he soldado manualmente, y ha quedado una soldadura bastante limpia. Los LEDs también son SMD. Si tuviera que hacer otra unidad, probariía con la soldadura SMD al horno.

Este sería un proyecto interesante para hacer muchas unidades en serie, de hecho ya estuve mirando proveedores para aprovisionar una buena cantidad de los componentes. La idea es que todos los componentes fueran SMD, y entonces sí que haría un pedido de placas PCB a un fabricante, pues ahora los precios son razonables.

Cuanto a la parte del fresado la madera es DM de 2mm. Todos los cortes están hechos con la fresadora, así como las letras, donde se ha escogido la fuente Black Rose. La parte más crítica es montar la cajita con los ángulos bien rectos, y pintarlo todo y que quede perfecto. Detrás de las letras se pone un metacrilato blanco, también cortado con la CNC.

Por tanto, es un proyecto simple pero finalmente más laborioso de lo que creía, y ciertamente se puede automatizar en gran medida para hacer una tirada grande. Lo que no se puede automatizar son los nombres que hay que fresar, esto sí que es bajo demanda.

Referencias: