DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
零部件与材料
| SparkFun Pro Micro - 5V/16MHz | ×1 |
| Arduino Leonardo | ×1 |
| SparkFun 12mm 轻触开关 | ×12 |
| 10kΩ 电阻 | ×1 |
| 定制蚀刻 PCB | ×1 |
| UTSOURCE 电子元件 | ×1 |
所需工具
- 氯化亚铁粉末(蚀刻液)
- 3D 打印机
- 无绳电钻/驱动器
软件与在线服务
- Arduino IDE
- Autodesk Fusion 360(外壳建模)
项目详解
视频演示
建议先观看项目视频:
项目介绍
本项目在 ElectroPunkz Labs 开发,旨在制作一款基于 ATmega32U4 的低成本 USB 游戏手柄,含按键与模拟摇杆,可玩《极品飞车》《GTA》《半条命》《小小格斗 2》等游戏。
已制作两种外形:V1 采用 PS1/SNES 经典布局,V2 规划为 Xbox 风格带模拟摇杆(尚未定稿)。本文介绍 V1 版。

材料清单
- Arduino Leonardo / Pro Micro / ATmega32U4 开发板
- 轻触开关 (按键)
- 定制蚀刻 PCB(附件含 PCB PDF)
- 10kΩ 电阻
- 跳线
鸣谢 UTSOURCE.net 赞助电子元件! 他们提供全品类元器件,含本项目所有用料。
制作流程(接线、组装等)
核心电路:12 个按键以下拉电阻方式接 Pro Micro。先在面包板验证,再按原理图设计 PCB。

用 OrCAD 设计 PCB,打印顶层到光面纸,热转印法转印至铜覆板(见作者视频教程),氯化亚铁腐蚀,钻孔,焊接元件,电路板完成。

用 Fusion 360 设计并 3D 打印外壳。

上传代码即可游戏。
源代码
上传至 Pro Micro。重要提示: 上传前务必彻底测试电路/PCB 连通性与电阻值。缺地线会导致引脚悬浮,Pro Micro 疯狂发送随机按键,导致极难重新烧录。
#include <Keyboard.h>
int WPin = 2; // 上
int SPin = 3; // 下
int APin = 4; // 左
int DPin = 5; // 右
int UPLpin = 7; // 左上 (Q)
int UPRpin = 9; // 右上 (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); }
}
测试验证
- 打开记事本,按手柄各键,确认输出字符与代码映射一致。
- 或使用任意键盘测试网页/软件。
- 全键正常后,启动游戏实战测试。
后续改进计划
- 加入模拟摇杆,支持鼠标导向类游戏(如 Xbox 手柄体验)。
- V2 将采用 Xbox One 布局的专用 PCB,敬请期待。
有问题欢迎留言!
自定义部件与外壳
(Fusion 360 源文件见附件)
原理图
(原理图文件见附件)
制造工艺
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- 自制 16×8 LED 矩阵俄罗斯方块游戏机:Arduino Nano + 74HC595 驱动
- 智能 Arduino 水杯:实时监测饮水量与智能提醒
- Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏
- Alexa 语音控制 Arduino 智能家居中枢:基于 Yun + PubNub + AWS Lambda 全栈实现
- Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏
- 智能手语手套:柔性传感器 + 加速度计 + 蓝牙将手势转文字/语音
- Arduino Nano 与 WS2812 灯带打造 1D 乒乓球游戏——分步 DIY 教程
- Arduino DMX-512 测试控制器 – 可靠灯光控制的完整套件
- DIY LED 轮盘赌游戏机 —— Arduino Nano 打造单人桌面街机
- Arduino Mega 2560 驱动的开源植物生长箱控制器:固件与硬件全指南