起因

刷到不少"河流桌"的视频:整块木桌中间灌一条透明环氧树脂当"河",河里埋 LED,手从桌面上拂过,扫过的位置亮起来,离开后又慢慢暗下去,像水面荡开的涟漪。市面上的做法基本两类:成品桌天价;DIY 的多是单片机(Arduino/ESP32)+ WS2812 + 红外对管/触摸传感器,一套下来要写代码、要调传感器阈值、要烧录,对不想碰固件的朋友不友好。

我想做一个纯硬件、零代码、模块化的版本:把"手过去灯亮、手离开灯灭"这个交互拆到一块块圆形小电路板上,单板 BOM 压在 2 块钱以内,整张桌子的电子部分 60 元封顶。整套方案就三样东西:一个单键触摸芯片 + 3 个三极管(NPN+PNP)+ LED 矩阵

效果与整体架构

最终交互:手掌扫过桌面 → 被覆盖的圆板依次点亮(响应几十毫秒,跟手)→ 手离开后该板约 3 秒渐灭。板与板之间只有两根电源线,互不通信,天然形成"手到哪、哪亮"的跟随效果——这也是全硬件方案最妙的地方,不需要任何协调逻辑。

每块圆形 PCB 就是一个完整的最小单元,信号链:

1
2
3
4
5
6
7
环形感应盘 ──► TTP223(单键触摸芯片)──► Q1(NPN:开关 + 渐灭)
                          Q2(PNP) + Q3(NPN) 互补复合管(大电流高侧开关)
                                       LED × 8(本板照明)

为什么不用单片机

动手前先算账:

对比项 单片机方案(如 CH552/STM8) 本方案(全硬件)
主控 BOM ¥1.2+(还要触摸外设或 RC 自制触摸) TTP223 ¥0.2 + 三极管 ¥0.1
开发链路 焊 DFU/烧录器、写固件、调灵敏度算法、维护代码 零代码,通电即工作
待机功耗 低功耗模式+轮询,十几 µA 起 单板约 2µA
可靠性 看门狗、死机、静电后固件异常 无固件可死机
效果可玩性 渐变曲线/彩控随便改 渐灭时长由 RC 定,改效果要烙铁

结论很直白:要的是"亮/灭"这种一比特的交互,模拟方案完全够,而且每块板独立、坏一块换一块。MCU 的可编程优势等想上全彩流水时再动(文末有升级路线)。

触摸检测:单键触摸芯片 TTP223

TTP223(通泰 Tontek,SOT23-6 封装,几毛钱一颗),市面上最烂大街的单键电容触摸芯片,资料多、兼容替代也多。

工作原理一句话:芯片内部持续测量感应盘对地的等效电容,人体是个对大地几十到几百 pF 的导体,手靠近感应盘时相当于把人体电容并联上盘,电容增量超过阈值输出就翻转。上电后有约 0.5 秒的自校准(以当时的环境电容为零点,上电时手别压在板子上,否则基准被带偏);运行中长时间无触发也会周期性重新校准。

关键参数(手册口径):

参数 数值 与本方案的关系
VDD 2.0~5.5V 5V 供电直接用
待机电流 约 1.5µA@3V 整桌待机可忽略
输出 CMOS 电平,±1mA 级负载下保证摆幅 带不动 LED,后面三极管就是干这个的
响应时间 约 60~220ms(模式相关) 跟手足够
灵敏度 CS 引脚对地电容 0~50pF 调节,悬空(0pF)最灵敏 隔树脂+悬空感应的关键旋钮

输出模式(瞬动/自锁、高/低有效)在裸片上由封装绑定决定,市售蓝色小模块的跳线默认"瞬动+高有效"——手在输出高、手走输出低,正是本方案要的。自己画板买裸片时,下单认准默认配置的后缀即可。

接近感应(非接触触发)怎么调:手指接触式的用法在这里不够,要手掌悬空 1~3cm 就触发,两个手段:

  1. 感应盘做大——做成板边缘一整圈环形敷铜(约 3~4mm 宽),手掌覆盖面积大,电容增量就大;
  2. CS 悬空用最灵敏档——隔着 23mm 环氧树脂再悬空 13cm,手掌可靠触发。

灵敏度和误触发是一对矛盾,具体平衡见踩坑一节。

三极管放大电路:3 颗管子各干什么

为什么芯片输出不能直接带 LED

先算账:本板 8 颗白光 LED,15mA/颗,合计 120mA。TTP223 的输出是 CMOS 结构,手册里 VOH/VOL 都是按 ±1mA 级负载标的,直接挂 120mA 轻则输出电压塌掉灯不亮,重则烧片。差了两个数量级,必须做电流放大。

三管分工

  • Q1(NPN,S9013)——开关级 + 渐灭。基极挂一组 RC:手在时快速充满,手走后缓慢放电,让灯"渐灭"而不是"啪"地断电,这是河流桌"涟漪感"的灵魂。
  • Q2(PNP,S8550)+ Q3(NPN,S8050)——Sziklai 互补复合管。两管组合等效成一颗 β ≈ βQ2×βQ3(万级)的大 PNP,做高侧大电流开关。

为什么开关放在高侧(电源正端):这样 LED 的阴极全部直接落在整板 GND 平面上,灯的大电流回路不穿过感应盘下方,触摸检测的地参考干净——电容感应最怕地电位被功率回路扰动。

电路连接

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
TTP223.OUT ── R1(1k) ── D1(1N4148) ──┬──────────── Q1.B
                       正极朝C1      │
                                    ├── C1(4.7~10µF) ── GND
                                    └── R5(470k)     ── GND

Q1(NPN S9013):C ── R3(47k) ── Q2.B        E ── GND
Q2(PNP S8550):E ── VCC(+5V)   C ── Q3.B
Q3(NPN S8050):C ── VCC(+5V)   E ── LED 矩阵阳极
R4(100k):Q2.B ── VCC(关断上拉)

LED 支路 ×8 并联:Q3.E ── LED(白) ── R6(68Ω) ── GND

建议先在面包板上用 TO-92 直插管 + TTP223 小模块搭一块验证灵敏度,再画 PCB。

工作过程

:手靠近 → OUT 拉高 → 经 R1、D1 给 C1 快速充电(时间常数毫秒级,灯"立亮")→ Q1 饱和 → Q2 基极经 R3 被拉向地 → 复合管导通 → LED 点亮。

渐灭:手离开 → OUT 拉低 → D1 反偏截止,C1 的电荷退不回芯片 → 只能经 R5 和 Q1 基极缓慢泄放 → 基极电流维持 Q1 继续导通几秒 → LED 渐暗至熄灭。渐灭时长由 R5×C1 时间常数主导:4.7µF 约 3 秒,10µF 约 6 秒,想再长优先加大 C1。

OUT C1 Q1 Q2/Q3 LED
靠近 快充至约 4.2V 饱和 导通
刚离开 缓慢放电 维持导通 导通 渐暗
离开数秒后 <0.7V 截止 截止

元件取值与验算

按 β≈100 的保守口径过一遍:

  • R3(47k):Q1 饱和后,Q2 基极电流 IB2 = (5 − 0.7 − 0.2) / 47k ≈ 89µA。负载 120mA 需要的复合管基流约 120mA / (βQ2×βQ3) ≈ 10µA,余量近 9 倍。
  • R4(100k):Q1 截止时把 Q2 基极钳在 VCC,防止管子漏电或温漂导致半亮。上电瞬间 LED 闪一下亮,九成是忘了这颗上拉。
  • 不追求深饱和:LED 电流由限流电阻决定,复合管工作在放大区即可。高侧输出节点约 4.1V(掉了 Q2 饱和压降 + Q3 的 VBE),已计入限流电阻计算。
  • R6(68Ω):白光 Vf≈3.1V,R6 = (4.1 − 3.1) / 15mA ≈ 68Ω。换蓝光/红光按各自 Vf 重算。
  • Q3 功耗:(5 − 4.1)V × 120mA ≈ 0.11W,SOT-23 封装无压力。
  • Q1 电流:IC1 = IB2 + IR4 ≈ 89µA + 48µA ≈ 137µA,C1 放电时基极只抽约 1.4µA,这就是渐灭能拖几秒的物理基础。

圆形 PCB 与 LED 矩阵

板级布局要点

  • 圆板直径建议 Φ35~45mm,8 颗 5730 暖白 LED 沿圆心区域一圈均匀分布,出光在树脂里混得开。
  • 环形感应盘沿板边一整圈(宽 3~4mm),这是手掌"隔空触发"的感应面积来源。
  • 感应盘正下方和 PCB 背面投影区挖空:不铺铜、不走线。盘下方叠着地平面会显著增大对地电容、吃掉灵敏度。
  • TTP223 的 IN 走线短而细,远离 LED 电流回路;CS 电容紧贴引脚(如果 CS 悬空,焊盘留着,调灵敏度时随时补)。
  • GND 大平面兜底,LED 电流沿外圈回流,不穿板中心。

组网

  • 板与板之间只有 VCC/GND 两线,0.51mm² 硅胶线链形或星形都行,板间距 35mm。
  • 每板独立一套"触摸+放大+LED",手覆盖哪块哪块亮,相邻板靠手掌的自然覆盖衔接成"涟漪"。
  • 想要"越靠近亮得越多"的层次感,可以把相邻两板的感应盘用一颗小电容(1~10nF)弱耦合,做涟漪扩散的模拟味道——进阶玩法,先跑通基础的再说。

灌树脂

  • 透明环氧(水晶滴胶/E-44 体系)2~3mm 厚度内,调好 CS 后感应距离衰减可以接受;固化前先把整板架起来实测一遍触发距离。
  • 不要用金属闪粉类填料(导电+改变介电常数,灵敏度直接乱掉),云母粉、干花这类绝缘填料没事。
  • 树脂固化放热峰值不高,0805/5730/三极管都耐得住,但 TTP223 的自校准要在树脂固化后、最终环境温度下再确认一遍灵敏度。

电源与功耗预算

状态 单板 24 板矩阵
待机(手不在) ≈2µA ≈50µA
单板点亮 ≈120mA
全亮(仅调试时) ≈2.9A
  • 电源选 5V/3A:日常交互同时亮的就 1~3 块板,实际不到 0.5A;3A 余量留给全亮调试。
  • 每板入口 100nF + 47µF 去耦,长电源线的电感尖峰是误触发的重要来源。
  • 待机电流微安级,理论上加颗锂电池+升压也能玩便携版,但桌面场景 5V 适配器最省心。

踩坑记录与注意事项

  1. 灵敏度过头会自激:感应盘大 + CS 悬空 + 相邻板靠太近,会出现没人碰自己亮/闪烁。逐板加 CS(几 pF 起加)压灵敏度,板间距拉开到一个板径以上。
  2. 上电 0.5 秒校准期手别压板:否则基准电容被计入人体,要么常亮要么再也不亮。做成整机后断电重启一次就好。
  3. 湿度温漂:梅雨天/夏天高湿,误触发变多是正常物理现象,CS 留出上调余量,按最湿季节调定。
  4. 上电瞬间 LED 闪亮:R4(Q2 基极对 VCC 上拉)没焊或虚焊,第一时间查它。
  5. 长电源线耦合误触发:电源线别和感应盘平行走线,去耦电容别省。
  6. 人体接地差异:穿鞋踩地板、干燥天气,人体对地电容变小,感应距离会变近,属正常,按"最不利姿势"验收。
  7. 渐灭想拉长:优先加大 C1(10µF→22µF),别把 R5 加到 1MΩ 以上——阻值太大后漏电流和干扰占主导,时间失控。
  8. CS 别一上来就贴死 50pF:那样只剩接触式灵敏度,“手过去就亮"就没意义了。从悬空开始,逐步加。

成本核算

淘宝/立创量级,仅供参考(按 100 片批量):

物料 用量 单价 小计
TTP223 1 ¥0.2~0.35 ¥0.3
S9013/S8050/S8550 3 ¥0.02~0.03 ¥0.08
1N4148 1 ¥0.01 ¥0.01
阻容(含去耦) 约 10 ¥0.1
5730 暖白 LED 8 ¥0.04 ¥0.32
Φ40 圆板 PCB 1 ¥0.6~1 ¥0.8
单板合计 ≈¥1.6

24 板矩阵控制部分约 ¥38,加 5V/3A 电源和线材,整套电子成本 60 元内。对比 MCU 方案省下的不只是钱,还有固件调试时间和"这块板程序为什么跑飞"的深夜。

可扩展方向

  • TTP224(四键版):单板四个象限独立感应,能做方向判断(手从左往右扫,板按象限顺序亮),涟漪更有方向感。
  • 光敏联动:一颗光敏电阻+1 个三极管串在 Q2 基极回路里,白天自动锁存不亮。
  • 恒流升级:把 R6 换成两管恒流或线性恒流芯,LED 亮度不受电源波动影响,适合电源线拉得长的桌子。
  • 全彩终极形态:WS2812 + ESP32,涟漪扩散算法、彩虹流水、蓝牙配网随便玩——这是另一篇文章的事了。

参考链接