Cómo hacer un gamepad de raspberry Pi

| |

COMPARTE EL ARTÍCULO!!!

De vez en cuando, me pongo nostálgico con los videojuegos que jugué durante mi infancia a finales de los$002780 y en los$002790. Aunque la mayoría de mis viejos ordenadores y consolas de juego han desaparecido hace tiempo, mi raspberry Pi puede cumplir con mi arreglo de retro-juego. Me gustan los juegos sencillos incluidos en Raspbian, y el proyecto RetroPie de código abierto me ayudó a convertir mi Raspberry Pi en una máquina de retrojuegos avanzada.

Pero, para una experiencia más auténtica, como en los «viejos tiempos», necesitaba un gamepad. Hay muchas opciones en el mercado para los gamepads y joysticks USB, pero como entusiasta del código abierto, fabricante e ingeniero, prefiero hacerlo de la manera difícil. Así que, hice mi propio y simple gamepad de hardware de código abierto, al que llamé ANAVI Play pHAT. Lo diseñé como un add-on board para Raspberry Pi usando una EEPROM y una sobreimpresión binaria de árbol de dispositivos que creé para mapear las teclas.

Obtener los botones del gamepad y la EEPROM

Hay una gran variedad de gamepads disponibles para la compra, y algunos de ellos son realmente complejos. Sin embargo, no es difícil hacer un gamepad similar al icónico controlador de NES usando el diseño que yo creé.

El gamepad utiliza ocho botones «momentáneos» (es decir, interruptores que sólo están activos cuando se pulsan): cuatro interruptores táctiles (tacto) para el movimiento (Arriba, Abajo, Izquierda, Derecha), dos botones de tacto para A y B, y dos botones de tacto más pequeños para Seleccionar y Arrancar. Utilicé interruptores de tacto con orificios: seis interruptores de 6x6x4.3mm para el movimiento y los botones A y B, y dos interruptores de 3x6x4.3mm para los botones Start y Select.

Mientras que el propósito principal del gamepad es jugar a juegos retro, el tablero adicional es lo suficientemente grande como para incluir funciones de automatización doméstica, como el control de la temperatura, la humedad, la luz o la presión barométrica, que puede utilizar cuando no está jugando. Añadí tres ranuras para conectar los sensores I2C al bus I2C primario en los pines físicos 3 y 5.

La parte más interesante e importante del diseño del hardware es la EEPROM (memoria de sólo lectura programable y borrable eléctricamente). Una EEPROM montada con orificios pasantes es más fácil de instalar en una protoboard y soldar a la almohadilla de juego. Un artículo en la revista MagPi recomienda CAT24C32 EEPROM; si ese modelo no está disponible, intente encontrar un modelo con especificaciones técnicas similares. Todos los modelos y versiones de Frambuesa Pi lanzados después de 2019 (Frambuesa Pi B+ y más nuevos) tienen un I2Cbus secundario en los pines físicos 27 y 28.

Una vez que tenga este hardware, utilice una protoboard para comprobar que funciona.

Crear la tarjeta de circuito impreso

El siguiente paso es crear un diseño de placa de circuito impreso (PCB) y hacerla fabricar. Como entusiasta del código abierto, creo que el software libre y de código abierto debe ser utilizado para crear hardware de código abierto. Confío en KiCad, el software de automatización de diseño electrónico (EDA) disponible bajo la licencia GPLv3+. KiCad funciona en Windows, MacOS y GNU/Linux. (Uso KiCad versión 5 en Ubuntu 18.04.)

KiCad permite crear placas de circuito impreso con hasta 32 capas de cobre y 14 capas técnicas de uso fijo. También tiene un visor 3D integrado. Se desarrolla activamente, incluyendo muchas contribuciones de los desarrolladores del CERN, y se utiliza para aplicaciones industriales; por ejemplo, Olimex utiliza KiCad para diseñar placas de circuito impreso complejas con múltiples capas, como la de su portátil de hardware de código abierto TERES-I.

El flujo de trabajo de KiCad incluye tres pasos principales:

  • Diseño de los esquemas en el editor de diseño de esquemas
  • Dibujar los cortes de bordes, colocar los componentes y enrutar las pistas en el editor de diseño de la placa de circuito impreso
  • .

  • Exportación de archivos Gerber y drill para la fabricación

Si usted no ha diseñado PCBs antes, tenga en cuenta que hay una curva de aprendizaje empinada. Revise los ejemplos y las guías de usuario que KiCad le ofrece para aprender a trabajar con el editor de diagramas esquemáticos y el editor de diseño de placas de circuito impreso. (Si no estás de humor para hacer todo desde cero, puedes clonar el proyecto ANAVI Play pHAT en mi repositorio GitHub.)

kicad-schematic.png

En el editor de diseño esquemático de KiCad, conecte los GPIOs de Raspberry Pi a los botones, las ranuras para sensores al I2C primario y la EEPROM al I2C secundario. Asigne una huella apropiada a cada componente. Realice una comprobación de las reglas eléctricas y, si no hay errores, genere la lista de redes, que describe la conectividad de un circuito electrónico.

1. Abra el editor de diseño de placa de circuito impreso. Contiene varias capas. Lee la lista de la red. Todos los componentes y pistas deben estar en las capas de cobre frontal e inferior (F.Cu y B.Cu), y la forma del tablero debe ser creada en la capa Edge.Cuts. Cualquier texto, incluyendo las etiquetas de los botones, debe estar en las capas de serigrafía.

circuitboard.png

Finalmente, exporte los archivos Gerber y drill que enviará a la empresa que producirá su PCB. El formato Gerber es el estándar industrial de facto para los PCBs. Es un formato vectorial ASCII abierto para imágenes binarias 2D; simplemente explicado, es como un PDF para la fabricación de PCB.

Hay numerosas compañías que pueden hacer un simple tablero de dos capas como el gamepad. Para algunos prototipos, puede contar con OSHPark en los EE.UU. o Aisler en Europa. También hay muchos fabricantes chinos, como JLCPCB, PCBWay, ALLPCB, Seeed Studio, y muchos más. Alternativamente, si prefiere evitar las molestias de la fabricación de PCB y los componentes de aprovisionamiento, puede pedir el kit ANAVI Play pHAT maker a Crowd Supply y soldar todos los componentes a través del agujero por su cuenta.

Comprensión del árbol de dispositivos

Devicetree es una especificación para una estructura de datos de software que describe los componentes de hardware. Su propósito es permitir que el núcleo compilado de Linux pueda manejar una variedad de configuraciones de hardware diferentes dentro de una familia de arquitectura más amplia. El cargador de arranque carga el árbol de dispositivos en la memoria y lo pasa al núcleo de Linux.

El árbol de dispositivos incluye tres componentes:

  • Fuente del árbol de dispositivos (DTS)
  • Mancha de árbol de dispositivo (DTB) y superposición (DTBO)
  • Compilador de árboles de dispositivos (DTC)

El DTC crea binarios a partir de una fuente textual. Las superposiciones de árbol de dispositivo permiten superponer un DTB central en el árbol de dispositivo. Las superposiciones incluyen una serie de fragmentos.

Durante varios años, se ha requerido un árbol de dispositivos para todos los nuevos sistemas ARM en un chip (SoCs), incluyendo los SoCs Broadcom en todos los modelos y versiones de Frambuesa Pi. Con el cargador de arranque predeterminado en la popular distribución Raspbian de Raspberry Pi, DTO puede configurarse en el archivo de configuración (config.txt) en la partición FAT de una tarjeta microSD de arranque utilizando la palabra clave device_tree=.

Desde 2019, el cabezal del Pin Pi de raspberry se ha ampliado a 40 pines. Los pines 27 y 28 están dedicados a un bus secundario I2C. De esta manera, el DTBO puede ser cargado automáticamente desde una EEPROM conectada a estos pines. Además, se puede guardar información adicional del sistema en la EEPROM. Esta característica se encuentra entre los requisitos de la Raspberry Pi Foundation para cualquier tarjeta adicional de raspberry Pi HAT (hardware colocado en la parte superior). En Raspbian y otras distribuciones GNU/Linux para Raspberry Pi, la información de la EEPROM puede verse desde el espacio de usuario en /proc/device-tree/hat/ después de arrancar.

En mi opinión, el árbol de dispositivos es una de las características más fascinantes añadidas en el ecosistema Linux durante la última década. La creación de notas y superposiciones de árbol de dispositivos es una tarea avanzada y requiere cierto conocimiento de fondo. Sin embargo, es posible crear una sobreimpresión binaria de árbol de dispositivos para la tarjeta complementaria Raspberry Pi y flash en una EEPROM apropiada. La sobreimpresión binaria del dispositivo define los códigos de clave de Linux para cada clave del gamepad. El resultado es un gamepad para Raspberry Pi con teclas que funcionan tan pronto como arrancas Raspbian.

Creación del DTBO

Hay tres pasos principales para crear una sobreimpresión binaria de árbol de dispositivos para el gamepad:

  • Creación de la fuente del árbol de dispositivos con asignación de las claves basada en los códigos de clave de Linux
  • Compilación de la sobreimpresión binaria de árbol de dispositivos mediante las compilaciones de árbol de dispositivos
  • Creación de un archivo.eep y flasheo en una EEPROM usando las herramientas de código abierto proporcionadas por la Fundación Raspberry Pi

Los códigos de clave de Linux se definen en el archivo /usr/include/linux/input-event-codes.h. El archivo fuente del dispositivo debe describir qué clavija Pi GPIO de Frambuesa está conectada a qué botón de hardware y qué código de clave de Linux se debe activar cuando se pulsa el botón. En este gamepad, GPIO17 (pin 11) está conectado al botón táctil para Right, GPIO4 (pin 7) to Left, GPIO22 (pin 15) to Up, GPIO27 (pin 13) to Down, GPIO5 (pin 29) to Start, GPIO6 (pin 31) to Select, GPIO19 (pin 35) to A, y GPIO26 (pin 37) to B.

Tenga en cuenta que hay una diferencia entre los números GPIO y la posición física del pin en el encabezado. Para mayor comodidad, todos los pines se encuentran en la segunda fila del cabezal de 40 pines del raspberry Pi. Este enfoque facilita el encaminamiento de la placa de circuito impreso en KiCad.

La fuente completa del árbol de dispositivos para el gamepad está disponible en GitHub. Como ejemplo, el siguiente es un fragmento de código corto que demuestra cómo GPIO17, correspondiente al pin físico 11 en el Pi de Frambuesa, se mapea al botón de tacto para Derecha:

botón@17 {
etiqueta = «derecha»;
linux, código = <106>;
gpios = <&gpio 17 1>;
};

Para compilar el DTS directamente en el Raspberry Pi, instale el compilador de árbol de dispositivos en Raspbian ejecutando el siguiente comando en el terminal:

sudo apt-get update
sudo apt-get install dispositivo-árbol-compilador

Ejecute DTC y proporcione como argumentos el nombre de la salida DTBO y la ruta al archivo fuente. Por ejemplo:

dtc -I dts -O dtb -o anavi-play-phat.dtbo anavi-play-phat.dts

La Raspberry Pi Foundation proporciona un repositorio GitHub con las especificaciones mecánicas, de hardware y software para los HATs. También incluye tres herramientas muy convenientes:

  • eepmake: Crea un archivo.eep a partir de un archivo de texto con ajustes
  • eepdump: Útil para depuración, ya que vuelca un archivo.eep binario como texto legible para humanos
  • eepflash: Escribe o lee una imagen binaria.eep a/desde una EEPROM

El archivo eeprom_settings.txt puede utilizarse como plantilla. La Frambuesa Pi Foundation y la revista MagPi tienen artículos y tutoriales útiles, así que no entraré en demasiados detalles. Como escribí anteriormente, la EEPROM recomendada es CAT24C32, pero puede ser reemplazada por cualquier otra EEPROM con las mismas especificaciones técnicas. El uso de una EEPROM con un paquete de ocho pines, con orificios pasantes y doble en línea (DIP) es más fácil para los aficionados al flash porque se puede hacer con una protoboard. El siguiente comando de ejemplo crea un archivo listo para ser flasheado en la EEPROM usando la herramienta eepmake del repositorio de Raspberry Pi GitHub:

./eepmake settings.txt settings.eep anavi-play-phat.dtbo

Antes de proceder con el flasheo, asegúrate de que la EEPROM esté conectada correctamente al bus primario I2C (pines 3 y 5) en el raspberry Pi. (Puede consultar el artículo de la revista MagPi para una discusión sobre los esquemas de cableado.) Luego ejecute el siguiente comando y siga las instrucciones en pantalla para hacer destellar el archivo.eep en la EEPROM:

sudo./eepflash.sh -w -f=settings.eep -t=24c32

Antes de soldar la EEPROM a la placa de circuito impreso, muévala al bus secundario I2C de la placa base y pruébela para asegurarse de que funciona como se espera. Si detectas algún problema mientras pruebas la EEPROM en la protoboard, corrige los archivos de configuración, muévela de nuevo al bus I2C primario, y vuelve a flashearla.

Probando el gamepad

Ahora viene la parte divertida! Es hora de probar el add-on board usando Raspbian, que puedes descargar desde RaspberryPi.org. Después de arrancar, abra un terminal e introduzca los siguientes comandos:

cat /proc/device-tree/hat/product
cat /proc/device-tree/hat/vendedor

La salida debería ser similar a ésta:

testing-output.png

Si lo es, ¡felicidades! Los datos de la EEPROM se han leído con éxito.

El siguiente paso es verificar que las teclas en el Play pHAT están ajustadas correctamente y funcionan. En un terminal o en un editor de texto, presione cada uno de los ocho botones y verifique que estén actuando según lo configurado.

Finalmente, ¡es hora de jugar! Por defecto, el escritorio de Raspbian incluye Juegos Python. Lánzalos desde el menú de la aplicación. Haga una selección de salida de audio y elija un juego de la lista. Mi favorito es Wormy, un juego parecido a Snake. Como ex desarrollador de aplicaciones móviles Symbian, me parece que jugar a Wormy me trae recuerdos de los gloriosos días de Nokia.

Juegos retro con RetroPie

retropie.jpg

Raspbian es increíble, pero RetroPie ofrece mucho más para los aficionados a los juegos retro. Es una distribución GNU/Linux optimizada para jugar a juegos retro y combina los proyectos de código abierto RetroArch y Emulation Station. Está disponible para Raspberry Pi, el Odroid C1/C2, y ordenadores personales con Debian o Ubuntu. Proporciona emuladores para cargar las ROM, las versiones digitales de los cartuchos de juego. Tenga en cuenta que no se incluyen ROMs en RetroPie debido a cuestiones de derechos de autor. Tendrá que encontrar las ROMs apropiadas y copiarlas al Pi de Frambuesa después de arrancar RetroPie.

El gamepad por hardware de código abierto funciona bien en los menús de RetroPie, pero descubrí que las teclas fallan después de lanzar algunos juegos y emuladores. Después de depurar, encontré una solución para asegurar que funcionen en los emuladores de juegos: añadir un script Python para la emulación de software adicional de las claves. El script está disponible en GitHub. He aquí cómo obtenerlo e instalar Python en RetroPie:

sudo apt-get update
sudo apt-get install – python-pip
sudo pip install evdev
cd ~
clon de git https://github.com/AnaviTechnology/anavi-examples.git

Finalmente, agregue la siguiente línea a /etc/rc.local para que se ejecute automáticamente cuando RetroPie arranque:

sudo python /home/pi/anavi-ejemplos/anavi-play-phat/anavi-play-gamepad.py &

¡Eso es todo! Después de seguir estos pasos, puedes crear un gamepad de hardware totalmente de código abierto como una tarjeta adicional para cualquier modelo de Frambuesa Pi con un cabezal de 40 pines y usarlo con Raspbian y RetroPie!

¿Qué es lo siguiente?

Combinar software libre y de código abierto con hardware de código abierto es divertido y no difícil, pero requiere una cantidad de tiempo significativa. Después de crear el gamepad de hardware de código abierto en mi tiempo libre, llevé a cabo una modesta campaña de financiación colectiva en Crowd Supply para la fabricación de bajo volumen en mi ciudad natal de Plovdiv, Bulgaria. La Open Source Hardware Association certificó a ANAVI Play pHAT como un proyecto de hardware de código abierto bajo BG00000007. Incluso las cajas de acrílico que protegen la placa del polvo son hardware de código abierto creado con el software libre y de código abierto OpenSCAD.

gamepad-acrylic.jpg

Si te ha gustado leer este artículo, te animo a que intentes crear tu propia placa adicional de hardware de código abierto para Raspberry Pi con KiCad. Si no tiene suficiente tiempo libre, puede pedir un kit de pHAT Play deANAVI, coger su soldador y montar los componentes que pasan por el agujero. Si no se siente cómodo con el soldador, puede pedir una versión completamente montada.

Feliz juego retro para todos! La próxima vez que alguien te pregunte irritado lo que puedes aprender de los juegos de ordenador clásicos, cuéntales sobre Raspberry Pi, el hardware de código abierto, Linux y devicetree.

COMPARTE EL ARTÍCULO!!!

Previous

Cómo buscar en Google Drive como un profesional!

Los mejores lugares para descargar plantillas HTML para su sitio web

Next

Deja un comentario

shares