Contents

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

Pasos

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:

1
ssh pi@IP.DE.LA.RP3

Por defecto, la contraseña es raspberry

Preparando el software para la pantalla PiTFT

Expandir el sistema
1
2
3
    sudo raspi-config
    (expand filesystem)
    sudo reboot
Instalamos el nuevo kernel
1
2
3
    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
1
    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.

1
sudo nano /boot/config.txt

Buscamos esta línea:

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

Y la cambiamos por esta otra:

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

Ahora buscamos:

1
#disable_overscan=1

Y lo cambiamos a:

1
disable_overscan=1

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

Instalamos fbcp
1
2
3
4
5
6
7
8
9
    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:

1
    sudo nano /etc/rc.local

Y antes del exit 0, añadimos:

1
    /usr/local/bin/fbcp &
Configurando retrogame

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

1
2
3
    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.

1
2
    make retrogame
    sudo mv retrogame /usr/local/bin

Y lo añadimos al arranque de nuestro sistemas:

1
    sudo nano /etc/rc.local

Y antes del exit 0, añadimos:

1
    /usr/local/bin/retrogame &

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

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

Y añadimos lo siguiente:

1
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:

Pequeños fixes

El altavoz, no es que sea de muy buena calidad. Introduce mucho ruido en el audio, y aunque cuando estas jugando tampoco es que se escuche demasiado, a veces puede llegar a cansar. Incluso cuando no hay nada de audio, sigue habiendo ruido.

Lo que vamos a hacer, es añadir una forma para desactivar por completo el amplificador para que de esa manera desactivemos el altavoz, lo que reducirá a su vez el consumo eléctrico.

En el amplificador, podemos ver un pad SD o shutdown. Cuando metemos un cero lógico, se queda inactivo.

Estos son los GPIO que usamos nosotros:

Botón PIN GPIO
LEFT Pin 7 GPIO 4
UP Pin 36 GPIO 16
RIGHT Pin 35 GPIO 19
DOWN Pin 37 GPIO 26
SELECT Pin 29 GPIO 5
START Pin 31 GPIO 6
A Pin 8 GPIO 14
B Pin 10 GPIO 15
X Pin 38 GPIO 20
Y Pin 12 GPIO 18
L Pin 32 GPIO 12
R Pin 33 GPIO 13

Vamos a utilizar algún GPIO que esté libre, y vamos a soldar un cable desde la RP3 hasta el pad SD del amplificador. Aquí podéis ver los GPIO disponibles:

Descargamos WiringPi

1
sudo apt-get install git-core
1
git clone git://git.drogon.net/wiringPi
1
2
cd wiringPi
git pull origin
1
2
cd wiringPi
./build

Para más info: WiringPi

Configuring Emulation Station

Copiamos el archivo de configuración de Emulation Station a la configuración del usuario:

1
cp /etc/emulationstation/es_systems.cfg ~/.emulationstation/

Vamos a añadir una opción apps a Emulation Station:

1
nano ~/.emulationstation/es_systems.cfg

Añadimos al final antes de </systemList> lo sigiente:

1
2
3
4
5
6
7
8
9
  <system>
    <fullname>Applications</fullname>
    <name>Apps</name>
    <path>~/RetroPie/roms/apps</path>
    <extension>.sh .SH .py .PY</extension>
    <command>%ROM%</command>
    <platform>apps</platform>
    <theme>esconfig</theme>
  </system>

Creamos un directorio que contendrá los scripts para habilitar/deshabilitar el altavoz:

1
mkdir ~/RetroPie/roms/apps

Yo voy a usar el GPIO 22, así que para silenciarlo, vamos a mandar un cero lógico por ese GPIO:

1
2
3
4
nano ~/RetroPie/roms/apps/mute_amp.sh

gpio -g mode 22 out
gpio -g write 22 0

Y otro, para poder habilitarlo de nuevo:

1
2
3
4
nano ~/RetroPie/roms/apps/unmute_amp.sh

gpio -g mode 22 out
gpio -g write 22 1

Hacemos que los scripts sean ejecutables:

1
2
chmod +x ~/RetroPie/roms/apps/mute_amp.sh
chmod +x ~/RetroPie/roms/apps/unmute_amp.sh

Ahora puedes probar que, efectivamente se silencia el altavoz:

1
2
~/RetroPie/roms/apps/mute_amp.sh
~/RetroPie/roms/apps/unmute_amp.sh

Reiniciamos la RP3, y ya tendremos la opción apps al lado de las plataformas de los juegos que hayamos instalado.

Para hacer que el altavoz esté silenciado desde el arranque, tenemos que modificar /etc/rc.local:

1
sudo nano /etc/rc.local

Y añadimos el script para silenciar, después de /usr/local/bin/retrogame & pero antes de exit 0:

1
/home/pi/RetroPie/roms/apps/mute_amp.sh &

Y listo, con eso tendríamos apagado por defecto el altavoz.

Espero que os haya gustado esta guía.

Un saludo.