Arduino 游戏控制器
组件和用品
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 12 | |||
![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 |
必要的工具和机器
| ||||
![]() |
| |||
![]() |
|
应用和在线服务
![]() |
| |||
![]() |
|
关于这个项目
视频
介绍
所以这篇文章将是关于 “DIY 游戏 USB 控制器” 我们最近在 ElectroPunkz 实验室一直在研究这一点。
这里的想法是制作一个廉价的基于 Atmega32U 的 USB 控制器,带有按钮和模拟操纵杆,可用于玩游戏
像NFS、GTA、半衰期、LITTLE Fighter 2! 等
我们制作了两种形式的控制器,第一种是基于 PS1 或 SNES 配置的,另一种是带有模拟摇杆和按钮的直接 Xbox USB 控制器(尚未最终确定)

我们将在这篇文章中制作 V1,即 PS1 布局控制器!
最好先看项目的视频-
材料
硬件很简单,很容易得到(除了PCB,你可以用随附的PCB PDF文件自己制作)
- Arduino Leonardo/ Pro Micro/ Atmega32U
- 按钮(滴答声开关)
- 定制蚀刻 PCB(附有按钮矩阵 PDF)
- 10K 电阻器
- 跳线
谢谢 UTSOURCE.net 为该项目提供电子元件! 你可以查看 UTSOURCE.net,他们处理各种电子元件,例如这个项目中使用的所有元件!
构建过程 (接线、组装 , 等)
我们需要做的第一件事是准备基本设置,它基本上是 12 个按钮在下拉配置中与 Pro Micro 连接,基本上是这样-
我们在面包板上对此进行了测试,然后根据上述原理图准备了一块 PCB。


制作 PCB 后(以 OrCad 节奏),我们将其顶层的 PDF 打印在光面纸上。
我根据 PCB 的形状切割光面纸并将其放在覆铜板上并对其加热,以将油墨从光面纸转移到覆铜板上。 (基本音调传输方法,观看我关于这个主题的视频)

准备好 PCB 后,我们将其放入蚀刻溶液中并蚀刻 PCB,之后,我们只是为组件钻孔,以及我们的 DIY 游戏控制器 PCB 准备好了!
然后我们就按照原理图把所有的东西都放在上面,电路就准备好了。
在准备好电路后,我们在 Fusion360 中为控制器设计并 3D 打印了 PCB 外壳/外壳。

现在我们只需要上传代码并用它玩一些游戏。
代码
上传 Pro Micro 上提供的代码。
忠告,首先彻底测试您的电路板/设置,检查 PCB 走线的电阻和连接性,因为如果缺少某些东西,这将导致大量键盘错误,因为缺少地线会向引脚发送不规则信号,而您的专业微型将保持按下随机键,这将使重新编程 Pro micro 变得非常困难。
测试
您需要做的第一件事是打开记事本,然后开始按下控制器的按键并检查按键上的按键是否显示正确的指定单词
或者只使用任何键盘测试应用或网络应用。
如果一切都按照代码运行,然后打开任何游戏开始玩这个 DIY 游戏控制台!
观看视频-
进一步改进
好吧,我要添加到此设置中的第一件事是模拟操纵杆,用于玩适当的游戏,它使用鼠标来导航播放器,有点像 XBOX ONE 控制台。
V2 将有一个带有 XBOX One 控制器布局的适当 PCB,敬请期待。
如果你们有任何问题,请发表评论!
代码
- 代码
CODEC/C++
#includeint WPin =2; // UP int SPin =3; // DOWNint APin =4; //左 int DPin =5; //RIGHTint UPLpin =7; //左上Qint UPRpin =9; //右上角int Xpin =14;//xint Apin =10; //iint Ypin =15;//yint Bpin =16;//bvoid setup(){ pinMode(WPin, INPUT);引脚模式(旋转,输入); pinMode(APin,输入); pinMode(DPin,输入); pinMode(UPLpin,输入); pinMode(UPRpin,输入); pinMode(Xpin,输入); pinMode(Apin,输入); pinMode(Ypin,输入); pinMode(Bpin,输入);数字写入(WPin,高);数字写入(旋转,高);数字写入(APin,高);数字写入(DPin,高);数字写入(UPLpin,高);数字写入(UPRpin,高);数字写入(Xpin,高);数字写入(Apin,高);数字写入(Ypin,高);数字写入(Bpin,高);键盘开始(); }void loop(){ if (digitalRead(WPin) ==0) { Keyboard.write('W');延迟微秒(1); } if (digitalRead(SPin) ==0) { Keyboard.write('S');延迟微秒(1); } if (digitalRead(APin) ==0) { Keyboard.write('A');延迟微秒(1); } if (digitalRead(DPin) ==0) { Keyboard.write('D');延迟微秒(1); } if (digitalRead(UPLpin) ==0) { Keyboard.write('q');延迟微秒(1); } if (digitalRead(UPRpin) ==0) { Keyboard.write('e');延迟微秒(1); } if (digitalRead(Xpin) ==0) { Keyboard.write('x');延迟微秒(1); } if (digitalRead(Apin) ==0) { Keyboard.write('i');延迟微秒(1); } if (digitalRead(Ypin) ==0) { Keyboard.write('y');延迟微秒(1); } if (digitalRead(Bpin) ==0) { Keyboard.write('b');延迟微秒(1); }}
定制零件和外壳
示意图
制造工艺