Mi Consola portátil con Raspberry Pi

Intro

Consola terminada
Consola terminada
Consola vista desde atrás
Consola vista desde atrás

Hice mi consola portátil con Raspberry Pi, a lo mejor a alguien le sirve como referencia para hacerse una. Escribo esto mientras se pasan 50GB de ROMs y se scrapean. De paso me queda a mí la sección del Software y la guía de instalación para cuando tenga que reinstalar algo.

Ver esto en mi GitLab.

Hay muchas consolas más en internet para comparar. Esta es bastante distinta a las otras:

Ventajas

Desventajas

Ingredientes

Más abajo explico más cosas sobre cada uno.

Raspberry Pi 3

En realidad al principio usaba una Raspberry Pi 2 pero me compré otra. Vale la pena la 3 para emular juegos 3D, el WiFi y el Bluetooth.

A propósito hice todo para que no haga falta soldarle nada ni modificarla.

Tarjeta microSD

Por lo menos tiene que ser de 4GB, aunque no compraría de menos de 16GB, depende de qué ROMs uno quiera pasar. Las ROMs pesadas son las de PSX, N64 y MAME, en ese orden.

Yo compré una de 64GB porque es lo que necesitaba, para darse una idea descargué todas las ROMs que pude, lo que pesan son:

Pantalla de video compuesto

Es lo más barato que hay para usar de pantalla. Lo importante es el tamaño, que sea de video compuesto y que se pueda alimentar por USB (5V). Lo malo es la baja calidad, pero no me molesta mucho porque son juegos que se jugaron en pantallas de mala calidad justamente.

Para encontrarla hay que buscar con las palabras clave 'car backup screen tft composite 3.5 monitor lcd rearview'.

Caja con algunos datos técnicos.
Caja con algunos datos técnicos.
Pantalla sin los plásticos, en otras fotos se puede ver que tiene una placa controladora atrás.
Pantalla sin los plásticos, en otras fotos se puede ver que tiene una placa controladora atrás.
Viene con unos botones para controlar brillo, contraste, etc. Se los saqué pero los guardo por si alguna vez quiero cambiar el brillo.
Viene con unos botones para controlar brillo, contraste, etc. Se los saqué pero los guardo por si alguna vez quiero cambiar el brillo.

No todas se pueden alimentar por 5V que da un USB, porque son normalmente para 12V y un mismo modelo de pantalla tiene distintas versiones. Entonces es bastante de suerte. En algunos casos hay que hacerles unas modificaciones, en mi caso la puedo alimentar simplemente con 5V en vez de 12V y funciona.

En este thread hay mucha información sobre las distintas versiones.

Hay muchas alternativas, y la Raspberry Pi está llena de puertos para pantallas, todas son alternativas muy buenas:

Joystick

Yo quería uno con muchos botones para poder jugar al sistema que sea, con los botones que necesita una Playstation esta bien, no hay sistemas que usen más que eso (creo que los únicos serían algunos juegos de Sega Genesis, pero se pueden usan los botones L y R para los que faltan. Ver imágenes de esta página.).

Lo más importante es que tenga pad direccional (D-Pad) de buena calidad. Es muy importante el D-Pad porque son los botones que uno usa para moverse, son los botones más importantes, usar un analógico no es lo mismo, si o si hay que tener un buen D-Pad.

Al final compré el Logitech F310. Es de buena calidad y el D-Pad no es tan malo, está bastante bien. Además tiene muy buenos drivers, es más, se puede poner en modo DInput o XInput, al final uso DInput porque no me acuerdo que me andaba mal con XInput. Pero si pueden usar XInput es mejor.

Placa del joystick, se ve de buena calidad. En otras fotos se puede ver desde afuera.
Placa del joystick, se ve de buena calidad. En otras fotos se puede ver desde afuera.
Placa vista de atrás, los Triggers analógicos también se ven muy buenos.
Placa vista de atrás, los Triggers analógicos también se ven muy buenos.

Batería

Uso un power bank para celulares porque es lo más fácil y además se puede usar para cargar el celular.

Compré una batería TP-Link TL-PB10400 de 10000mAh porque tiene dos puertos (uno de 2A para la RPi y otro de 1A para la pantalla), mucha capacidad y una forma que queda bastante bien abajo del joystick.

La batería que uso.
La batería que uso.

Carcasa

Creo que la única forma es imprimirla en 3D, pero mientras tanto para probar, primero la hice recortando una caja de tomacorriente.

Caja de tomacorriente que compré.
Caja de tomacorriente que compré.
Tuve que recortar la tapa para la pantalla y hacerle un agujero atrás para los cables. Para unir la tapa y la base tuve que usar cinta (Los tornillos quedaron tapados por la pantalla y de paso los usé para regular la altura).
Tuve que recortar la tapa para la pantalla y hacerle un agujero atrás para los cables. Para unir la tapa y la base tuve que usar cinta (Los tornillos quedaron tapados por la pantalla y de paso los usé para regular la altura).
Agujeros para los puertos USB y ethernet.
Agujeros para los puertos USB y ethernet.

A la caja la hice con FreeCAD, pero no lo recomiendo mucho al programa. Mientras que exporte al formato STL está bien, es el formato más común para impresiones. Me lo imprimió una persona que se dedica a eso, yo le pasé el STL y listo.

Creo que conviene primero comprar y medir todo, hasta los tornillos. Y antes dibujar todo en papel junto con las medidas. Así cuando se hace el modelo ya está todo definido y no hay que inventar nada, porque me pasó que en FreeCAD se me hace bastante difícil cambiar medidas (se puede desacomodar todo).

No hay que olvidarse de nada. Son dos tapas unidas por tornillos que pasan de lado a lado, hay varias formas de atornillar partes impresas en 3D pero no me animé a hacerlo de otra forma. Tiene agujeros para los puertos USB, Ethernet, HDMI y de auricular. Para sostener el jack de auricular le puse unos bloques así queda bien firme.

También hay que ver cómo poner la pantalla en el lugar, para apretarla contra la tapa uso tornillos, y para centrarla uso unas tiras de plastico que están en la tapa. Por último hay que hacerle agujeros para los tornillos y para los cables.

A la Raspberry Pi la puse abajo a la izquierda, para sacar directamente los puertos USB y para que pueda conectar la energía y el jack de 3.5mm sin tener que soldar nada. Como desventaja para usar el HDMI tuve que usar un adaptador en L, y el cable del joystick quedó visible. Pero igual quedó bastante bien.

Es la primera vez que imprimo algo en 3D, le dejé 1mm de margen a todas las cosas y tuve la suerte que al final todo encajó muy bien. Tuve que cortar algunas cosas con un cutter y agrandar algunos agujeros. Ahí me di cuenta que el plástico PLA es muy duro.

La base, está al revés, arriba a la izquierda está para el puerto de auriculares.
La base, está al revés, arriba a la izquierda está para el puerto de auriculares.
La tapa.
La tapa.
Como queda cerrada.
Como queda cerrada.
El agujero para los auriculares.
El agujero para los auriculares.
Los agujeros para los puertos.
Los agujeros para los puertos.
De paso hay que aprovechar a hacerse un llavero.
De paso hay que aprovechar a hacerse un llavero.

Links a los archivos:

base.fcstd
base.stl
tapa.fcstd
tapa.stl

llavero_debian.fcstd
llavero_debian.stl

Conectores de 3.5mm

Se necesita uno macho con 4 contactos, porque la RPi saca dos canales de audio, el video y la tierra. Es como los que tienen los auriculares que traen micrófono.

También compré uno hembra estéreo, como lo uso para auriculares no lleva video y tiene 3 contactos.

Cómo son los conectores en la Raspberry Pi a la izquierda, y a la derecha un conector de 3 contantos para auriculares.
Cómo son los conectores en la Raspberry Pi a la izquierda, y a la derecha un conector de 3 contantos para auriculares.
Acá se pueden ver los conectores, el amarillo es de video.
Acá se pueden ver los conectores, el amarillo es de video.

Adaptador HDMI en L

Porque es la mejor forma que encontré de sacar el HDMI afuera de la carcasa, hay que fijarse bien que el adaptador doble para el lado correcto, yo quería que doble hacia abajo.

Se puede ver que tuve que cortar un poco el plástico para que entre en el agujero de la caja.
Se puede ver que tuve que cortar un poco el plástico para que entre en el agujero de la caja.

Hardware

Primero fui comprando las cosas y las fui probando:

A esas pruebas las fui haciendo sin hacer los cables, por las dudas que al final algo no funcione y termine haciendo otra cosa. El único cable que tuve que hacer es el de audio y video.

Cable que hay que fabricar para el audio y el video.
Cable que hay que fabricar para el audio y el video.

Una vez que ví que todo funcionaba, armé todo haciendo la estructura así nomás. La batería estaba agarrada con cinta, y para la caja recorté una caja de tomacorriente porque tenía un tamaño bastante bueno. Adentro dejé los cables bien largos (por si corto uno demasiado corto y después necesito uno más largo) y también las cosas estaban sueltas.

Cables para audio, video, y alimentación de pantalla.
Cables para audio, video, y alimentación de pantalla.
Como quedó la consola vieja.
Como quedó la consola vieja.
De atrás.
De atrás.

Después diseñé la caja para imprimirla en 3D y armé todo de nuevo.

El joystick va agarrado de la caja con un pedazo de metal unido por tornillos, y la batería va colgada del pedazo de metal con un velcro que le da la vuelta.

Entre la batería y el joystick puse goma eva para que la batería no se apoye en la cabeza de los tornillos que unen el metal con el joystick, tambien ayuda a que la batería no resbale tanto.

Metal que une el joystick con la caja, tuve que hacer un agujero de más (el más grande) para poder atornillar por ahí un tornillo del joystick.
Metal que une el joystick con la caja, tuve que hacer un agujero de más (el más grande) para poder atornillar por ahí un tornillo del joystick.
Como queda después de unir, los tornillos del joystick están al revés, deben ir con la cabeza afuera y las tuercas adentro.
Como queda después de unir, los tornillos del joystick están al revés, deben ir con la cabeza afuera y las tuercas adentro.
De costado.
De costado.
El velcro para sostener la batería.
El velcro para sostener la batería.
El velcro pasa entre el metal y el joystick.
El velcro pasa entre el metal y el joystick.
Foto de dónde quedaron los tornillos del joystick.
Foto de dónde quedaron los tornillos del joystick.
Agujeros del joystick vistos desde fuera.
Agujeros del joystick vistos desde fuera.
Después de atornillar al joystick. Se puede ver la goma eva que puse.
Después de atornillar al joystick. Se puede ver la goma eva que puse.
Tornillos en la caja, los tapé con cinta por las dudas que hagan contacto con la Raspberry Pi.
Tornillos en la caja, los tapé con cinta por las dudas que hagan contacto con la Raspberry Pi.
Como quedó todo armado.
Como quedó todo armado.

Los cables que van de la caja a la batería van por fuera, el cable del joystick va por dentro de la caja y va conectado a los puertos USB.

Diagrama de las conexiones que hay que hacer.
Diagrama de las conexiones que hay que hacer.
Foto de las conexiones dentro de la caja, sin incluir la del joystick.
Foto de las conexiones dentro de la caja, sin incluir la del joystick.
Con la Raspberry Pi.
Con la Raspberry Pi.
Para el joystick rompí un conector USB tipo A, buscando la forma de hacerlo lo más corto posible. Antes rompí un pendrive USB bien cortito, pero no me sirvió entonces rompí este conector.
Para el joystick rompí un conector USB tipo A, buscando la forma de hacerlo lo más corto posible. Antes rompí un pendrive USB bien cortito, pero no me sirvió entonces rompí este conector.
Al final no pude acortar el plástico blanco, lo que hice fue acortar el metal y envolver con cinta.
Al final no pude acortar el plástico blanco, lo que hice fue acortar el metal y envolver con cinta.
Foto de como queda conectado, los cables pasan al lado del puerto.
Foto de como queda conectado, los cables pasan al lado del puerto.
Como quedaron todos los cables dentro de la caja.
Como quedaron todos los cables dentro de la caja.
Foto de como quedaron los puertos USB (falta el cable del joystick).
Foto de como quedaron los puertos USB (falta el cable del joystick).
El puerto para los auriculares quedó muy bien.
El puerto para los auriculares quedó muy bien.
Salida HDMI que quedó abajo.
Salida HDMI que quedó abajo.
Cuando uno conecta algo al HDMI se le hace mucha fuerza, le puse una cinta alrededor del adaptador HDMI que hay que tirar mientras se conecta un cable. De esa forma no se le hace fuerza a la Raspberry Pi. Es lo único que se me ocurrió, no quiero pegar el adaptador a la caja. La cinta se puede empujar hacia dentro de la caja, entonces no queda colgando.
Cuando uno conecta algo al HDMI se le hace mucha fuerza, le puse una cinta alrededor del adaptador HDMI que hay que tirar mientras se conecta un cable. De esa forma no se le hace fuerza a la Raspberry Pi. Es lo único que se me ocurrió, no quiero pegar el adaptador a la caja. La cinta se puede empujar hacia dentro de la caja, entonces no queda colgando.
En esta foto anterior se puede ver como queda la cinta cuando está guardada.
En esta foto anterior se puede ver como queda la cinta cuando está guardada.
Foto de como queda la conexión al joystick vista desde fuera.
Foto de como queda la conexión al joystick vista desde fuera.
Otra foto de todo terminado.
Otra foto de todo terminado.

Software

Uso RetroPie, es una distribución Linux creada especialmente para jugar a juegos retro en la Raspberry Pi. Está muy bien hecha, para la emulación usa principalmente RetroArch, para la interfaz EmulationStation, y está basada en Raspbian.

Se puede manejar completamente con Joystick gracias a EmulationStation y a algunos scripts propios de RetroPie. Se pueden configurar joysticks, conectarse a dispositivos WiFi y Bluetooth, y configurar algunas cosas todo usando el Joystick.

Para instalarlo se debe descargar la imagen ISO, y grabar en una tarjeta microSD como con cualquier distribución para Raspberry Pi. Para grabar en Linux hay que usar dd, y para Windows se puede usar Rufus.

Para pasar las ROMs se puede conectar la microSD a la PC, o se puede usar un pendrive.

Para eso hay que entrar a la wiki de RetroPie, es muy completa.

ROMs

Son los juegos, es ilegal descargar ROMs entonces ningún sitio oficial te dice donde encontrarlos.

BIOS

Algunos emuladores además de las ROMs necesitan BIOS que van en ~/RetroPie/BIOS a excepción de NeoGeo que debe tener la BIOS en la carpeta de ROMs.

Acá hay más información

Las BIOS tampoco se pueden conseguir de forma legal.

Otros

Algunas cosas más sobre RetroPie que son bastante importantes, también vale la pena leerse la wiki entera para ver qué se puede hacer.

Editando /boot/config.txt

Es un archivo de configuración para algo así como la BIOS y sistema operativo, lleva algunas opciones sobre el audio y el video generalmente, si uno quiere overclockear la placa también se debe modificar este archivo.

Como uso una pantalla de video compuesto, tengo que acomodar un poco la imagen, las opciones que tuve que agregar yo al archivo son:

sdtv_mode=2
sdtv_aspect=3

disable_overscan=0
overscan_right=-31
overscan_left=-8
overscan_top=-15
overscan_bottom=-15
framebuffer_width=480
framebuffer_height=288
disable_audio_dither=1

Son todas sobre video salvo la última. La última sirve para disminuir el ruido que se escucha de fondo, pero como desventaja uno debe usar el volumen de EmulationStation al máximo o se pierde calidad. Entonces se está obligado a usar auriculares con control de volumen analógico.

Acá hay información sobre las opciones disponibles. Acá también.

Para cambiar tamaño de fuente de terminal

sudo dpkg-reconfigure console-setup

Si tarda mucho el inicio, esperando red

Desactivar wait for network at boot en raspi_config.

Para usar pendrives

Se montan automáticamente en /media/usb.

Para obtener una terminal

Para llegar a la consola hay que cerrar EmulationStation. Se puede hacer con F4 o abriendo el menú (apretando Start) y cerrando EmulationStation.

Para volver a abrir la interfaz hay que usar el comando emulationstation.

Splash

Se puede cambiar la imagen que aparece al iniciar (la que dice EmulationStation no se puede cambiar, solamente la que dice RetroPie). Se debe guardar la imagen en ~/RetroPie/splashscreens/ y activarla en las opciones de RetroPie.

Temas de EmulationStation

Se instalan en la configuración de RetroPie y se activan en el menú de EmulationStation (apretando Start). También en el mismo menú me gusta cambiar la transición a Slide en vez de Fade.

Scrapes

Es obtener la información sobre cada ROM, una imagen del juego, una descripción, etc. Hay varias formas de hacer scrapes, la que usé es la que viene con EmulationStation.

No se bien como funciona, tampoco quiero scrapear todas las consolas porque estoy lleno de ROMs y dice por ahí que te empieza a poner las cosas más lentas.

Guía de instalación

Acá escribo los pasos que seguí para instalar todo, así me queda para cuando lo necesite.

Backup

Si algún día llego a formatear tengo que hacer backup de: