Arcade Box

Figure 1 – ODROID Arcade Box
Figura 1 – ODROID Arcade Box

Los ODROID tienen mejor rendimiento que las placas de la competencia, especialmente en lo que respecta al procesamiento de video, lo que significa que las placas ODROID son idóneas para ejecutar juegos, que es lo que hacen muchos usuarios de ODROID. Ya existen varios sistemas operativos de plataformas de juegos disponibles, como Lakka (http://bit.ly/1NO8BBC) y ODROID GameStation Turbo (http://bit.ly/1ASFO5O). Para poder disfrutar aún más de nuestras sesiones de juegos, hemos creado nuestro propio mando arcade con simples botones GPIO y joysticks, lo hemos llamamos ODROID Arcade Box. Hemos elegido un ODROID-XU4 para este proyecto porque es el que tiene mejor rendimiento GPU de todos los dispositivos ODROID actuales. Este artículo describe cómo volver a crear el ODROID Arcade Box.

Figure 2 – Our first simple prototype
Figura 2 - Nuestro primer y simple prototipo

Requisitos

Figure 3 – Tools and parts
Figura 3 - Herramientas y componentes

Decidimos hacer el ODROID Arcade Box utilizando MDF (tablero de fibra de densidad media). El XU4 Shifter Shield también nos es útil para utilizar los pines de expansión del ODROID-XU4. Los Joysticks, botones y cables son los componentes de entrada, y se utilizó un SMPS (fuente de alimentación conmutada) como fuente de alimentación. Las herramientas usadas y la lista de componentes se enumeran a continuación:

  • Panel MDF 12T
  • 2EA 600x220
  • 2EA 600x75
  • 2EA 220x75
  • Taladro
  • Plegadora
  • Desmontadores
  • Cinta métrica
  • Navaja multiuso
  • Alicates de punta larga
  • ODROID-XU4
  • XU4 Shifter shield
  • SMPS
  • Extensores Ethernet, USB, HDMI
  • Toma de corriente & Switch
  • Bisagras 2EA
  • Receptor de puerta
  • Bases de goma 4EA
  • Tornillos
  • Botones 19EA
  • Joystick 2EA
  • Cables
  • Terminales

ODROID Arcade Box necesita un total de 27 entradas (19 entradas para botones y 8 entradas para joysticks). Las 24 entradas digitales GPIO del ODROID-XU4 no son suficientes para cubrir las 27 entradas, de modo que creamos dos puertos ADC adicionales para los tres botones adicionales. Los valores de entrada ADC se basan en el voltaje de entrada. Los valores de entrada digital y analógica son procesados por el demonio de teclas GPIO, que se describen a continuación.

Figure 4 – Expansion ports schematic
Figura 4 – Esquema de los puertos de expansión

Diseño y montaje

Los paneles del ODROID Arcade Box se deben diseñar y fabricar de forma que los botones y los joysticks estén bien ubicados. Elegimos MDF 12T considerado el precio y la durabilidad. El diseño se puede hacer con cualquier herramienta CAD que conozcas, como Google Sketch o SolidWorks. Aunque hay disponibles muchas plantillas de diseño para paneles joypad, optamos por un diseño arcade japonés estándar.

Figure 5 - Joypad Layout Blueprint
Figura 5 - Patrón de diseño del Joypad

El primer paso del montaje es fijar la lámina al panel MDF. Este paso era fácil, pero nos llevó algo más de tiempo que el resto. Después, insertamos los joysticks, la toma de corriente, el interruptor y los botones en el panel superior de MDF. Los extensores HDMI, Ethernet y USB se colocaron en la parte posterior del panel MDF. El siguiente paso fue montar cada panel MDF usando el taladro para hacer los agujeros, luego usamos los tornillos para sujetar los paneles.

Figure 6 – Assembled ODROID Arcade Box Outline
Figura 6 - Diseño del ODROID Arcade Box montado

El último paso para montar el ODROID Arcade Box es cablear los pines de expansión del ODROID-XU4 hasta los componentes de entrada. En este proyecto diseñamos las entradas GPIO externas, tal y como se muestra en la Figura 5. Los botones Select y Temp están conectados a los puertos de expansión ADC, como se muestra en la Figura 3.

Figure 7 – External GPIO mappings for the Buttons and Joysticks
Figura 7: Asignaciones externas de GPIO para los botones y joysticks

Figure 8 – ODROID Arcade Box Wiring
Figura 8 - Cableado del ODROID Arcade Box

Configuración del software

Desarrollamos un nuevo demonio de teclas GPIO llamado gpio_keyd (http://bit.ly/2ljOZKg). El demonio gpio_keyd puede asignar entradas GPIO y eventos de tecla usando uinput y wiringPi, que es una librería de acceso GPIO basada en pin. Está diseñado para que le sea familiar a las personas que han usado el sistema de cableado de Arduino. Aunque la librería wiringPi sólo admite Raspberry Pi, Hardkernel ofrece una versión de wiringPi para ODROID en su repositorio GitHub (http://bit.ly/1Eq3UpF). El módulo uinput es un módulo del kernel Linux que maneja el subsistema de entrada desde el área del usuario. Se puede usar para crear y gestionar dispositivos de entrada desde una aplicación.

Elegimos ODROID GameStation Turbo (http://bit.ly/1ASFO5O) como plataforma de software para nuestro ODROID Arcade Box, que tiene el uinput integrado. Debes asegurarte de que el archivo del dispositivo uinput exista en el sistema operativo elegido, ya que algunos no tienen dispositivos uinput.

 $ ls /dev/uinput
Si tu sistema operativo no tiene un archivo de dispositivo /dev/uinput, entonces será necesario volver a compilar e instalar un nuevo kernel con la opción de configuración INPUT_UINPUT definida. La página de la Wiki http://bit.ly/1YIToBI describe cómo compilar e instalar la imagen del kernel desde el código fuente.
$ make menuconfig

 Device Drivers -> Input device support
 -> Generic input layer
 -> Miscellaneous device
 -> User level driver support <*>
Ten en cuenta que wiringPi debe estar instalado antes de instalar gpio_keyd. En la imagen ODROID GameStation, los comandos sudo deben ejecutarse como root, porque la cuenta "odroid" no está designada como usuario sudo.
$ git clone https://github.com/hardkernel/wiringPi.git
$ cd wiringPi
$ sudo ./build
Descarga el código fuente de gpio_keyd, que está disponible desde nuestro repositorio GitHub. Los métodos de compilación e instalación de gpio_keyd son muy simples:
$ git clone https://github.com/bkrepo/gpio_keyd.git
$ cd gpio_keyd
$ make
$ sudo make install
El script gpio_keyd hace referencia a /etc/gpio_keyd.conf como valor por defecto para GPIO y la información de asignación de teclas. El archivo de configuración ha sido modificado para las 27 entradas del ODROID Arcade Box. Algunas teclas ya se utilizan en el emulador del juego, así que tuvimos que cambiar la configuración de teclas del emulador para evitar conflictos entre el emulador y las teclas de entrada GPIO. Ten en cuenta que el campo en el archivo de configuración hace referencia al número WiringPi, no al GPIO ni al número de pin (http://bit.ly/2lbzPIB).

Ejemplo de archivo de configuración para las 27 entradas: /etc/gpio_keyd.conf

# Digital input
#    
# User 1
KEY_LEFT digital 15 0
KEY_RIGHT digital 1 0
KEY_UP digital 4 0
KEY_DOWN digital 16 0
KEY_A digital 2 0
KEY_S digital 3 0
KEY_D digital 30 0
KEY_F digital 21 0
KEY_Z digital 8 0
KEY_X digital 9 0
KEY_C digital 7 0
KEY_V digital 0 0
# User 2
KEY_BACKSLASH digital 12 0
KEY_SLASH digital 13 0
KEY_SEMICOLON digital 14 0
KEY_LEFTBRACE digital 5 0
KEY_Y digital 26 0
KEY_U digital 27 0
KEY_I digital 22 0
KEY_O digital 23 0
KEY_H digital 6 0
KEY_J digital 10 0
KEY_K digital 11 0
KEY_L digital 31 0

# Analog input
#    
KEY_B analog 0 0
KEY_N analog 0 2045
KEY_M analog 1 2045
Es conveniente ejecutar el demonio gpio_keyd en cada arranque para ODROID Arcade Box.
/etc/init.d/gpio_keyd
#! /bin/sh
### BEGIN INIT INFO
# Provides: gpio_keyd
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Run /usr/bin/gpio_keyd if it exist
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start() {
 if [ -x /usr/bin/gpio_keyd ]; then
 /usr/bin/gpio_keyd -d
 ES=$?
 [ "$VERBOSE" != no ] && log_end_msg $ES
 return $ES
 fi
}

case "$1" in
start)
do_start
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
killall gpio_keyd
exit 0
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
Esac
$ sudo chmod +x /etc/init.d/gpio_keyd
$ sudo update-rc.d gpio_keyd defaults
$ sudo reboot
En los comandos anteriores, el script gpio_keyd se ejecuta como demonio utilizando la opción "-d". El uso de gpio_keyd se puede comprobar con la opción "-h". Vuelve a verificar las teclas utilizadas por el juego o el emulador, luego configura correctamente gpio_keyd. Ahora es cuando estás listo para jugar y disfrutar de tus juegos con tu nuevo ODROID Arcade Box.

Figure 9 - The King of Fighters 98, John vs. Brian
Figura 9 - El Rey de los Luchadores 98, John vs. Brian

Be the first to comment

Leave a Reply