钢琴机器人装配指南

PPP · Piano Playing Project

88 键钢琴机器人
从一堆零件,到弹出第一个音

不用先懂电路。跟着下面的 3D 图一步一步来:先搭架子、装推杆,再把每一根线接到该去的地方。哪个零件不认识,直接点它。

88 个推杆88 个 MOS 管6 块 PCA96851 块 ESP322 台 24V 电源
拖动旋转 · 滚轮缩放 · 右键拖动平移 · 点零件看说明

一路电路,搞懂就全懂了

整台机器有 88 路,每一路长得一模一样。把下面这张图看明白,剩下 87 路就是照着再焊一遍。

24V+ 一直有电 GND 地 推杆线圈 JF-1039B 二极管 有色环那头朝上 MOS 管 现在:导通 现在:断开 D S G PCA9685 黄针 10kΩ G = 3.3 V G = 0 V 推杆两端 24 V 推杆两端 ≈ 0 V D 点 ≈ 0 V D 点 ≈ 24.7 V D 点冲到几百伏 IRLZ44N 只能扛 55 V
橙色是 24V+,粉色是推杆下端到 MOS 管 D 脚这一段,灰色是地,黄色是 PWM 信号。圆点的流动方向就是电流方向。
阀门

MOS 管

一个电子开关。G 脚给 3.3V 就通,给 0V 就断。它不给推杆供电,推杆的电全部来自 24V 电源,它只管“放不放行”。就像水塔 → 水车 → 出水口的阀门,阀门装在最后面,照样管得住整条水管。

泄压口

二极管

线圈有个脾气:电流不肯一下子停。开关一断,它会把电压顶得老高。二极管给这股电流留了一条回家的路,让它转几圈自己消掉。

保险

10kΩ 电阻

刚开机、ESP32 重启、舵机线松了的时候,G 脚没人管,会乱飘。这个电阻把它轻轻拉到 0V,保证“没人说话就是关”。

G 脚(黄线)MOS 管D 点电压推杆两端推杆
3.3 V导通≈ 0 V24 V通电,往下戳
0 V断开≈ 24 V0 V弹簧把它弹回去
100% 35% 0% 占空比(开的时间占多少) 重弹 100% 轻弹 60% 保持 30%~40% 按得住就行,省电、不发烫 击键 20~50 毫秒 松开,归零 时间 →
每个音符分两段:先猛击一下,再降功率按住。击键那一段的占空比越高,弹得越响。
PWM

力度是怎么控制的

MOS 管只会“全开”和“全关”,不会开一半。想让推杆轻一点,就让它开一下、关一下,飞快地来回切(比如每秒 1000 次)。开的时间占 30%,效果大约等于给推杆 7V。

两段

为什么要先猛后轻

把琴键打下去需要大力气,但按住不动只要一点点力。一直用 100% 按着,推杆很快就烫手。所以打下去之后马上降到 30%~40%。

提醒

推杆收到的不是 7V

它收到的是一串 24V 的脉冲。只是线圈反应慢,把脉冲“抹平”成了平均值。万用表量出来可能是个奇怪的数,这是正常的。

采购清单

淘宝都能买到。买一样勾一样,勾选会记在这台电脑的浏览器里。搜的时候直接搜型号,别只搜“MOS 管”“电源”这种大词。

设计文档里的零件

这种装法还要用到的小件

文档里没列

工具

文档里没列

PCA9685 地址表

6 块板挂在同一条 I²C 线上,靠“地址”区分谁是谁。地址是用焊锡把板子右上角的小焊盘连起来设定的:连上算 1,不连算 0。

板子要焊的焊盘A0 A1 A2 A3 A4 A5地址管哪些键用哪几个输出
1 号都不焊0x401 – 160 – 15
2 号A00x4117 – 320 – 15
3 号A10x4233 – 480 – 15
4 号A0 + A10x4349 – 640 – 15
5 号A20x4465 – 800 – 15
6 号A0 + A20x4581 – 880 – 7(后 8 个空着)
算键号

第 N 个键在哪块板、哪个输出

板号 = (N − 1) ÷ 16 取整,再加 1。输出号 = (N − 1) ÷ 16 的余数。比如第 40 键(中央 C):39 ÷ 16 = 2 余 7,所以在 3 号板的第 7 个输出。

电源分区

哪台电源管哪些键

1、2、3 号驱动板(1~48 键)接电源 A,4、5、6 号驱动板(49~88 键)接电源 B。文档原来写的是 1–44 / 45–88,这里用的是文档备注里那个更省事的分法:每块驱动板只接一条母线。

以实物为准

焊盘位置看板上印的字

不同厂家的板子,A0~A5 的位置可能不一样。找到印着 A0、A1、A2 的小焊盘,每个是两个挨着的小方块,用焊锡把这两个小方块连起来就算“焊上了”。

验证

焊完一定要扫描

接好 I²C 后烧一个“I²C 扫描”程序。应该扫到 0x40 到 0x45 六个地址。另外多出来一个 0x70 是正常的,那是 PCA9685 的公共地址。

上电前检查

插电之前一条一条过。前面几条接错了会直接冒烟,值得多看两遍。

通电前,逐条确认

第一次通电的顺序

一级一级来
  1. 只开电源,板子都不管量红、黑母线之间是不是 24V。不是就拧电源上的 V-ADJ 小旋钮。
  2. 调降压模块ESP32 先不接。量降压模块输出,拧到 5.0V。然后断电。
  3. 接上 ESP32,扫描 I²C应该看到 0x40 到 0x45 六个地址(外加一个 0x70)。
  4. 只测 1 个键程序开头先把所有输出清零。然后让 1 个键动:100% 打 20~50 毫秒,再降到 30%~40% 按住,最后归零。
  5. 摸一摸这一路的 MOS 管和推杆不烫,再测下一路。
  6. 一块板 16 路都过了,再测下一块出了问题好找,知道是哪块板。
  7. 最后才上 MIDI 弹曲子手一直放在急停旁边。闻到焦味、看到冒烟,先拍急停再找原因。

出问题了怎么办

按“最常见的原因排最前面”写的。动手查之前先断电。

某个推杆完全不动
  1. 量这一路端子的 24V+ 孔对地有没有 24V。没有就往回查:驱动板进电线、母线、保险丝。
  2. 有 24V:让程序一直输出 100%,量 MOS 管 G 脚对地。应该有 3.3V 左右。没有就查舵机线有没有插反、插紧,通道号、地址对不对。
  3. G 脚有电压但还是不动:多半是 MOS 管三个脚焊错了位置,或者买到的不是逻辑电平的管子。
  4. 最后查推杆本身:断电,量它两根线之间的电阻,应该有几十欧(大约 30~60Ω)。
一通电,推杆就自己吸住不放
  1. 拔掉这一路的舵机线。还是吸着:MOS 管已经被打穿了(D 和 S 之间短路),换一个,顺便检查二极管装了没有、方向对不对。
  2. 拔掉就松开了:程序开头没有把输出清零,或者 PCA9685 还没初始化。
  3. 时吸时不吸:10kΩ 电阻没焊好,G 脚在飘。
MOS 管烫手
  1. 看型号。IRLZ44N 和 IRFZ44N 只差一个字母,后者 3.3V 打不开,只会半开着发热。IRF540 也一样不行。
  2. 保持阶段的占空比太高。降到 30%~40%。
  3. 正常情况下,这个电流 MOS 管应该是几乎不热的。
保险丝一通电就烧
  1. 最常见:有二极管接反了。接反的二极管会让 24V 经过 MOS 管直接短路。
  2. 其次:电容接反,或者哪里的 24V+ 和地碰到了一起。
  3. 查法:把 6 块驱动板的进电线全拔掉,换上新保险丝,一块一块接回去,接到哪块烧就是哪块的问题。

不要换个大一号的保险丝硬顶。

电容鼓包、发烫

极性接反了。马上断电,换新的。长脚接 24V+,外壳有白条的那一边接地。耐压要 35V,25V 的太悬。

推杆本身很烫
  1. 一直 100% 通电。这种推杆只能短时间满功率工作。
  2. 保持占空比再调低一点,能按住琴键就够。
  3. 在程序里给每个音加个“最长按住时间”,防止某个音卡住一直通电。
ESP32 动不动就重启
  1. 多个推杆同时动的一瞬间,24V 被拉低,5V 跟着掉。检查 2200µF 和 100µF 电容装了没有。
  2. 有的路漏装了二极管,断电尖峰在干扰它。
  3. 地线没接好。两台电源的 V−、降压模块、ESP32、PCA9685 的地必须全部连在一起。
I²C 扫描,一个地址都扫不到
  1. SDA 和 SCL 接反了。GPIO21 接 SDA,GPIO22 接 SCL。
  2. VCC 没接 3.3V,或者 GND 没接。
  3. 杜邦线松了。这种线很容易接触不良,换一根试试。
  4. 先只接 1 块 PCA9685,扫到了再一块一块往后加。
扫到的地址少了几个
  1. 有两块板焊成了同一个地址。
  2. 焊盘虚焊,看着连上了其实没连上。
  3. 链条在中间断了。从扫不到的那块往前查它左侧的 4 根线。
有的键声音小,有的键按不到底
  1. 推杆高度没调好。琴键到底的时候,推杆应该也快吸到底。
  2. 推杆头没对准琴键中间,蹭到了旁边的键。
  3. 每个推杆、每个键本来就有差别。这正是后面“自动校准”要解决的事。
弹的时候哒哒响,很吵
  1. 推杆头没贴毛毡或硅胶垫。
  2. 推杆弹回去的时候撞到自己的外壳。在回弹的位置也垫一小片软垫。
  3. 架子和钢琴硬碰硬。脚底垫橡胶。
弹和弦的时候架子会跳

推杆往下戳,架子就被往上顶。同时按的键多了,这个力会超过架子自己的重量。用夹子或绑带把架子固定在琴上(垫软布,别伤琴),或者加配重。

小词典

这页里出现过的术语,用大白话再说一遍。

PWM脉宽调制
飞快地开、关、开、关。开的时间占得越多,平均力气越大。
占空比
一个来回里,“开”的时间占百分之几。100% 就是一直开,0% 就是一直关。
I²C
只用两根信号线(SDA、SCL)就能连很多设备的通信方式。每个设备有自己的地址。它不是 USB。
MOS 管MOSFET
电子开关。三个脚:G 是控制脚,D 和 S 是开关的两头。
逻辑电平 MOS 管
3.3V 就能完全打开的 MOS 管,比如 IRLZ44N、AO3400。普通的要 10V 才能开。
低边开关
把开关装在负载(推杆)和地之间。好处是 3.3V 能直接控制;代价是推杆正极一直带电。
续流二极管
并在线圈两端的二极管。专门接住断电瞬间的那股电流,保护 MOS 管。
下拉电阻
把一个脚轻轻拉到 0V 的电阻。没人驱动这个脚的时候,它就老老实实是 0V。
母线
两排接线端子。电源一根粗线进来,分出很多根线到各块板。红的是 24V+,黑的是地。
共地
所有负极连在一起:两台电源的 V−、降压模块、ESP32、PCA9685、所有 MOS 管的 S 脚、所有电容负极。
驱动板
自己焊的洞洞板。一块 16 路,每路是 MOS 管 + 二极管 + 10kΩ 电阻。
电解电容
就近的“小水池”。瞬间要大电流时先由它顶上。有正负极,接反会炸。
降压模块
把 24V 变成 5V 的小板子,给 ESP32 供电。输出电压要自己拧螺丝调。
舵机延长线
三根线并在一起、两头带插头的现成线。这里用它把 PCA9685 的输出接到驱动板。
冷压端子
压在线头上的小金属套。拧进螺丝端子更牢靠,铜丝不会散开。
急停
红色蘑菇头按钮。一拍下去整台机器断电。
保险丝
电流太大时自己烧断的一小段细丝。它断了,电源和电线就保住了。
通断档
万用表上带小喇叭符号的那一档。两根表笔之间是通的,它就响。

装完以后

线接完只是一半。下面这几件事在你的设计文档里都列了,这里只写个大概。

写程序

驱动库用 Adafruit PWM Servo Driver,I²C 速度设 100kHz。

  • 第一步:I²C 扫描,确认 6 个地址
  • 第二步:单键测试
  • 第三步:蓝牙 BLE-MIDI,手机或电脑直接发音符过来
  • 也可以加 TF 卡模块,直接放 .mid 文件

力度能到多响

按文档的估算,24V 下大概能稳定弹到“强”(f),最响的“很强”(ff)有点勉强,相当于 MIDI 力度 90~110。

  • 这只是估算,要实测
  • 测法:一个推杆满压打琴键,用手机分贝计量,和你自己用力弹同一个键比

自动校准

每个键的推杆、高度、琴键轻重都不一样。校准就是挨个试:不同的占空比和击键时长,打出来多响、慢了多少,记成每个键自己的一张表。

  • 你提到过有一张算法设想图,做这一步时需要它

踏板

踏板不建议用这种推杆:要的力气大,要长时间踩住,还要能踩一半。

  • 右踏板(延音):步进电机 + 丝杆 + TMC2209,安静,踩住不耗电
  • 左踏板(柔音):大扭矩舵机或大电磁铁
  • 中间踏板:先不做