为了听歌,他从零学了PCB、3D打印和C语言

为了听歌,他从零学了PCB、3D打印和C语言

makermusicpcb3d-printinghardwarediy

数据源:HN + web research · HN

为了听歌,他从零学了PCB、3D打印和C语言

“我一直很喜欢看到和触摸我买过的 CD 和 LP 的封面艺术,但最终数字流媒体的便利性胜出了——我接受了没有封面艺术(或者邮票大小的封面)。最近我越来越怀念这种感觉,最终决定为此做点什么。所以我造了一台流媒体播放器。”

—— Marton,Pentaton LP 的创造者

这是一位软件开发者写下的心声。他不是电子工程师,不是硬件极客,也不是工业设计师。他只是一个想念实体唱片封面的人。而这句话的下一句,把他引向了一条绝大多数软件开发者都不会踏上的路:他决定自己造一台硬件。

不是为了创业,不是为了变现,不是为了发论文——仅仅是因为他想在看到一首歌的时候,能看到它的专辑封面,像过去拿起一张黑胶唱片那样。

结果他花了几个月时间,从零学会了 PCB 设计、3D 建模与打印、嵌入式 Linux 内核编译和 GPU 加速编程。电路板改了 4 版。外壳打印了一次又一次,最初的全是废品。最后,一台看起来像黑胶唱片套、挂在墙上的音乐流媒体播放器——Pentaton LP——诞生了。

这个故事在 Hacker News 上获得了 166 个赞和 35 条讨论,但数字远不能说明它的动人之处。这本质上是一个关于”在乎”的故事。

核心冲突:他想要一个不存在的产品

Marton 的需求听起来很简单:一台挂在墙上的音乐流媒体播放器,屏幕大概 12 英寸见方(黑胶唱片套的尺寸),能显示专辑封面,通过 AirPlay 播放流媒体——此外什么都不做。

但他很快发现,这个东西不存在。市面上支持 AirPlay 的流媒体接收器几乎都没有像样的屏幕;有屏幕的智能相框又基本不支持流媒体音频协议。两者结合的产品?没人做。市场太小了。 愿意为”能看到专辑封面”这个需求花几百美元的人,恐怕凑不够一条生产线的最低起订量。

所以 Marton 面临一个选择:要么接受现实,继续在手机上用邮票大小的封面听歌;要么——自己动手。他选了后者。

学习曲线第一站:PCB 设计

Marton 的第一个挑战是找到合适的硬件平台。他需要一台能驱动高分辨率显示屏、支持 AirPlay 协议、体积小、功耗低的计算机。最终他找到了 Radxa CM3——一个计算模块形态的单板计算机,具备嵌入式 DisplayPort 接口,可以直接驱动屏幕。

但 Radxa CM3 需要一块载板来提供电源、USB、网络等接口。市面上的载板都不满足他对厚度的要求——他想让整台设备像一张黑胶唱片套那样贴在墙上。所以他决定自己设计一块。 “我之前从没做过这个,“他写道,“所以有很多东西要学,从基础电子学和磁学到高速信号布线。”

一个软件开发者,从头学习 PCB 设计,处理高速差分信号、电源完整性、电磁兼容性这些嵌入式工程师都觉得头疼的东西。一块载板要承载计算模块、供电电路、USB-C 接口、千兆以太网口、音频触发接口,还要把厚度控制在最低。

结果?四版修订才达到正常工作状态。 每一版都是一次完整的制板周期:设计、布局、打样、焊接、测试、发现错误、回到设计软件。但 Marton 只是轻描淡写:“花了我四版修订才让所有东西正常工作了。“

学习曲线第二站:3D 打印与曲面建模

电路板搞定之后,外壳又是一个全新的挑战。

Marton 想要一个表面光滑、有曲线美感的外壳。他选择了 FreeCAD 做参数化建模,但发现参数化 CAD 和光滑曲面配合得并不好。他的解决方案也非常”软件开发者”:他写了一个自定义 FreeCAD 宏,来生成想要的曲面形状。

外壳设计出来后,他买了一台全新的 3D 打印机来制造——然后遭遇了一场”灾难”。“为制造而设计,尤其是为 3D 打印而设计,需要很多经验。“他说得很克制。每一个刚入坑 3D 打印的人都经历过翘曲、拉丝、层间分离的崩溃,区别在于大多数人打印的是小玩具,而他打印的是一台打算挂在墙上的音乐播放器外壳。

他又花了时间学习设计规则:壁厚、支撑角度、热收缩补偿。最初的一批外壳全废了,但他最终拿到了一个满意的成品。

学习曲线第三站:嵌入式 Linux 与 GPU 编程

硬件成型后,轮到软件了。作为软件开发者,这部分按理说是 Marton 的舒适区。但嵌入式 Linux 开发远不是写写应用代码那么简单。

他选择了 Alpine Linux——一个极轻量的发行版——在单板计算机上跑它需要大量的底层配置:引导加载程序、设备树、内核编译(配置驱动、启用 GPU 支持)、显示屏背光控制(PWM)、电源管理(待机功耗低于 2 瓦)、以及让 shairport-sync(AirPlay 的开源实现)在这个精简系统上跑起来。每一项都意味着查阅大量文档、调试内核恐慌、面对黑漆漆的串口启动日志。

然后是最精彩的部分:显示专辑封面。

“事实证明,在两块 400 万像素的图片之间以每秒 60 帧做淡入淡出,在一块性能中等的单板计算机上并不容易。“17 英寸的屏幕分辨率 1920×1920,纯推送像素就需要大约 620 MB/s 的内存带宽,还不算任何图像解码和过渡效果的计算量。

Marton 的解决方案是 GPU 加速。他在 Alpine Linux 上配置了 GPU 驱动,编写了利用硬件渲染的应用,实现了流畅的封面切换。一个软件开发者,为了一个”显示专辑封面”的功能,学会了嵌入式 GPU 编程。

更有趣的是,AirPlay 协议本身只传输大约 500×500 像素的低分辨率封面。所以他又在音乐播放器客户端里做了一个带外协议扩展,让全分辨率封面能够通过另一条通道发送并显示。他甚至改造了协议本身。

成品:Pentaton LP

经过这一切之后,Pentaton LP 诞生了。核心参数:

  • 17 英寸 IPS LCD 显示屏,1920×1920 分辨率,1:1 像素映射
  • 基于 Radxa CM3 计算模块,搭载自制载板
  • 运行 Alpine Linux,shairport-sync 接收 AirPlay 音频流
  • 待机功耗低于 2 瓦,流媒体播放时约 24 瓦
  • USB-C PD 供电,12V 触发信号自动开关放大器
  • 支持外接 DAC(他使用 FiiO KA17 连接 Pro-Ject Amp Box SE)

设备始终在线。屏幕关闭时功耗不到 2 瓦。当检测到音乐流时自动唤醒,打开屏幕并通过 12V 信号启动放大器。整个体验就像墙上挂了一张会发声的专辑封面。

为什么这个故事值得被你读到

我们生活在一个想要什么几乎都能买到的时代。消费的便利性让我们忘记了「制造」这件事本身的价值。 Marton 的故事之所以动人,恰恰因为它反衬出这个时代的稀缺品——在乎

他在乎的不是技术本身。他在乎的是打开音乐播放器时看到的那张封面。这个在流媒体时代几乎被抛弃的东西——大多数人看都不看就点进播放列表——对他来说值得花几个月时间,学四门完全陌生的技能,烧掉几块电路板和数不清的打印耗材。

Hacker News 上有一条评论说得很好:

“这让我想起以前买 CD 和黑胶的时候,拿着封面翻来覆去地看,读内页的文字,看着歌词。流媒体确实方便,但我们失去了一些东西。”

Marton 用行动回答了这个问题:失去的东西,如果没人愿意给你做,你就自己做。

这不是一个关于”技术如何改变世界”的故事。这是一个关于”一个人如何因为在乎一件小事而改变了自己”的故事。他也许不会改变音乐产业的走向,Pentaton LP 可能也不会成为商业上的巨大成功。但他花了几个月时间,从零学了一堆东西,造出了一台让自己满意的设备——这件事本身就足够美好。

尾声

Marton 正在考虑发起 Kickstarter 众筹。感兴趣的读者可以访问 pentaton.app 了解详情。

但不管这台设备最终会不会量产,笔者脑海中一直留着一个画面:一个软件开发者,在深夜的灯光下,对着一块刚刚焊接好的电路板,插上电源,看看第五版的设计是不是终于能正常工作了。他想做的不是改变世界,他只是想在听歌的时候,看到那张封面。

参考链接:

  • Pentaton LP 发布文章 (pentaton.app)
  • HN 讨论 (item?id=49022355)
  • Radxa CM3 单板计算机
  • shairport-sync AirPlay 实现

Pentaton LP 的 PCB 载板设计 图:Marton 自制的 Radxa CM3 载板 PCB,前后共修订了 4 版才达到正常工作状态。

Pentaton LP 成品背面 图:Pentaton LP 成品背面,USB-C 供电、千兆以太网接口和 3.5mm 音频触发接口清晰可见。

Pentaton LP 外壳 CAD 设计线框图 图:Marton 用 FreeCAD 设计的外壳线框模型,还专门写了一个自定义宏来生成光滑曲面。