
“ DonCon2040 是一款为 DIY 太鼓达人街机风格鼓控制器设计的固件(并由此延伸出一款 PCB)。”





如果你在寻找更通用、即刷即用且能随时配置的方案,我推荐你看看像 GP2040-CE(https://github.com/OpenStickCommunity/GP2040-CE) 这样更通用的项目。然而,如果你想构建更专业或定制化的设备,可以随时使用本项目作为基础。它被设计成具有一定的模块化特性,应该很容易改造。可以参考 DivaCon2040(https://github.com/ravinrabbid/DivaCon2040) 项目,看看改造后可能是什么样子。


功能特性
多种控制器模拟模式
HORI PS4-095 太鼓控制器 (PS4) (可在 PS4 上工作,详情请参阅 PS4 验证)
HORI NSW-079 太鼓控制器 (Switch) (兼容 Switch 上的《太鼓之达人 咚咚雷音祭》 / 《太鼓之达人 Drum'n'Fun》)
Dualshock 4 (仅适用于 PC/Steam,无法在真实的 PS4 主机上使用!)
Dualshock 3
Switch Pro Controller
XInput
XInput Analog (兼容 TaikoArcadeLoader 的模拟输入)
键盘 (按键映射: 'DFJK' / 'CBN,')
MIDI
调试模式 (将通过 USB 串口输出当前状态并允许直接刷写)
通过外部 i2c GPIO 扩展器增加额外按键
通过连接的 OLED 屏幕上的菜单进行基本配置
单个 WS2812 LED 用于触发反馈
显示屏上显示连打计数器
固件编译
我强烈建议你自行编译固件,以便在 include/GlobalConfiguration.h 文件中进行调整,使其与你的特定控制器构造相匹配。你仍然可以使用 预编译的二进制版本,该版本已为 DonConIO 预先配置好。
VSCode (Windows, Linux, MacOS)
安装 VSCode 并获取 Raspberry Pi Pico 扩展。
在扩展中选择“Import Project”,然后选择你克隆此仓库的文件夹。
最后使用“Compile Project”进行编译。
命令行 (CLI)
请参阅 pico-sdk readme 查看所需预备环境的列表。
使用环境变量
PICO_SDK_PATH来指定本地的 pico-sdk 路径,使用PICO_BOARD来选择其他目标板。默认情况下,pico-sdk 将从 Github 获取,目标板为 "pico"。
mkdir build && cd buildcmake ..make配置
一些你可能需要更频繁更改的设置,可以通过连接的 OLED 显示屏上的屏幕菜单进行修改。同时按住 Start 和 Select 键 2 秒钟即可进入菜单:
控制器模拟模式
LED 亮度
触发阈值
保持时间
进入 BOOTSEL 模式以刷写固件
如果你在退出菜单时选择“保存”,这些设置将被保存到闪存中,并在断电重启后依然生效。
默认值和其他所有设置都是静态编译到固件中的。你可以在 include/GlobalConfiguration.h 文件中找到所有内容。这包括默认控制器模式、i2c 引脚、外部 ADC 配置、地址和速度、默认触发阈值、范围和去抖延迟、按键映射、LED 颜色和亮度。
去抖延迟 / 保持时间
去抖延迟也隐式地充当了敲击后输入的“保持时间”。在某些平台上,如果这个时间太短,输入可能无法被正确识别。例如,Switch 上的《太鼓之达人》需要至少 25 毫秒。
如果你注意到即使控制器上的 LED/显示屏已显示敲击成功,但游戏中仍有漏输入的情况,请尝试增加这个值。
PS4 验证
PS4 需要控制器每隔几秒钟签署一次加密质询,否则在插入约 8 分钟后将停止工作。对于太鼓达人游戏来说,这个问题还算可以忍受,因为你可以在每首歌开始前重新插拔控制器,以避免在游戏过程中遇到超时问题。尽管如此,这还是很烦人。
DonCon2040 可以签署这些质询,但你需要从一个原装 DS4 控制器中获取一些数据,并将其编译到固件中。你需要一个序列号文件、一个签名文件和一个私钥文件。我不能也不会帮助你如何获取这些文件,你需要自己想办法解决。
要编译固件,请在你放置所需文件的文件夹中运行 scripts/generateAuthConfig.py 脚本。将生成的 PS4AuthConfiguration.h 文件复制到 include目录,替换掉现有文件。然后按照 固件编译 部分的说明进行编译。
签署质询会占用 RP2040 的第二个核心 2-3 秒,因此显示屏、外部控制器和 LED 会时不时地看起来像卡住了一样。鼓的输入处理不受影响。
硬件
IO 板
pcb 子文件夹中的 DonConIO 板在设计上力求接近原版街机硬件。它搭载一个 Seeed Studio XIAO RP2040,并为 Sensatec GSS-4S* 压电式冲击传感器提供信号调理。详情请参阅其 README 文件。
如果你不想使用这个板子,该固件在适当配置后应该可以在大多数 RP2040 板子上使用。你也可以使用更简单的触发方案,只要它能向 ADC 输入提供一个模拟触发电平即可兼容。
控制器按键和显示屏
额外的控制器按键和显示屏连接到同一个 i2c 总线(如果你的板子有多个 i2c 总线,也可以连接到不同的总线)。显示屏请使用标准的分辨率为 128x64 的 SSD1306 OLED 显示屏。按键需要连接到一个 MCP23017 IO 扩展器。
可参考 DonConPad 项目作为一个示例性的游戏手柄 PCB。
请注意,目前显示屏和按键是使用该控制器的强制性要求。
物理结构
关于物理结构,我只给出一个粗略的纲要,因为我对其性能仍不完全满意,并且还在尝试一些替代方案:
鼓面由 12mm 厚的复合板制成。外径约为 42cm,内径约为 35cm。
鼓面通过橡胶减震器安装在另一块 20mm 厚的复合板上。街机鼓的背板似乎更薄,但由于它们是牢固地安装在街机框体上的,我想增加一些重量应该没坏处。
橡胶减震器高 15mm,直径 20mm。街机鼓似乎使用锥形减震器,但至少我能搞到的锥形减震器感觉太软了,所以我用了直筒形的。
鼓皮方面,我尝试过用 2mm 的天然橡胶片覆盖一些帆布,效果还算不错,但声音很响且回弹很小。我现在进口了真正的街机鼓皮,效果好得多。
原理图 & PCB
IO 板












仓库 & 下载
可以在Github中获取开源仓库:
https://github.com/ravinrabbid/DonCon2040

扫码加入资料分享群,定期分享硬件资料
