Hacker News 中文摘要

RSS订阅

Phyllotaxis:随音频律动的 LED 显示装置 -- Phyllotaxis: An audio-reactive LED display

作者一直着迷于用代码理解自然界中的图案,与宇宙中固有的涌现模式交流。叶序(Phyllotaxis)就是其中一种,即向日葵、多肉等植物中心那种向外扩张的双螺旋形状。它的代码出奇简单:在圆的半径线上取若干线性点,让每个点按黄金比例 1.6180339887 的递增倍数旋转,便能得到一片酷似向日葵的点云。

正文

叶序 LED 雕塑

我一直着迷于用代码去理解自然中出现的图案,与宇宙里固有的涌现模式对话。

叶序就是其中一种——向日葵花心、多肉植物和其他植物中心出现的扩展双螺旋形状。它的代码简单得出奇:取圆周半径线上的若干线性点,把每一个按黄金比例的递增倍数旋转,就得到一片点云,看起来已经很像向日葵。对它做 Voronoi 剖分也很有意思,形状像种荚。

把点画出来,形状就浮现了

Voronoi 剖分结果

玩了一阵之后我有了个想法:如果把它做成实体,每个单元里放一颗可寻址 RGB LED 会怎样?一种细胞式的 LED 矩阵。高中时我做过一块矩形 neopixel 矩阵,但一直在等一个更有意思的形状来做下一块。

从数字到实体

我从 Processing sketch 里导出单元边缘数据,用 CadQuery 库导入 Python 脚本,写代码从数据构建实体几何:先构造所有合并 Voronoi 单元的总实体,再从中减去每个单元收缩后的体积,形成带壁的壳,然后在每个单元中心挖出 LED 大小的孔。对所有单元做完,就得到下面这个黄色形状。这一步我还把几何分成四个大致相等的象限,每个都能放进我的 3D 打印机。

导出 STEP 文件后,我在 FreeCAD 里做后处理,加螺丝孔,又做了一个薄版本作为“面板”,下面垫纸。我把纸裁好粘在薄版本底部,再用螺丝孔把它拧到单元壁上。

四个象限各自的 CadQuery 模型

面板模型,在 FreeCAD 里从 CadQuery 输出改造而来

我 3D 打印了这些形状,找到一种半透明纸,漫射光效果很好,透光时看起来有机又好玩。我很喜欢这种桑皮纸的样子,有机纤维非常美。

往板上装纸

焊接 89 颗 LED 有点繁琐,但我进入了心流,反而变得放松。我把它接到手边一块闲置的 STM32 blackpill 板上,用 SPI 写了个小小的 neopixel 驱动。跑几个基础测试图案就已经很酷了。

视频:螺旋图案

我搭了个简单的 sketch 框架,可以给 LED 写 Processing 风格的“着色器”代码。用一张查找表记录每颗 LED 在单位圆上的浮点位置,就能轻松写出类似片元着色器的代码——比如把极坐标的角度和半径组合成正弦螺旋来调制亮度。

很快我发现了自己最喜欢的径向图案:一道脉动的正弦波从中心向外调制亮度。它后来成了音频反应 sketch 的主打效果。

视频:径向图案

加入音频

如果它能动态响应房间里的声音,而不只是播放预设图案,会不会更酷?我想让它显得有生命、有动态。

驱动它的 STM32 支持浮点和 ARM DSP 指令,可以跑傅里叶变换做音频分析。我在面包板电路上加了一颗数字 I2S 麦克风 INMP441。它输出数字信号,接线容易,没有模拟噪声的风险。ARM CMSIS 库在信号处理和分析上帮了大忙。加上自动增益控制和多频段分离来观察不同频率的能量,我就有了不错的基础,去写能动态响应音频的代码。

大量调参,加上一份满是全局计时器和混乱状态的 sketch,最终做出了这个音频反应程序,至今仍是板子上运行的基础。它在听 Jon Hopkins 的《Neon Pattern Drum》时活了过来。

带 I2S 麦克风的面包板电路

视频:Neon

收拾收尾

只剩几个细节。它需要一个更结实的安装面。我找了块竹砧板,铣成圆形;天然竹木纹和有机的纸非常搭。

组装好的竹背板,雕塑挂在我墙上

我把控制 MCU 和麦克风装在一块洞洞板上,塞进一个 3D 打印盒子,上面装了吉他踏板开关。但电子部分很简陋,容易有噪声,盒子一动 LED 就闪。我决定学做 PCB,换成正规电路板,装上 blackpill、麦克风和按钮,还留了合适的位置放逻辑电平转换器,让单片机输出干净的 5V 信号。效果不错,做 PCB 比我预想的容易,至少这个复杂度是这样。

最初的外壳,里面藏着很乱的洞洞板

我设计的空白 PCB,还没焊上元件

做第二版

我在迎接 2026 年的跨年派对上展示了它,大家似乎很喜欢,有朋友甚至说想要一个。我受到启发做第二版,希望更容易组装、也更结实。因为刚学会 PCB 设计,我决定把安装 LED 的底板从 3D 打印板换成 PCB。我调整了形状,加入五重对称——PCB 按 5 片起订,与其 3D 打印四块各不相同的部件,不如订五块相同的 PCB,拼成一个环。

第二版,五块径向拼接的 PCB

结果用烙铁手焊 neopixel LED 更是噩梦,因为单颗 neopixel 的焊盘在元件下方,本来就得靠加热整块 PCB 而不是烙铁来焊。项目搁置了一阵。

2026 年夏天我去 Recurse Center 参加编程静修,把项目零件带上了。在那儿认识的一位朋友比我擅长热风焊台得多。我们把所有焊接做完,我设计并 3D 打印了新的单元壁,卡到 PCB 上再拧在一起。

焊了几个小时之后,PCB 上的灯终于亮了

在 Recurse 期间完成新版后,我决定把它留在 Recurse Center 做装置。我换用 ESP32,接入那里的 wifi,并用 Rust 重写了固件。控制器跑一个本地网站,RC 的人可以用一个小型 webassembly 后端和极简 API把 sketch 和游戏上传上去。

视频:RC 装置

下一步?

我对这个项目还没有完全满意。

足够多的人表达过喜爱,我很想能多做几台,至少送给朋友,有条件的话再面向更广的范围出售。但过程并不理想:两次焊接都因为不同的原因很繁琐;贴纸的过程很棘手,纸本身也脆弱,破了很难修。我有些值得试验的改进想法:换更容易手工焊接的其他类型 LED、用 PCB 组装、试试加一层透明亚克力保护纸、用磁铁固定纸面板……未来有太多东西要试。

眼下这个项目该休息一下了,等时机合适,就上第三版。

评论

社区对该声音驱动LED装置的巧思与视觉效果普遍称赞,少数人会联想到已有产品或质疑其生物学命名。

认为作品创意与工艺值得赞叹

  • 较多人表达喜爱,称其拼板结构巧妙、声光图案迷人或者感谢分享制作过程(较多人) > 声音驱动叶序图案的效果实在让人着迷(@miles_io)

认为与在售产品相似可能是趋同进化

  • 少数人指出和商业灯具Lumanoi外观高度雷同,调侃为独立开发的殊途同归(少数人) > 和Voria Labs的Lumanoi惊人地相似,或许算是趋同进化?(@lukeify)

认为“叶序”一词用在LED上名不副实

  • 个别人从词源反驳,强调该词特指植物捕光排列,LED并无此特性(少数人) > 该词源意为绿色,这些LED并未体现生物特性,名称其实是错的(@shevy-java)

建议将LED焊接外包给工厂

  • 少数人从实操建议,简单物料交给PCB厂贴片省钱省时且降低损坏(少数人) > 简单物料单让工厂组装花费极少却省大量时间,还能减少静电或过热损伤(@XRG)

有价值的补充

  • 手焊经验:贴片焊盘稍加大便吸锡;5050灯易手焊,QFN可用底部大过孔接中央焊盘(@throwaway219450)
  • 有用户自制的256灯类似装置,显示此类项目有社区基础(@turbine401)