Marcos Arcade

 Máquina arcade construida a partir de un antiguo notebook.

El objetivo de este mini proyecto era crear una máquina recreativa para mi sobrino, como regalo sorpresa por su comunión.

Inicialmente me propuse llevar a cabo la construcción de una máquina recreativa típica, en formato empotrado. Pero tanto por falta de espacio en mi casa para poder fabricarla, como luego en su ubicación final (posibles consecuencias con mi cuñada 😁), decidí diseñar un formato pequeño, portable e intuitivo para que fuera más cómodo su transporte y su uso.

Para ello tomé el clásico diseño de caja con pantalla inclinada, reduciendo su tamaño y situando, en lugar de los botones de mando, unos botones de selección de juego. En la parte frontal coloqué un pequeño display para mostrar información del juego activo, nivel de batería y volumen, así como unos conectores para el mando de juego externo.

La siguiente foto muestra el resultado final:


Para llevarlo a cabo reaproveché varios materiales que tenía ya por casa,  principalmente un notebook antiguo que es la base del proyecto, y otros tuvieron que ser adquiridos. Esta es la lista de los principales materiales:

Montaje

El primer problema es que al estar el ordenador encerrado dentro de la caja, el botón de encendido y apagado queda inaccesible. Al ser un ordenador antiguo no es posible usar la opción de la BIOS de arrancar tras detectar energía o similar, por lo que es necesario abrir el portátil para poder acceder al botón de energía de la placa base.




La idea es desoldar el pequeño botón, y soldar un par de cables para poder sacar la señal hacia un pulsador redondo, con el fin de empotrarlo en el lateral de la caja.



La recomendación es buscar en YouTube algún video tutorial sobre como llevar a cabo el desmontaje, ya que cada portátil tiene sus peculiaridades.



Al soldar los dos cables, es aconsejable hacer uso de alguna masa para fijación, con el fin de evitar tirones indeseados en las conexiones de los cables. 
Para poder sacar los cables a través de la carcasa tuve que realizar una pequeña hendidura con un alicate de corte.


Tras el montaje de la carcasa, se comprueba que la señal funciona como se esperaba:


Para la lectura de la botonera, control de pantalla LCD, iluminación... se hace uso de una tarjeta Arduino Mega. 
La señal de cada botón pasa por una resistencia de pull down, y la señal a un pin digital de la tarjeta. 
La señal de cada led se cable de manera similar, pasando por una resistencia para la caída del voltaje restante y hacia un pin digital de la tarjeta.
Antes de insertar los botones y adecuar el cableado en la caja, realizo algunas pruebas con una lamina de cartón para ver el aspecto final.



Para la caja se ha hecho uso de madera contrachapada de 10mm, un material ligero y con un grosor suficiente para ofrecer robustez a la estructura. Para el corte, taladro, cajeado... de las piezas tuve la ayuda de un amigo que dispone de una máquina CNC, por lo que me ahorré mucho trabajo, y me dio un buen acabado de las piezas.
En los laterales y tapa trasera se cuenta con rejillas para ventilación. La tapa superior tiene cuatro taladros para los botones selectores de juego, y en lateral izquierdo un taladro más para el botón de energía, así como dos taladros pequeños para los botones de nivel de volumen. En el frontal hay dos cajeados, uno para la pantalla LCD y otro para el pasamuros de conexiones USB.
Las tapas laterales cuentan con un cajeado para encajar la estructura central, y así ganar rigidez en el montaje final.

Se liman un poco los taladros y se presentan los pulsadores para ver su apariencia.


Se une la tapa frontal y superior mediante dos escuadras 3D, y se inicia el cableado interior de los botones y pantalla LCD.
Los botones arcade tienen un sistema de tuerca para el apriete en la superficie, mientras que la tarjeta Arduino y la pantalla LCD se atornillan a la madera a través de los respectivos taladros.
Se adhieren las placas protoboard con el pegamento que incorporan, y se atornilla el pasamuros USB desde el frontal con los tornillos que incorpora.


La tarjeta Arduino se conecta directamente al ordenador mediante el cable USB, y la pantalla LCD toma la alimentación desde la placa Arduino. La siguiente imagen muestra el aspecto frontal tras las conexiones indicadas.


El led del pulsador de encendido del ordenador se cablea a la salida de 5V de la placa Arduino, de manera que una vez esté alimentada, y por tanto el ordenador encendido, se ilumine en rojo para indicar el estado de alimentación.
Se realizan algunos ensayos con la parte construida de la consola, comprobando la correcta conexión de los mandos de juego así como de comunicación con la tarjeta Arduino.



Una gran aliada en este proceso fue mi Anet A8, la cual utilicé para producir abrazaderas, esquineras, escuadras, agarraderas...
En su lugar podía haberse adquirido todo ese material en una ferretería, pero ya que contaba con la herramienta le saqué partido.



Se avanza con el cableado interior, ubicando y fijando el transformador del portátil mediante una abrazadera, así como fijar el HUB USB para las conexiones de mandos de juego y alimentación del convertidor de video VGA-HDMI. 
Se fija también con adhesivo el zumbador que se conecta a la placa Arduino.



El siguiente problema es conseguir elevar el portátil a la altura adecuada, de manera que la pantalla quede encajada con el marco de madera de la estructura.



Para ello se utilizan dos perfiles con guía metálicos, dando el ángulo necesario para que la pantalla apoye en la pieza de madera. Se realizan varias pruebas y mediciones para asegurar la correcta posición, y que el ordenador se oriente correctamente hacia el marco frontal de la consola.



Se atornilla a través de la tapa trasera del portátil, desde dentro hacia afuera, fijando con tuercas los tornillos a la guía y dejando el ordenador inmóvil en la posición adecuada. Se utiliza una escuadra 3D para apoyar por detrás la pantalla, y evitar con ello que ceda hacia atrás en el montaje. 
Los perfiles se atornillan desde el exterior de la consola, fijando con arandela  y tuerca desde dentro. Al disponer de guías internas los perfiles, se puede hacer ajuste como un coliso, adelantando o atrasando los perfiles para el ajuste fino.




Se pintan las piezas de madera de la consola con pintura blanca y azul, dejando en blanco la parte de la botonera y frontal con la pantalla LCD.
Una vez bien seca la pintura, se montan todas las piezas provisionalmente para ver el aspecto de la pantalla tras el anclaje del ordenador.



Se atornillan dos agarraderas laterales, con tornillos pasantes y con tuerca, de manera que se disponga de una forma segura y cómoda de transporte de la consola.




Se lleva a cabo el cierre de la caja. Para ello se encola todo un lateral, y se refuerza con escuadras atornilladas. Se deja un lateral sin encolar, de manera que sea accesible si es necesario realizar alguna tarea de mantenimiento.
Se lleva a cabo la instalación de los vinilos, cuidando de no dejar burbujas y utilizando un par de perfiles 3D para asegurar las uniones de los bordes.




Tras el montaje la máquina tiene el siguiente aspecto, a falta de los detalles finales.




Se decoran los marcos, laterales y trasera con pegatinas y vinilos. Se aprovechan los adhesivos para tapar alguna imperfección en la pintura.



Se atornilla la puerta trasera de registro, haciendo uso de una bisagra y un cerrojo corredero.


Como el panel de mandos de juego no tenia identificados los botones, uso unos adhesivos para identificar todos los mandos.



Se elabora un pequeño manual de uso para la consola, y con eso se completa todo el proceso de construcción del arcade.








Programación

Tras ver como se llevó a cabo el montaje, queda la parte de programación y configuración.
Para el arcade elegí cuatro juegos, uno seleccionable con cada botón:
  • Rayman (PsOne)

  • Pong (MAME Emulator)


  • Super Mario World 2 (Super Nintendo)

  • Marvel vs Capcom (MAME Emulator)


Para la consola se llevo a cabo la programación de dos capas, por un lado la tarjeta de control Arduino y por otro una aplicación que permitiera lanzar y cerrar los juegos.

Arcade firmware

El microcontrolador Arduino es el encargado de comunicarse con todos los botones del arcade, así como controlar la pantalla LCD y el zumbador de inicio de sesión.

Para el control de la pantalla LCD se hace uso de la librería LiquidCrystal_I2C
Se programa una pequeña máquina de estados para indicar en el display:
  • Arranque inicial de la consola
  • Situación actual de volumen y batería
  • Iniciando juego
  • Juego activo






Para el control de la botonera se contempla otra máquina de estados, con las siguiente etapas:
  • Botonera inactiva (esperando comunicación con aplicación de control), representada con el encendido alternado entre los botones
  • Botonera preparada (esperando pulsación para iniciar juego), representada con todos los botones apagados.
  • Botonera iniciando/parando juego, representada con el parpadeo del botón pulsado.
  • Botonera en juego, representada con el botón de juego iluminado.
La información del nivel de batería del portátil, volumen del arcade y estado de juego se recibe desde una aplicación de control, responsable de gestionar el lanzamiento y parada de juegos.

Código fuente:
clickMame
firmwareArduino

clickMame

El primer problema a resolver es que para el control de juegos no se dispone de una interfaz por código para ello. Por este motivo se opta por un pequeño robot por coordenadas, de manera que se realicen pulsaciones de ratón y teclado programadas para lanzar y finalizar las aplicaciones, y poder gestionar el inicio y parada de los juegos del arcade. Podía haberse implementado mediante comandos de terminal, pero algunos juegos no tenían contemplado su lanzamiento por línea de comandos. 

Por otro lado, para el control de sonido por código se utiliza el software SoundVolumeView, el cual si tiene interfaz mediante línea de comandos.

Para el control de batería del ordenador se invoca un script con un código en bucle, volcando el valor en un fichero de texto, al cual se accede desde el programa clickMame para su consulta.

Por último, la aplicación lleva a cabo una comunicación serie con el puerto de conexión de la tarjeta Arduino, intercambiando la siguiente información:
  • Nivel de volumen
  • Juego a lanzar/parar
  • Estado de juego actual
  • Nivel de batería
Código fuente:
clickMame
clickMame




Comentarios