数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 99|回复: 3

[外设] 制作太鼓达人_电鼓_过程记录(已开源 多图)

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
本帖最后由 digitking 于 2026-7-22 11:06 编辑

日子过得飞快,一转眼已经2026年年中了,就当给各位大哥哥小姐姐们做个年中汇报吧。

上次发帖还是26年年初,我发的贴子[外设] 制作太鼓达人Taiko_Hitbox过程记录(已开源 多图)得到了大家的好评和热议,同时也被加精,我备受感动。
我的一个小爱好和残废的动手能力得到肯定,我感动万分。同时,我也在看大家给我的评论,其中就包括类似“做个真鼓”的建议。这不就来了么?!

老规矩,先上效果图:


开源地址:
硬件:https://oshwhub.com/crazyevan/project_ifmxcpnd
软件代码:https://github.com/stevenpaul007-creator/PicoSwitchDrumController
固件下载:https://github.com/stevenpaul007-creator/PicoSwitchDrumController/releases

来说说思路吧,流水账
  • 家里有一套电鼓,是罗兰的TD-4K,给小孩儿玩的入门级电鼓。总体来说鼓面的手感还可以。
  • 逛小黄鱼,一个鼓面20,包邮,直接买入4个,花费巨资80元。
  • 我琢磨着,直接用单片机ADC转换测一下电压就行了吧。
  • 现实打脸,鼓面的电压很低,20-200mV左右。(万用表测的,没有示波器的痛
  • 上网找罗兰电鼓的电路图,参考一下专家的杰作
  • 原来是用了运算放大器,这不是我大学模拟电路的噩梦么????????
  • 还是双电压的,我学废了。大概就是前面C163和R151构成了一个RC 高通滤波结构,后面等效的两个电阻构成了放大倍数,而且是反向放大,大约是4倍左右吧

我的电路设计(如有不正确,欢迎批评指正)
先说子板,负责鼓面采集和放大
  • 开始设计我的电路,走了弯路,最开始用的是NE5532,哎,是双电源的,我焊接上以后才知道,后来改成了单电源的MCP6002,单电源。(我其实是做了电路模拟的,估计是电路模拟软件也不太行)
  • 简单说一说,前面电容电阻构成高通滤波电路,根据公式f=1/(R*C*2pi)=159Hz。低于159Hz的我们认为是噪音,可以忽略的
  • 关于放大倍数,我在设计电路图的时候还不知道确切的阻值,所以预留了并联电阻的位置,R2和R3是并联,R4和R5是并联。后来继续分析罗兰的电路发现放大倍数大约是4倍。
  • 所以这里采用了5倍正相放大,即R2用1K,R4用5.1K。R3和R5不接。
  • 后面的两个二极管是为了防止输出电压超过3.3v,损坏单片机ADC的保护。由于我给运放的电压只有3.3v,其实可以不焊接
  • 最左面采用3.5mm二级插孔作为输入,方便。两个声道对应两个鼓面,对应一个运放芯片的两个单元。

PCB效果图:

再说母板,负责ADC转换、按钮响应和USB手柄的模拟

  • 母版就简单多了,就一些引脚的引出。注意一下,MCU采用的是RP2040-Zero,因为这个板子支持4路ADC。官方的PICO开发板只支持3路ADC,最后一路给板子上的电源电压采集了。



PCB效果图:


问:为什么要分母板子板?
答:1. 可以放在一起,我懒;
       2. 模块化。每个子板负责2路输入,符合鼓、线的逻辑,4个鼓面我需要焊接2个子板即可
       3. JLC免费打样给5个板子!!!!


来说说制作过程吧,多图,流水
一如既往,感谢嘉立创给的免费打样优惠券。白嫖他家这么多年了,质量好没得说。在原材料全面涨价的当下,希望jlc能继续下去。
1. 母版焊接


2. 子板焊接。我这个图还是NE5532的,后面换成了MCP6002。晒一下我的新风扇,给pcb降温的


3. 固定在亚克力板上,我复用了年初制作的HitBox,需要在底板上开孔,放铜柱固定。
摆好位置先


先用3mm开孔,再用4mm扩孔


放好铜柱,用烙铁强势插入


4. 用螺丝固定pcb板,接好电源和adc线


5.给typec开孔,给鼓的入口开孔


6. 按钮接线


7. 简单组装测试按钮和两个彩灯的效果


8. 完成组装用鼓面测试一下



9.最后说说架子。我可能没太仔细拍照片,我采用了4根直径26mm的PPR管(蓝色管),长度是50CM*2和20CM*2。用4个90度弯头连接成一个长方形。固定在一个军鼓架子上了。就是最开头效果图1、2的样子。

说说软件
这次软件部分内容有些长,我就不复制过来了,使用了PlatformIO进行编译。编译环境对于新手来说相对友好。也提供了固件的直接下载。


对于switch来说对于手柄的要求很苛刻。我借鉴了GP2040-CE,使用了相同的手柄。
在太鼓大人中设置,下键、B键是红色(咚),左键、A键是蓝色(咔)。4路ADC对应的4个电鼓面也对应了这四个按钮。
软件中规定的两组阈值,可能需要根据实际情况来修改。

  1. # RP2040SwitchControl

  2. 这是一个面向 **RP2040 + PlatformIO + Earle Philhower Arduino core + TinyUSB HID** 的 Switch 控制器工程。

  3. ## 特性

  4. - 保留了原工程的 `SwitchControl` 报告结构
  5. - 走 **USB HID**,不使用 USB CDC 串口
  6. - `src/main.cpp` 中实现了 GPIO / ADC 输入汇总
  7. - ADC 采样放在 **core1**,USB / GPIO / LED 逻辑放在 **core0**
  8. - GPIO 做去抖;ADC 采用“阈值上升沿 + 短脉冲 + 冷却时间”触发
  9. - ADC 支持 900 暴击阈值,暴击时会触发组合键
  10. - GPIO0 输出 WS2812B 指示灯,按键触发后亮约 200ms 并渐隐

  11. ## PlatformIO 配置

  12. 默认环境是 `env:pico`,当前使用 Earle Philhower Arduino core:

  13. ```ini
  14. platform = https://github.com/maxgerhardt/platform-raspberrypi.git#651837d09a1a58c46bd1bcf4647468d8c5ed92c2
  15. board = pico
  16. framework = arduino
  17. board_build.core = earlephilhower
  18. ```

  19. 工程自己提供 TinyUSB HID 描述符并在代码中调用 `tusb_init()`,因此 `platformio.ini` 中使用 `-DNO_USB` 避免 Arduino core 自带 USB 描述符与本工程的 `tud_descriptor_*` 回调冲突。

  20. ## 编译

  21. ```bash
  22. pio run
  23. ```

  24. 烧录:

  25. ```bash
  26. pio run -t upload
  27. ```

  28. 构建产物会生成在 `.pio/build/pico/`,常用固件文件是 `firmware.uf2`。

  29. ## 按键映射

  30. ### GPIO1-GPIO15

  31. - GPIO1 -> ZR
  32. - GPIO2 -> R
  33. - GPIO3 -> B
  34. - GPIO4 -> A
  35. - GPIO5 -> Y
  36. - GPIO6 -> X
  37. - GPIO7 -> PLUS
  38. - GPIO8 -> HOME
  39. - GPIO9 -> MINUS
  40. - GPIO10 -> RIGHT
  41. - GPIO11 -> DOWN
  42. - GPIO12 -> UP
  43. - GPIO13 -> LEFT
  44. - GPIO14 -> L
  45. - GPIO15 -> ZL

  46. ### ADC 映射

  47. - GPIO26 / ADC1 -> B
  48. - GPIO27 / ADC2 -> A
  49. - GPIO28 / ADC3 -> DOWN
  50. - GPIO29 / ADC4 -> LEFT

  51. 普通触发阈值定义在 `src/main.cpp` 的 `kAdcThresholds[]` 中,当前默认值:

  52. ```cpp
  53. {600, 600, 600, 600}
  54. ```

  55. 暴击阈值定义在 `kAdcCriticalThresholds[]` 中,当前默认值:

  56. ```cpp
  57. {900, 900, 900, 900}
  58. ```

  59. ADC 触发采用固定短脉冲,当前按下保持时间为 30ms,同一通道冷却时间为 1ms。

  60. ### ADC 暴击组合键

  61. 当任意 ADC 通道采样达到 900 时,认为该次触发是“暴击”:

  62. - B 或 DOWN 其中一个暴击:同时按下 `B + DOWN`
  63. - A 或 LEFT 其中一个暴击:同时按下 `A + LEFT`

  64. 也就是说:

  65. - GPIO26 / ADC1 / B 暴击 -> `B + DOWN`
  66. - GPIO28 / ADC3 / DOWN 暴击 -> `B + DOWN`
  67. - GPIO27 / ADC2 / A 暴击 -> `A + LEFT`
  68. - GPIO29 / ADC4 / LEFT 暴击 -> `A + LEFT`

  69. ## WS2812B 指示灯

  70. GPIO0 驱动 2 颗 WS2812B:

  71. - 第 1 个 LED
  72.   - A / X -> 蓝色
  73.   - B / Y -> 红色
  74. - 第 2 个 LED
  75.   - UP / LEFT -> 蓝色
  76.   - DOWN / RIGHT -> 红色

  77. 每次对应按钮或 ADC 触发时,相关颜色会亮起约 200ms,并做渐慢熄灭。

  78. ## 说明

  79. - ADC 与 GPIO 的同名按键是 **OR** 关系,不冲突
  80. - ADC 普通触发和暴击触发分别记录上升沿状态,普通触发不会阻止暴击组合键触发
  81. - ADC 的普通键和暴击组合键在每轮 core1 采样后统一汇总,避免多个 ADC 通道互相清除状态
  82. - WS2812B 逻辑使用 PIO 驱动
复制代码



写在结尾
这个小项目前前后后大概1个月吧,硬件部分2周,软件部分2周,花了一些心思。
尤其是运放部分,是之前DIY没有遇到过的,也顺便帮我复习了一下运放的知识。想当年在大学的时候,我也是能做出来三角波、加法电路、乘法电路的。
以前写手柄程序都是用别人写好的,这次需要自己从USB枚举开始写,还要绕过switch严苛的设备清单机制,还是挺不容易的。
希望对大家有用,或者有帮助,希望版主给我加精。哈哈哈哈~~


欢迎大家留言讨论。我近期可能还会有一些小的大的分享给大家帮我成长。




最后给大家放一段视频




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2 小时前 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 2 小时前 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

发表于 半小时前 | 显示全部楼层
游客请登录后查看回复内容
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-7-22 13:34 , Processed in 0.187200 second(s), 8 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

快速回复 返回顶部 返回列表