Gameboy customizada

Hace un tiempo, me entraron las ganas de hacer una gameboy, y hace unas semanas la terminé. Este fue el resultado:

Voy a explicar todos los pasos desde cero hasta el ensamblaje final:

Hardware

  • Raspberry pi 3
  • Tarjeta micro SD >= 4GB
  • 2.8” PiTFT Display Plus
  • PiGRRL Gamepad PCB o cualquier otro PCB que se ajuste a las especificaciones
  • PowerBoost 1000c
  • 40pin GPIO ribbon cable
  • 2500mAh battery
  • PAM8302 2.5W Audio Amp
  • Slide Switch
  • 10x 6mm + 2x 12mm tactile buttons
  • 1x 2by20 pin IDC box header

Material

  • Una impresora 3D y filamento. En mi caso estoy usando una aleación de PLA con madera para la carcasa, y filaflex para los botones ya qué para que funcionen con los pulsadores táctiles, estos deben ser algo elásticos y no rigidos.
  • Soldador
  • Cables 30AWG y 26AWG
  • Cutter
  • Pegamento
  • 14x #4-40 3/8 tornillos para máquinas
  • 6x #2-56 3/8 tornillos para máquinas
  • Y un soporte o teceras manos, para realizar las soldaduras.

Diagrama

Paso 1: Imprimir las partes

Descargamos los archivos .STL de ThingiVerse.

La carcasa la imprimiremos con PLA, mientras que los botones con filaflex.

Paso 2: Preparando la Raspberry pi 3

Descargamos la imagen de Retropie desde la página oficial.

Montamos la imagen en la micro SD, para ello podéis utilizar el software que más os guste. En concreto, si usáis OS X, hay uno muy sencillo llamado ApplePi-Baker:

Una vez montada, conectamos la RP3 por HDMI a cualquier pantalla/monitor para comprobar que todo ha ido correctamente.

Si conectáis un teclado a las RP3, podréis configurar los controles, y una red wifi para poder conectaros via SSH. En caso de que tengáis problemas configurando la red wifi, podéis usar un cable Ethernet.

Nos conectamos via SSH a nuestra RP3:

ssh pi@IP.DE.LA.RP3

Por defecto, la contraseña es raspberry

Preparando el software para la pantalla PiTFT

Expandir el sistema

    sudo raspi-config
    (expand filesystem)
    sudo reboot

Instalamos el nuevo kernel

    curl -SLs https://apt.adafruit.com/add-pin | sudo bash
    sudo apt-get install raspberrypi-bootloader
    sudo apt-get install adafruit-pitft-helper

Habilitamos y configuramos la PiTFT

    sudo adafruit-pitft-helper -t 28r

Por defecto la PiTFT (al menos de momento no funciona directamente), esta invertida, así que tendremos que ajustarla, al igual que la velocidad con la que el driver maneja el display, y los FPS.

sudo nano /boot/config.txt

Buscamos esta línea:

dtoverlay=pitft28r,rotate=90,speed=32000000,fps=20

Y la cambiamos por esta otra:

dtoverlay=pitft28r,rotate=270,speed=80000000,fps=60

Ahora buscamos:

#disable_overscan=1

Y lo cambiamos a:

disable_overscan=1

Esto último, ayudará a quitar una banda lateral negra en el display.

Instalamos fbcp

    sudo apt-get update
    sudo apt-get install cmake git
    git clone https://github.com/tasanakorn/rpi-fbcp
    cd rpi-fbcp/
    mkdir build
    cd build/
    cmake ..
    make
    sudo install fbcp /usr/local/bin/fbcp

Y lo añadimos al arranque de nuestro sistema:

    sudo nano /etc/rc.local

Y antes del exit 0, añadimos:

    /usr/local/bin/fbcp &

Configurando retrogame

Ahora vamos a configurar los pines con los GPIO. Nos descargamos retrogame:

    cd
    git clone https://github.com/adafruit/Adafruit-Retrogame
    cd Adafruit-Retrogame

Para cambiar los pines hay que configurar retrogame.cfg, aunque la configuración por defecto nos sirve. Posiblemente, luego podáis darle utilidad a los botones que trae el display PiTFT para crear acceso rápidos u otras funcionalidades.

    make retrogame
    sudo mv retrogame /usr/local/bin

Y lo añadimos al arranque de nuestro sistemas:

    sudo nano /etc/rc.local

Y antes del exit 0, añadimos:

    /usr/local/bin/retrogame &

Y por último, cambiaremos la configuración para que EmulationStation detecte retrogame como un teclado.

    sudo nano /etc/udev/rules.d/10-retrogame.rules

Y añadimos lo siguiente:

SUBSYSTEM=="input", ATTRS{name}=="retrogame", ENV{ID_INPUT_KEYBOARD}="1"

Y hasta aquí todo lo que tiene que ver con el software.

Paso 3: Preparando el hardware

Empezaremos soldando los botones a la PCB, y el pin header para poder conectar luego el 40pin GPIO ribbon cable.

y los botones L y R:

Ahora nos vamos a la pantalla PiTFT:

Le damos la vuelta, e identificamos el pad que pone #18.

Tenemos que cortar la línea fina que une los dos pads para poder usar correctamente GPIO 18, ya que el botón Y está siendo usado por ese GPIO. Cortando la línea haremos que no haya un parpadeo en el display:

Ahora vamos a soldar el altavoz:

Al amplificador clase D:

Y soldamos el amplificador al PowerBoost:

Quedándonos algo así:

Al PowerBoost le soldamos ahora un interruptor, que servirá para apagar y encender la gameboy:

Ahora cogemos nuestra RP3, e identificamos los pines del audio, que son los que están justo debajo del pin PP26 y PP24:

Y llevamos unos cables desde esos pines a nuestro amplificador:

Ya tenemos casi todo listo. Ahora conectamos el gamepad a la pantalla con el cable, y lo insertamos en la RP3. A continuación lo vamos a encender para ver si salió todo bien. Previamente había cargado un juego para poder probar el gamepad:

¡Parece que funciona! Ahora toca montarlo todo en la carcasa. Ya podéis conectar la batería al PowerBoost. Haced pruebas antes del montaje final. Y os recomiendo que antes de ir al paso 4, vayais al final del todo, en el apartado de pequeños fixes, ya que posiblemente os sea de mucha ayuda.

Paso 4: Montaje final

Colocamos el display, y lo atornillamos a la carcasa. Hay que tener cuidado ya que puede perforarla.

Colocamos el gamepad, así como el altavoz. En la otra carcasa, ponemos la RP3, el amplificador, PowerBoost y el interruptor:

Cerramos y aseguramos todo, y… ¡Ya tenemos la gameboy hecha!

Os incluyo un pequeño vídeo para que podáis ver como arranca, y como se maneja: