Big Arcade

Big Arcade

Ya tengo acabada la nueva máquina de pie , que llamaré Big Arcade. El diseño viene directamente de un cliente que me hizo la petición (supongo que encontró las medidas por Internet), y realmente me gusta. En esta máquina se ha cuidado unos cuantos detalles. Concretamente, se ha puesto un monedero de Industrias Lorenzo, se ha cuidado el sonido, una TV de 21 pulgadas, vidrio protector, y se ha mejorado la colocación y los acabados de la marquesina.

En cuanto al monitor, se consiguió una TV de 21”, aunque sólo tiene una resolución de 640x480px. Si bien la resolución no es ninguna maravilla, al final me gusta estos pixels un poco gordos, y es un consuelo saber que puedo montar máquinas con esta resolución. En esta ocasión el cable HDMI to VGA no me ha dado problemas, y esto es un gran avance pues tengo una pista de por qué en anteriorse ocasiones había tenido tantos problemas con este tipo de cables.

Otra mejora que se ha hecho en esta máuina es poder cambiar el volumen apretando dos botones, una solución totalmente software, tanto en el front-end como en los emuladores. Esta es una solución buena pues ya no es preciso acceder al potenciómetro del amplificador de sonido.

En definitiva, una nueva máquina en que he implementado unas cuantas mejoras en la construcción y en los acabados. Una máquina para disfrutar construyéndola y jugándola.

Y el video:

El Buscaminas (Pescamines, Minesweeper) es uno de los 1001 videojuegos a que tienes que jugar antes de morir. Si tienes una cierta edad, seguro que te has hartado, porque el Buscaminas ha venido en las diferentes versiones de Windows hasta el Windows 7.

Existen diferentes versiones para jugar online. Concretamente, con los alumnos hemos cogido la versión en Javascript de Andrew D. Birrell, que ya tiene unos años, y la hemos actualizado en diferentes aspectos. Cuanto a Javascript, se ha generalizado a NxM celdas. Esto implica crear la tabla de forma dinmica (createElement), y también los eventos (addEventListener). Recordar que en el Buscaminas hemos de distinguir entre el botón izquierdo y el derecho del ratón.

Además, hemos añadido una capa de programación con PHP y MySQL. Ahora que estamos estudiando llamadas asíncronas con AJAX, hemos creado una tabla MySQL, y podemos registrar el usuario y hacer estadísticas de las mejores puntuaciones.

Puedes probar el Buscaminas en:

La máquina de pinball ya no me pertenece, o sea que le he hecho un buen reportaje de fotos y el video. Ya tengo unas cuantas mejoras pensadas para cuando tenga que hacer una nueva. Me gustaría poner un plunger con muelle, con un sensor de fuerza, para disparar la bola. No es ningún invento, el Virtual Pinball ya lo tiene previsto. Y también, claro, poner un monedero.

Esta semana iré a Sant Climent de Llobregat para conseguir un monedero de Industrias Lorenzo, que he de poner en una máquina. Carísimo, a parte de que perderé media mañana para irlo a buscar. Miraré de hacer y documentar un monedero de 50 cts con frontal de hierro, negro, y botón iluminado. Creo que puede quedar bien.

Aquí va el video, y el enlace a Retroplaneta::

Ya tenemos aquí la virtual pinball coffee table. Han pasado 11 meses desde que inicié este proyecto (con muchas cosas por el medio). Al final se ha utilizado PinballX como frontend y Visual Pinball 9 como emulador de mesas pinball en formato FS (fullscreen). Estos programas corren bajo Windows, no utilizaba Windows desde hacía mucho tiempo… Se han incorporado 200 mesas que se han testeado, intentando que fuesen lo más representativas de las diferentes épocas y fabricantes.

En muchos casos se ha tenido que tocar los scripts asociados a las mesas para que la mesa arranque bien y que salga el score de forma correcta. Las mesas que han llevado más faena son las más antiguas (EM, electromecánicas), donde se ha tenido que reposicionar los reels de los scores.

Los high scores de casi todas las mesas son muy difíciles de batir. Se ha hecho el trabajo de rebajar los high scores tocando en el fichero nvram los valores hexadecimales asociados al high score. En la mayoría de los casos se ha conseguido. De esta manera es fácil batir el récord de puntos y poder poner las iniciales al acabar la partida (JQC en mi caso). Es un buen ejemplo y un buen ejercicio de hacking de ficheros binarios.

Después de pasarme tiempo jugando y probantdo estas mesas, puedo decir que las que más me han gustado son las mesas electromecánicas de los años 60 y 70. Valoro de ellas la simplicidad del juego y limpieza del diseño. Mejor que las mesas luminosas y estresantes de los modelos de estado sólido (SS).

Es imposible jugar y conocer en profundidad todas estas mesas. En general las reglas son bastante difíciles de entender y digerir, y yo soy ese tipo de jugador que me basta con que la bola no me caiga entre los flippers. La idea es coger 4 o 5 mesas preferidas y jugar con éstas, conociéndolas más a fondo e intentando batir el récord una y otra vez.

Hay mesas que son muy rápidas y estresantes. Pero hay otras que son más tranquilas y donde la bola no va tan rápida. Es importante tener en mente estas mesas pensando que los niños o gente mayor también se lo puedan pasar bien haciendo unas partiditas.

El hardware que se ha utilizado finalmente:

  • HP Elite 8000 Dual Core 3,2GHz SFF (Small Form Factor), 4GB de RAM y 250GB de Disco Duro
  • Gráfica: ATI 5770 DDR5
  • 2 fuentes de alimentación (la placa base era SFF)
  • I-PAC, 8 botones
  • TV 32 pulgadas

Presupuesto final: 500 euros.

Se han utilizado 8 botones. En el frontal 4 botones iluminados: Coin, Start, Exit, Plunger. En los laterales botones para los flippers y botones para subir y bajar el sonido. Además, los botones tienen doble función dependiendo de si estamos en el front-end o en el emulador.

Cabe decir que yo no conocía demasiado el mundo Pinball antes de este proyecto. De pequeño había jugado alguna vez, pero muy poco, la verdad. Me ha gustado mucho adentrarme en este mundo, ahora ya soy un fan. En resumen, una máquina que promete muchas horas de diversión, en formato coffee table. Fantástica para competir por parejas y pasar un buen rato. Fantástica para revivir el mundo de los pinballs (o petacos, máquinas del millón). De todas formas, es bueno de vez en cuando poder hacer una partida en un pinball de verdad, como el que hay en la Plaça Joanich (Bar De Copas).

Acabado de leer el libro El Mundo del Spectrum, de los autores del podcast y de la web del mismo nombre: Manuel J. Rico Borrego, Jesús Martínez del Vas, Alejandro Ibáñez Muñoz, Javier Ortiz Carrasco y Juan F. Torres Chica. Un libro entretenido y con una edición muy cuidada y colorida. Mientras lo iba leyendo he anotado la referencia de los juegos que salen, y a continuación lo pongo por si es de interés de alguien.

Mientras tanto, tengo pendiente de configurar el emulador ZEsarux en la Raspberry Pi 3 y clasificar unos cuantos juegos. Y también sacar el polvo del Spectrum + que compré de segunda mano hace un par de año. Pero lo que sería bueno para el 2017 sería pillarme para trastear el ZX-UNO, que es una FPGA clavada del Spectrum, que aunque no paricipé en el crowfunding del proyecto, veo que aún se puede conseguir. Bueno, tranquilo, voy a empezar el 2017 con calma… Y Buen Año! para los que lo lean.

Mientras, estos son los juegos que salen en el libro:

3D Space Wars pág 174
Abu Simbel Profanation pág 3, 105
Aeroporto pág 93
After the War pág 98
Albatrossity pág 217
Alchemist pág 207
Amazonia pág 94
Android One pág 76, 194
Android 2 pág 194
Ángel Nieto pág 151
Arc of Yesod pág 196
Arkanoid pág 166
Arkos pág 146
Army Moves pág 98, 109
Aspar pág 86, 110
Asteroids pág 102
Astro Marine Corps (AMC) pág 98, 113
Astrologia pág 94
Atic Atac pág 158, 159
Attack of the Mutant Zombie Flesh Eating Chickens from Mars pág 192
Automania pág 186
Avalon pág 174, 176
Babaliba pág 105
Back to Skool pág 200
Barbarian pág 203
Batman pág 160, 166, 167
Batman the Movie pág 170
Beyond pág 125
Bobby Bearing pág 198
Brian Bloodaxe pág 198
Bruce Lee pág 182
Brunilda, King's Valley pág 216
Bubbler pág 160
Bugaboo: the Flea pág 71
Buggy Ranger pág 95
Camelot Warriors pág 109
Cannon Bubble pág 216
Capitán Trueno pág 146
Carlos Sainz pág 146
Castlevania pág 99
Castlevania Spectral Interlude pág 96
Chequered Flag pág 64
Chichen Itza pág 118
Chuckie Egg pág 31
Cobra pág 166
Columns pág 216
Comando Quatro pág 146
Combat Lynx pág 178
Comercio Cosmico pág 93
Commando pág 128
Contact Sam Cruise pág 200
Cookie pág 159
Cop-Out pág 186
Copa do Mundo pág 94
Corsarios pág 150
Cortocircuito pág 166
Cosmos pág 194
Cozumel pág 118
Cray5 pág 216
Creador Musical II pág 93
Critical Mass pág 178
Curro Jiménez pág 146
Cybernoid pág 176
Cyberun pág 160
Cyclone pág 194, 195
Dangerous Kiss pág 95
Dariust pág 198
Deathchase pág 74
Decathlon pág 6, 127, 165
Deflektor pág 194
Digital Graffiti pág 186
Dizzy Y-Return to Russia pág 98
Dragontorc pág 175
Dustin pág 109
El Escalador Loco pág 73
El Jugador de Ajedrez pág 63
El Lingote pág 6, 128
El Poder Oscuro pág 146
El Quijote pág 118
El Zorro pág 184
Elite pág 98
Emilio Butragueño pág 130
Emilio Sánchez Vicario pág 146
Enduro Racer pág 88
Equinox pág 186, 188
Escuela de Ladrones pág 93
Esquiador pág 93
Everyone's a Wally pág 94, 186
Exolon pág 176
Fairlight pág 198
Fairlight II pág 198
Fernando Martín pág 110
Final Fight pág 184
Fist II pág 203
Flight Simulator pág 93
Forgotter Worlds pág 184
Fortune pág 15
Frankie Goes to Hollywood pág 166
Fred pág 72, 141
Freddy Hardest pág 98, 112
Freddy Hardest en Manhattan Sur pág 95, 210
Full Throttle pág 74
Game Over! pág 98, 107, 110
Garfield pág 198
Gauntlet pág 184
Génesis pág 216
Ghouls'n'Ghosts pág 184
Gift from the Gods pág 166
Goody pág 151
Green Beret pág 166
Gremlins 2 pág 146
Guild of Thieves pág 116
Gunfright pág 160
Hammer Head pág 146
Harrier Attack pág 178
Head Over Heels pág 160, 166, 169
Heartland pág 196
Herbert's Dummy Run pág 186
Highway Encounter pág 194
Hostile All Terrain Encounter pág 194
Hulk pág 119
Humprey pág 144
Hunchback pág 165
Hypersports pág 166
Invasion of the Zombie Monsters pág 216
Jai Alay pág 151
Javato pág 118
Jet Pac pág 61, 74, 158
Jet Set Willy pág 61, 74, 190, 193
Jogos Basicos 1 pág 93
Jogos Basicos 2 pág 93
Joust pág 198
Ke Rulen Los Petas pág 118
Knight Lore pág 158, 159, 162
Knights & Demons pág 94
Kong pág 165
Kung-Fu Master pág 6
La Abadía del Crimen pág 72, 144, 150, 152
La Aventura Espacial pág 118
La Aventura Original pág 117, 118
La Corona Encantada pág 216
La Diosa de Cozumel pág 116
La Guerra de las Vajillas pág 118
La Historia Interminable pág 166
La Pulga pág 71
Legionairo pág 93
Level 9 pág 116
Livingstone, I Presume pág 149
Livingstone, Supongo pág 149
Lorna pág 138
Los Inmortales pág 167
Los Intocables pág 167
Los Ladrones del Tiempo pág 72
Los Templos Sagrados pág 118
Luigi en Circusland pág 129
Lunar Attack pág 174
Lunar Jetman pág 159
Mad Mix Game pág 6, 124
Manic Miner pág 16, 61, 74, 164, 190, 191
Map Game pág 129
Mapsnatch pág 108
Martianoids pág 160
Match Day pág 165, 166
Match Day II pág 166
Metro Cross pág 184
Michel pág 110
Microbot pág 198
Mikie pág 166
Misterio del Nilo pág 144
Mithos pág 150
Moon Patrol pág 109
Mot pág 151
Mystery of the Nile pág 144
Narco Police pág 95, 111, 210
Navy Moves pág 109
Nebulus pág 176
Night Shift pág 185
Nightshade pág 160
Ninjajar pág 216
Noche Agitada pág 95
Nodes of Yesod pág 196
Nonamed pág 109
Olé Toro pág 110
Out Run pág 88
Paradroid pág 176
Paris-Dakar pág 144
Pentagram pág 160
Perico Delgado pág 86, 146
Petrovic pág 130
Phantis pág 98
Phantomas pág 108
Phantomas Saga Infinity pág 216
Phantomasa 1 pág 216
Phantomasa 2 pág 216
Ping Pong pág 166
Platoon pág 166
Pogaboo pág 151
Policarpo Díaz pág 151
Ponte A. pág 93
Presidente pág 94
Prince of Persia pág 59, 106, 143
Profanation pág 141
Pssst pág 8, 159
Psytron pág 119
Pyjamarama pág 186, 187
Quazatron pág 176
Rainbow Islands pág 173
Rambo pág 166
Renegade III pág 206
Revolution pág 194
Risky Woods pág 111
Robin of the Wood pág 196
Robocop pág 167, 170
Rocky pág 109
Saboteur I pág 178
Saboteur II pág 178
Sabre Wulf pág 119, 159
Sabrina pág 88
Saimazoom pág 104, 135
Scuba Dive pág 178
Seiddab Attack pág 174
Serra Pelada pág 94
Sgrizam pág 109
Shadow of the Unicorn pág 125, 186
Shadow Skimmer pág 198
Shao Lin's Road pág 198
Sir Ababol pág 216
Sir Fred pág 142, 143
Sito Pons pág 146
Skool Daze pág 200, 201
Snoopy pág 198
Softtime pág 198
Sokoban pág 216
Spectral Invaders pág 15, 16
Spectrum Micro Chess pág 71
Spirits pág 121
Spy Hunter pág 183
Stainless Steel pág 186
Star Trek pág 186
Starblitz pág 198
Stormlord pág 176
Street Fighter pág 184
Street Hawk pág 166
Strider pág 184
Strike Force SAS pág 186
Strooper pág 146
Styx pág 190
Summer Games pág 184
Super Scrylis pág 129
Survivor pág 123
Tapper pág 184
Taxman pág 192
Tetris pág 6
Thanatos pág 178, 180
The Artist pág 198
The Artist II pág 198
The Great Escape pág 166, 167
The Hobbit pág 202, 205
The Pawn pág 116
The Untouchables pág 170
The Way of the Exploding Fist pág 202, 203
The Way of the Exploding Fist + pág 203
Three Weeks in Paradise pág 186, 189
Top Gun pág 166
Tornado Low Level (TLL) pág 194
Transformers pág 166
Tranz-Am pág 159
Trapper pág 181
Turbo Esprit pág 178
Turbo Girl pág 146
Ulises pág 150
Underwurlde pág 159
Uridium pág 176
Uwol pág 216
Vaqueiro pág 93
Viaje al Centro de la Tierra pág 131, 138
Victory Road pág 206
Videolimpics pág 110
West Bank pág 98
Willy Great Adventure pág 192
Willy Meets pág 192
Winter Games pág 184
World Cup Football pág 94, 181
Wreckage pág 76
Yenght pág 102
Zombie Calavera pág 216
Zona 0 pág 132
Zork pág 116
ZX Columns pág 216
ZX Mines pág 216
Zynaps pág 176

Ya me ha llegado la 3040T-DQ, y esta es la primera prueba…

OpenCV y C++

20/12/2016

Un proyecto para el 2017 será una recreativa de dardos. La idea no es original. Se trata de utilizar una diana de dardos real, de corcho, y los correspondientes dardos de punta metálica, y con un sistema de visión artificial ser capaz de saber a qué sector le hemos dado.

La solución pasa por tener dos webcams conectadas a la Raspberry Pi, pues con una sola webcam no se puede conseguir suficiente precisión. Se tendría que hacer bastantes pruebas para conseguir fiabilidad en la determinación de la posición del dardo. En principio cuento en que dos webcams baratas y compatibles con la RPi (por ejemplo la Logitech Quickcam Express) conectadas a una sola Raspberry Pi sean suficientes, ya veremos si será posible.

Mientras hemos instalado OpenCV en una Raspberry Pi 3 y estoy haciendo las primeras pruebas con OpenCV: capturar un frame de la webcam; diferencia entre dos imágenes; convertir una imagen a gris; convertir una imagen a binario a partir de un umbral; detección de un color; detección de una forma; detección de los contornos y centro de masas,… Todo con C++. Realmente es divertido esto del OpenCV.

En edx.org hay un curso de OpenCV.

Esperemos que todo funcione sin demasiados contratiempos. El siguiente paso sería hacer la interficie de usuario que nos permitirá jugar a los juegos más populares de dardos: 301, 501, Cricket,… y construir un mueble. Me imagino una madera grande con la diana a la derecha, una pantalla de 15” (protegida per un vidrio) a la izquierda, y una marquesina retroiluminada donde están escondidas las dos webcams dirigidas a la diana. Ya veremos, todo esá por hacer.

Todavía tengo por clasificar fotos de insectos de este verano y del anterior. Con el tiempo he aprendido a ir más rápido clasificando insectos, y a no perder tiempo y ofuscarme cuando no encuentro la identificación correcta. A medida de ir haciéndolo he establecido un protocolo bastante claro para proceder. Básicamente necesito un editor de texto con 4 ó 5 documentos; tres ventanas del terminal, una de las cuales es el mysql en modo comando; tres carpetas del explorador de archivos (Nautilus); y tres o cuatro ventanas del Firefox.

Hasta ahora lo hacía una por una. Ahora se trata de ponerlo todo en un script y así ganar un poco de tiempo y comodidad. Además, no es necesario poner el password del mysql, que queda ofuscado. El script queda de la siguiente manera:

#!/bin/bash

MY=$(echo "7878Mx33xicdg444aaiJ5888aba" | tr -d "78" | tr -s "4" | tr -d "cd" | tr -d "b" | tr -s "a" | tr -d "x3" | tr -d "58" | tr -s "8")

#nautilus
/usr/bin/nautilus /home/joan/arthropoda/fotosarthropoda/fotos_que_falten
/usr/bin/nautilus /home/joan/arthropoda/fotosarthropoda/fotos_prov
/usr/bin/nautilus /home/joan/arthropoda/fotosarthropoda/fotos_prov2

#firefox
/usr/bin/firefox http://localhost/arthropoda/ www.flickr.com http://www.biodiversidadvirtual.org/insectarium/ www.google.es &

#gedit
/usr/bin/gedit /home/joan/arthropoda/script_mysql.txt
/usr/bin/gedit /home/joan/arthropoda/per_classificar.txt
/usr/bin/gedit /home/joan/arthropoda/pixtuffarthro/inserts.sql
/usr/bin/gedit /home/joan/arthropoda/pixtuffarthro/updates.sql

#gnome-terminal:
/usr/bin/gnome-terminal --working-directory=/home/joan/arthropoda/scripts
/usr/bin/gnome-terminal --working-directory=/home/joan/arthropoda/pixtuffarthro
mysql -u root -p$MY arthropoda

done

Por cierto, esta semana he abierto una nueva familia de escarabajos: Dasytidae. El bicho me lo han clasificado en IV-biodiversidadvirtual.org, aunque no me han dicho ni el género. Ha sido un poco de lío, pues parece ser que Dasytidae es sinónimo de Melyridae. A veces la ciencia de la taxonomía puede ser muy complicada… Suerte que no me dedico a ello… Yo sencillamente hago fotos de bichos y miro de aprender y maravillarme de lo que nos ofrece la naturaleza.

Mi colección de insectos online:

Aprovechando la moda Pokémon Go, nos han pedido una máquina basada en Pokémon.

El workflow del CNC consta de tres pasos:

  1. Diseño del modelo o pieza. Se hace con software CAD, como por ejemplo LibreCAD, y el formato de salida estandar es dxf
  2. Generar el G-Code (de lo que va este post). Necesitas un programa que sepa leer el formato dxf (donde están definidas líneas, arcos, polilínies, splines, etc.) y genere el código (G-code) que entienden las fresadoras CNC.
  3. El software que sepa interpretar el G-Code y sepa enviar los comandos a la máquina CNC a través del puerto paralelo. Por ejemplo, LinuxCNC o EMC.

De tota esta tool chain el proceso más complicado es el segundo. Concretamente la optimización de los caminos que hará la máquina CNC tiene mucha importancia en el resultado final.

Vamos a verlo con un ejemplo simple y clarificador. Estamos utilizando el dxf2gcode, y realmente va muy bien. Está escrito en Python. Tiene una interficie gráfica, pero lo mejor es que se puede ejecutar en modo consola. Frente a un problema que he tenido y que ya está solucionado, he tenido que buscar una alternativa. Me he encontrado con el proyecto dxf2G (los nombres no son muy originales, ya veis), que está escrito en lenguaje C, son 3000 líneas de código, y se ejecuta en línea de comandos.

El segundo es un proyecto sencillo que funciona muy bien para pequeños, y del que es interesante estudiar el ódigo. Mirando qué hace y cómo lo hace, se encuentra a faltar que no separa las capas del dxf (normalmente se trabaja con capas porque asociamos las capas a un cambio de herramienta, para trabajar con diferentes diámetros de broca), y sobretodo la optimización de caminos, que sería la part difícil de implementar (se hacen tesis doctorales sobre esta materia).

Lo vemos con un ejemplo de dibujar una línea a una profundidad de 3mm, haciendo dos pasadas de 1,5mm. La manera correcta, como lo hace dxf2gcode es hacer una pasada a 1,5mm, agujerear hasta 3mm, y deshacer el camino hasta volver al inicio de la recta. El trozo de G-Code que genera el dxf2gcode es:

(*** LAYER: 0 ***)
T1 M6
S6000

(* SHAPE Nr: 0 *)
G0 X 0.000 Y 0.000
M3 M8
G0 Z 3.000
F150
G1 Z -1.500
F400
G1 X 60.000 Y 0.000
F150
G1 Z -3.000
F400
G1 X 0.000 Y 0.000
F150
G1 Z 3.000
G0 Z 15.000
M9 M5

En cambio, el dxf2G hace la implementación fácil y costosa en tiempo: vamos al origen de la recta; agujereamos a -1,5; hacemos la pasada de la recta; subimos hasta 6mm para no tocar la pieza; volvemos al origen de la recta; agujereamos hasta -3mm; volvemos a repasar la recta fresando a -3mm.

G0 X0.000000 Y0.000000
G0 Z3.000000
G1 Z0
G1 Z-1.500000
G1 X60.000000 Y0.000000
G0 Z6.000000
G0 X0.000000 Y0.000000
G0 Z3.000000
G1 Z-3.000000
G1 X60.000000 Y0.000000
G0 Z6.000000

Total, el segundo código puede tardar el doble de tiempo que el primero. I es que implementar algoritmos de optimización de caminos (toolpath optimization en inglés) no es cosa fácil.

Page 1 of 1212345»...Last »