Introduction: PiGranate - Raspberry Pi 3 Portable

En este instructivo mostraré como construir una consola portátil a partir de un Raspberry Pi 3 funcionando sobre Retropie, pudiendo emular videojuegos desde Nintendo 64 y PlayStation 1 para abajo (NES, SNES, GBC, GBA, etc)

Antes que todo queda aclarar que esta guía se baza inicialmente en la siguiente publicación de Adafruit sobre su Super Game Pi

Super Game Pi

En conjunto con tomar ideas de las siguientes:

PiStation Portable

PortaBerry Pi

RaspBMO

Esta guía, además de estar en español, presenta alternativas acomodadas a mis preferencias sobre el portátil, además de contar con un Raspberry Pi 3, que tiene mayor potencia, pero a la vez, mayor carga de amperaje.

Step 1: Materiales Y Herramientas

En esta lista están todos los materiales utilizados finalmente en el portátil, ya que fueron usados varios más, que finalmente no terminaron instalados en el proyecto.


Herramientas:

  1. Cautín (soldador eléctrico), estaño, pasta para soldar
  2. Dremel
  3. Atornilladores
  4. Tip Top
  5. Multitester
  6. Alicates
  7. Impresora 3D

Partes:

(Adafruit.com)

  1. Raspberry Pi 3 (u otro) y microsd de más de 8gb.
  2. Decodificador HDMI TFP401 sin touchscreen)
  3. Cable Extension FPC de 40 Pin
  4. Pantalla TFT 5 pulgadas 800x480)
  5. Joystick Analogo 2 axis
  6. Adaptador Cupcade PCB
  7. Control SNES
  8. Interruptor Deslizante (SPDT)
  9. 2x Speakers Metal (0.5w o 2w)
  10. 2x Boton de Panel de 16mm (Rojo y Verde)
  11. UBEC 5v 3A (Buck)
  12. Cable HDMI Slim
  13. Cables Jumper Hembra (20)

(Otros)

  1. Adaptador de Audio USB
  2. Amplificador Stereo 3W PAM8403
  3. Batería de RC LiPo 7.4v o superior con más de 2A (En este caso es de 5A)
  4. Cargador de RC LiPo para la batería
  5. Adaptador Dean Plug (o cual sea la entrada de la batería)
  6. Cable extension jst xh para lipo (depende de la batería, en este caso, batería 2s = 3pin)
  7. Interruptor Deslizante DPDT
  8. Alarma de Bajo Voltaje (Buzzer)
  9. 2 Botones Táctiles (Tact Switch)

Materiales:

  1. Cables (Idealmente bueno, 30awg o más) (varios metros)
  2. Tubos Termocontraibles
  3. Pegamento epoxico
  4. Gotita
  5. Elásticos
  6. Tornillos #4 3/8
  7. Tornillos #4 1/2
  8. Tornillos #6 3/8
  9. Mouse y Teclado para la configuración inicial de Retropie

Extras de terminación:

  1. Plástico termoformable PAI 3mm
  2. Pintura Tamiya PS
  3. Primer
  4. Laca acrílica Krylon

Step 2: Cómo Funciona

El portatil usará Retropie para emular distintas consolas históricas. El diseño de los componentes fue basado en la guia de Adafruit del Super Game Pi, pero adecuada a mis criterios.

La carcasa fue diseñada para ser más cómoda al ser utilizada, y albergar más botones, para poder funcionar como control de Nintendo 64 y Playstation 1. Como este era el principal propósito, encontré la limitante de que las guías que encontré funcionaban hasta Raspberry Pi 2, por requerir menor Amperaje continuo. Para poder albergar el Raspberry Pi 3, de mayores requerimientos y mayor potencia, decidí invertir el proceso de la guía de Adafruit de usar una batería de 3.7v y usar un step-up a 5v, y en lugar de eso, usar un step-down desde una batería de radiocontrolado de 7.4v. Como esto limitaría el uso de la consola mientras esta se carga, decidí usar una batería de alto amperaje que permita varias horas de uso continuo (5000mah).

El funcionamiento en sí de los controles, se basa en la guía anteriormente citada, y usa el programa Retrogame de Adafruit para convertir cada botón en una tecla de un teclado virtual generado por el programa. Luego al usar los controles en Retropie este los leerá sin problema como si fuera un teclado cualquiera.

Además de esto la consola cuenta con 2 parlantes de 2w para mejor sonido, una salida de audífonos, wifi integrado, y la posibilidad de conectar más controles para el multijugador por medio de USB.

Step 3: Diseño (Modelado)

Este paso fue el primero que hice, pero probablemente sea mejor hacerlo más tarde. Depende del método de trabajo. Ya tenía una buena idea de cómo iba a ser el portátil, por lo que luego de dibujar la idea, pasé a modelarlo en 3D, en base a las medidas entregadas por el diseño del Super Game Pi (Adafruit). El modelado demoró un tiempo, pero quedé bastante conforme con el resultado. (El modelo 3D se encuentra adjunto en formato 123dx, para ser exportado o editado).

Luego de tener las partes listas, pasé a imprimirlo en 3D en una impresora Makerbot Replicator 2X...

Step 4: Diseño (Impresion 3D)

Luego de varias pruebas fallidas, logré tener todas las piezas listas para el armado. Las piezas fueron impresas en plástico ABS, filamento de 1,75mm con layer height de 0.25mm, con raft, y sin soportes. Todas las piezas calzaban o necesitaron de un pequeño arreglo con Dremel o Tip Top para quedar perfecto.

Para obtener una mejor terminación en la carcasa, opté por usar un Primer sobre la carcasa, y luego de lijar e imprimar varias veces, pinté con pinturas Tamiya para plástico.

El resultado fue bastante aceptable, pero quería conseguir un nivel mejor de terminación, por lo que pasé al siguiente paso (Extra)...

Step 5: Diseño (Terminacion)

PASO EXTRA

Este paso es exclusivamente para conseguir una mejor terminación. No es necesario, y conlleva varios problemas debido al espesor extra del plástico.

Usando moldes de madera para rigidizar el plástico ABS, pero a la vez dejar entrar el aire, se usó una aspiradora de termoformado y plástico PAI de 0.5mm para "forrar" el modelo por partes. El resultado es una terminación prácticamente lisa.

Luego de separado el molde, cortados los espacios para botones y demás, se procedió a pegar ambos plásticos, de manera de usar el modelo original con sus espacios para cada pieza hacia el interior, y el PAI con terminación lisa hacia el exterior.

Luego de esto, se tapó cualquier detalle con pegamento epóxico, se lijó y se imprimó con Primer. Luego de lijar e imprimar varias veces, se consiguió una terminación que me dejó satisfecho, se imprimó por ultima vez, se pintó con pinturas Tamiya de plástico (Aproveché de cambiar el color), y se selló con laca acrílica Krylon.

Step 6: Desarrollo

RETROPIE

Lo primero es usar un teclado y mouse para instalar Retropie en su última versión en el Raspberry Pi.

Installing Retropie

Esto está documentado en exceso en Internet, por lo que no profundizaré.

PODER

El portátil basicamente funcionará con una batería LiPo de Radio Controlado, en este caso, es una RCI de 7.4v (2s) de 5000mah, para aproximadamente 6 horas de funcionamiento continuo.

La batería deberá ser desconectada para poder ser cargada. Por lo mismo, el sistema no funcionará mientras este se carga.

El circuito eléctrico, como se ve en el esquema, funciona de esta manera.

La Batería de 7.4v tiene dos salidas, una es el balanceador, que en este caso irá conectada a la alarma que nos indicará si la batería tiene poca carga. La otra salida es el conector de poder, que en este caso es del tipo Dean. Esta irá conectada al UBEC 5v, que se encargará de transformar la corriente de 7.4v proveniente de la batería, a 5v, que es lo que requiere tanto el Raspberry Pi, como el Amplificador y la Pantalla, (Los 3 únicos componentes que requieren poder en el sistema). Como ambas conexiones se encargan de mantener encendido el sistema, y funcionando la batería, ambos deben pasar por un interruptor, que en este caso será un Switch DPDT (que cierra y abre dos conexiones = los dos conectores de la batería). Está conexión deberá ir antes de llegar tanto a la alarma como al UBEC, por lo que en resumen será:

  • Batería > Switch > UBEC
  • Batería > Switch > Alarma

Los GROUND de cada cable se saltarán el Switch, por lo que irán directo desde la batería a la alarma y al UBEC respectivamente.

Luego de esto, desde el UBEC se deberá dividir tanto el cable tierra como el de poder, y saldrán 3 conexiones, una para cada componente que requiere poder en el sistema.

  • Raspberry Pi
  • Decodificador HDMI TFP401 (Pantalla)
  • Amplificador

En el caso del Raspberry Pi, se usarán los conectores GPIO (Imagen adjunta) para recibir los 5v y el Ground del UBEC (Pin 02 y Pin 06). Para el Decodificador, y el Amplificador, llegará un cable tanto al 5v y al GND que se encuentran uno al lado del otro. El Amplificador además cuenta con un switch en el cable de 5v para poder apagar los parlantes al momento de conectar audífonos. Además, el chip de Cupcade que controla el joystick análogo requiere de 5v, sacados directamente desde el Raspberry Pi por un pin GPIO (Imagen adjunta).

La batería irá en un case diseñado especialmente para la batería (adjunto en el archivo del modelo). Este depende exclusivamente del modelo de batería a usar, siendo las medidas distintas de una a otra.

En este caso, la batería va inserta a presión, rodeada por una mica para poder ser removida. Dentro de este case hay un conector jst xh 2s de 3 pines, que extiende el conector lo suficiente para dejar la entrada a la vista.

Luego, desde la carcasa del portátil, colgarán dos cables con los dos conectores para la batería, de manera de poder ser desconectados sin abrir todo el sistema y poder cargar la batería sin ser removida, sólo desconectada. Los conectores luego van al Switch DPDT como se mencionó anteriormente.

Step 7: Desarrollo (Audio Y Video)

VIDEO

Para el video se conecta el cable Slim HDMI entre el Raspberry y el Decodificador HDMI. Del decodificador sale un cable FPC que se conecta a la extensión FPC y luego a la pantalla.

La pantalla debe ser configurada en el archivo de configuración de Retropie en la microsd. /boot/config.txt

  • hdmi_force_hotplug=1
  • hdmi_group=2
  • hdmi_mode=1
  • hdmi_mode=87
  • hdmi_cvt 800 480 60 6 0 0 0
  • overscan=1

AUDIO

Para el sonido, el portátil cuenta con una salida para audífonos y 2 parlantes de 2w cada uno. Para esto se usa un adaptador de audio USB, ya que la salida de audio del Raspberry no es de muy buena calidad. Para no tener un USB asomado, se sueldan cables al Raspberry desde abajo, manteniendo la conexión al interior. El adaptador de audio tiene una salida de micrófono que es desoldada. La salida de audio queda como entrada para audífonos. De esta misma entrada salen cables hacia el amplificador, el cual potencia los 2 parlantes. El cable de 5v que le da poder al amplificador cuenta con un interruptor de manera de apagar los parlantes al usar los audífonos. Además hay dos tact switches que controlan el volumen de los parlantes por software.

Para configurar la salida de audio hay que seguir la siguiente guía.

USB Audio and Retropie

Step 8: Desarrollo (Controles)

Los controles se conectan al Raspberry por medio de los puertos GPIO (imagen adjunta). Para ello, se usan los cables jumper, se les corta una punta, y se suelda al contacto de cada botón, mientras la otra punta se dobla, se forra en un tubo termoretráctil y se conecta al pin GPIO respectivo.

Para los botones de SNES, el control se debe dividir el PCB en 3 partes con un Dremel. Se corta el PAD, el start/select y los botones A B X Y. Además de alejar el L y R que ya vienen separados. Luego, se debe raspar la conexión de cada botón, como se ve en la imagen, y soldar ahí un cable que va al GPIO del Raspberry. Además cada parte del PCB va conectada por un GROUND a otro pin GPIO.

Luego hay que configurar los controles en la aplicación Retrogame de Adafruit. Para eso hay que primero instalarla desde Retropie, siguiendo lo explicado en esta sección, pero con los controles de GPIO especificados en la imagen adjunta.

Adafruit Retrogame

Step 9: Ensamblaje

Luego de conectar todo y ponerlo en su lugar, es hora de ensamblar los botones en su lugar, apretar tornillos y cerrar ambas partes de la carcasa, cuidando que los cables estén bien conectados y puestos en su lugar, con el menor movimiento posible.

Step 10: Funcionamiento

Luego de haber ensamblado todo, se deben instalar ROMS y configurar los emuladores para que los botones sirvan dentro de cada uno. Adjunto archivos de configuración específicas para este sistema.

Y listo!

Step 11: Problemas Y Posibles Mejoras

PROBLEMAS

Los principales problemas que se presentaron tuvieron que ver con tres cosas. Primero, la batería. Es posiblemente lo más difícil en un proyecto como este, por lo menos para mi. En este caso específico, al optar por usar un Raspberry Pi 3, que requiere mayor amperaje, me basé en los tutoriales existentes y luego de haber tenido todos los materiales, me di cuenta que el amperaje entregado por las baterías y el sistema instalado (Powerboost 1000c + Baterías Li-ion 18650) no era suficiente para aguantar todos los componentes funcionando. Por esto debí buscar otras alternativas, y finalmente optar por dejarlo con una batería mucho más potente de RC, en que si bien el tiempo de uso se vería aumentado, no se podría usar mientras se está cargando.

El otro problema fue con el sonido, ya que la salida de audio análoga del Raspberry Pi deja mucho que desear, presentando constantes chicharreos estáticos tuve que optar por no usarla, y cambiarla por un adaptador de audio USB, además de mejores parlantes.

Y por último, el problema de la terminación, que es mas personal, pero tuvo que ver que el modelo impreso no alcanzaba el nivel de acabado que deseaba, por lo que invertí mucho tiempo en arreglarlo hasta que me dejara satisfecho.

MEJORAS

La principal mejora que veo posible a investigar con el diseño, tiene que ver con el proceso de carga de la batería. Mi idea en un principio era poder conseguir un sistema que funcionara enchufado, mientras se cargan las baterías. No pude investigar mayormente en como solucionarlo, pero creo que deben haber otras alternativas que lo solucionen.

La segunda mejora al diseño, sería algo que también contemplaba en un principio (de hecho se ve en el modelo), y es que quería que tuviera una salida para conectar la consola a un televisor. Dejé una tapa para poder desconectar el HDMI y conectarlo a una entrada externa, pero no fue posible hacerla funcionar ya que el Raspberry está configurado para la resolución de la pantalla de 5", y sólo para esa. También creo que es un problema solucionable (una primera idea sería tener distintas memorias microsd con distintas configuraciones del sistema) si se estudia con mayor detalle.