Mando USB para juegos DIY con Arduino – Construye tu propio gamepad de alto rendimiento
Componentes y suministros
| SparkFun Pro Micro - 5V/16MHz | ×1 |
| Arduino Leonardo | ×1 |
| Pulsadores SparkFun 12mm | ×12 |
| Resistencia 10k ohm | ×1 |
| PCB personalizado grabado | ×1 |
| Componentes electrónicos UTSOURCE | ×1 |
Herramientas y máquinas necesarias
- Polvo de cloruro férrico (para grabar PCB)
- Impresora 3D (genérica)
- Taladro/atornillador inalámbrico
Aplicaciones y servicios en línea
- Arduino IDE
- Autodesk Fusion 360
Sobre este proyecto
VÍDEO
Mejor ver primero el vídeo del proyecto.
INTRODUCCIÓN
Este post trata sobre un "Mando USB Gaming DIY" en el que llevamos trabajando tiempo en ElectroPunkz Labs.
La idea es hacer un mando USB barato basado en Atmega32U con botones y joysticks analógicos para jugar a juegos como NFS, GTA, Half-Life, LITTLE FIGHTER 2, etc.
Hemos hecho dos formatos: uno basado en configuración PS1/SNES y otro tipo Xbox con sticks analógicos y botones (aún no finalizado).

En este post haremos la V1: ¡el mando con layout PS1!
MATERIALES
El hardware es simple y fácil de conseguir (excepto el PCB, puedes hacer el tuyo con el PDF adjunto del PCB).
- Arduino Leonardo / Pro Micro / Atmega32U
- Botones (pulsadores tactiles)
- PCB personalizado grabado (PDF de matriz de botones adjunto)
- Resistencias 10K
- Cables jumper
Gracias a UTSOURCE.net por proveer componentes electrónicos para este proyecto. Puedes consultar UTSOURCE.net, venden todo tipo de componentes como los usados aquí.
PROCESO DE CONSTRUCCIÓN (Cableado, montaje, etc.)
Lo primero es preparar la configuración básica: 12 pulsadores en configuración pull-down con un Pro Micro, básicamente esto:
Lo probamos en protoboard y luego preparamos un PCB según el esquema anterior.


Tras diseñar el PCB (en OrCad Cadence), imprimimos la capa superior en papel fotográfico brillante.
Recorté el papel según la forma del PCB, lo coloqué sobre una placa de cobre y apliqué calor para transferir la tinta del papel a la placa de cobre (Método básico de transferencia de tóner, ver mi vídeo sobre esto).

Con el PCB listo, lo sumergimos en solución de grabado y lo grabamos. Luego taladramos agujeros para componentes y ¡nuestro PCB DIY MANDO JUEGOS estaba listo!
Pusimos todo según el esquema y el circuito quedó listo.
Tras tener el circuito listo, diseñamos e imprimimos en 3D la carcasa/caja del mando en Fusion360.

Ahora solo falta subir el código y jugar.
CÓDIGO
Sube el código proporcionado a tu Pro Micro.
Consejo: Primero prueba tu placa/configuración a fondo, verifica resistencia y continuidad de pistas del PCB porque si falta algo causará muchos errores de teclado: líneas de tierra faltantes enviarán señales irregulares a los pines y tu Pro Micro seguirá pulsando teclas aleatorias, dificultando la reprogramación.
PRUEBAS
Lo primero: abre el Bloc de notas y pulsa las teclas de tu mando para comprobar si muestran las letras correctas asignadas, o usa cualquier app/web de test de teclado.
Si todo funciona según el código, abre cualquier juego y ¡a jugar con esta CONSOLA DIY!
Mira el vídeo.
MEJORAS FUTURAS
Lo primero que añadiré son joysticks analógicos para juegos que usan ratón para navegar al jugador, tipo XBOX ONE.
La V2 tendrá un PCB proper con layout de mando Xbox One, ¡así que estad atentos!
Dejad comentario si tenéis problemas.
Código
CÓDIGO C/C++
#include <Keyboard.h>
int WPin = 2; // ARRIBA
int SPin = 3; // ABAJO
int APin = 4; // IZQUIERDA
int DPin = 5; // DERECHA
int UPLpin = 7; // superior izquierda Q
int UPRpin = 9; // superior derecha E
int Xpin = 14; // x
int Apin = 10; // i
int Ypin = 15; // y
int Bpin = 16; // b
void setup() {
pinMode(WPin, INPUT);
pinMode(SPin, INPUT);
pinMode(APin, INPUT);
pinMode(DPin, INPUT);
pinMode(UPLpin, INPUT);
pinMode(UPRpin, INPUT);
pinMode(Xpin, INPUT);
pinMode(Apin, INPUT);
pinMode(Ypin, INPUT);
pinMode(Bpin, INPUT);
digitalWrite(WPin, HIGH);
digitalWrite(SPin, HIGH);
digitalWrite(APin, HIGH);
digitalWrite(DPin, HIGH);
digitalWrite(UPLpin, HIGH);
digitalWrite(UPRpin, HIGH);
digitalWrite(Xpin, HIGH);
digitalWrite(Apin, HIGH);
digitalWrite(Ypin, HIGH);
digitalWrite(Bpin, HIGH);
Keyboard.begin();
}
void loop() {
if (digitalRead(WPin) == 0) { Keyboard.write('W'); delayMicroseconds(1); }
if (digitalRead(SPin) == 0) { Keyboard.write('S'); delayMicroseconds(1); }
if (digitalRead(APin) == 0) { Keyboard.write('A'); delayMicroseconds(1); }
if (digitalRead(DPin) == 0) { Keyboard.write('D'); delayMicroseconds(1); }
if (digitalRead(UPLpin) == 0) { Keyboard.write('q'); delayMicroseconds(1); }
if (digitalRead(UPRpin) == 0) { Keyboard.write('e'); delayMicroseconds(1); }
if (digitalRead(Xpin) == 0) { Keyboard.write('x'); delayMicroseconds(1); }
if (digitalRead(Apin) == 0) { Keyboard.write('i'); delayMicroseconds(1); }
if (digitalRead(Ypin) == 0) { Keyboard.write('y'); delayMicroseconds(1); }
if (digitalRead(Bpin) == 0) { Keyboard.write('b'); delayMicroseconds(1); }
}
Piezas personalizadas y carcasas
(Archivos de diseño en Fusion 360)
Esquemáticos
(Esquemáticos disponibles en el repositorio del proyecto)
Proceso de manufactura
- Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
- Proyecto Dados Digitales Arduino: Construye tu Propio Generador de Números Aleatorios con LCD
- Construye un juego Tetris con Arduino Nano en matriz LED 16x8 DIY
- Botella de agua inteligente con Arduino: Monitorización en tiempo real y alertas
- Pixel Chaser: Juego LED Interactivo de Un Toque con Arduino Nano
- Controlador doméstico Arduino con Alexa: Automatización inteligente simplificada
- Pong Neón en Matriz NeoPixel con Arduino Nano
- Guante Inteligente de Gestos a Texto para Lenguaje de Signos
- Juego Pong 1D con Arduino Nano y tira LED WS2812: Tutorial paso a paso
- Controlador Probador Arduino DMX-512 – Kit Completo de Componentes para Control de Iluminación Fiable
- Juego Ruleta LED DIY: Crea un Arcade para Una Persona con Arduino Nano