“你能去看一眼制冷机的压力吗?”——这是保罗(Paul)的导师(PI)发给他的常规短信之一。保罗在一间天体物理实验室做系统工程师,博士后身份。被反复催着跑去看表这件事,最终催生了一个开源项目。

打开网易新闻 查看精彩图片

他们那台制冷机有个外号,叫“Mountain Dewar”,本质上是一个大圆柱体,用来测试面向太空探测的敏感探测器。实验室最近搬了家,这台设备在闲置多年后重新启用,正在新场地里做测试。

测试的一部分是检漏:他们从 eBay 上淘到一台便宜的真空泵和一批二手真空部件,需要确认这些部件能保住密封。做法是把制冷机抽真空、排掉里面的空气,然后持续监测压力变化。

原来的监测手段相当原始——一个万用表接在压力传感器上,0 到 10V 的读数按手册里的对照表换算成托(Torr)。因为只是个万用表,没有实时压力数据,测试只能周五跑起来,周一再回来看看成没成。

保罗和一位研究生决定顺手摸一摸实验室的能力边界:用实验室里闲置的一块树莓派(Raspberry Pi)做一块电压表 PCB。研究生设计了一块带双通道 ADC 的板子,带电压差分,接到树莓派上就能读出 0 到 12V 的数值。他们意识到监测压力并不是实验室唯一要干的活,于是把这块板子做得足够通用,什么都能测。

板子做好、电压能读了之后,保罗知道还能再往前走一步。他从一块树莓派 4B 的干净系统和新 PCB 起步写软件。这项工作原本打算交给一位可能加入实验室的新本科生,对方最终没能进组,于是他转而试试 GitHub Copilot 在硬件项目上能做到什么程度。

他找到一块 Adafruit 的 OLED 扩展板(bonnet),正好能扣在 PCB 上面,不用接显示器就能快速看到各通道的数值。Copilot 把他读取 ADC 的测试代码变成一个能跑的 OLED 界面,速度快得让他意外;他接着让它加一个带小摇杆和按键的设置菜单,几乎没出岔子。到这里,导师“在制冷机顶上装个表”的要求已经完成了。

但他没停。保罗平时的工作大多围绕时间序列数据,于是选了 TimescaleDB,它原生支持对数据做汇总,查询起来更省事。他把树莓派联网,将设备数据流式传到 TigerData 云端;数据流不大,免费额度完全够用。随后又让 Copilot 搭了一个简单的网页界面,最后整体部署在 Vercel 上。

系统跑起来之后,他还玩了点花样,做了几个彩蛋主题:

  • /neo:新粗野主义风格,配色与 Mountain Dewar 呼应
  • /neon:霓虹粗野主义
  • /nge:赛博军事风,模仿《新世纪福音战士》的视觉
  • /98:Windows 98 风格,他自己承认还得再修修

硬件侧的配置是树莓派加 ADS1115(两通道,单端接 A0/A1),再叠一块 Adafruit 128x64 OLED 扩展板。软件功能包括:两个通道的实时数值,按可选公式换算;公式以 .txt 文件提供,第一行是单位,第二行是以 V 为变量的表达式,支持 sqrt、log、ln、log10、log2、exp、abs、sin、cos、tan、asin、acos、atan、pow、min、max、round 等函数和 pi、e 常量,无效文件会被跳过。

屏幕上还有菜单:按 A 键或摇杆进入,上下选择、左右改值、B 键返回。可调项包括每个通道的公式、记录间隔 N 秒、ADC 量程、显示刷新周期和 USB 记录开关,设置保存在 settings.json 里。插上 U 盘后,U 盘里有效的 formulas/*.txt 会被复制到树莓派;USB 记录打开时,读数会写进 U 盘上的 voltmeter_logs 目录,每次插入生成一个新的 CSV 文件。

前端用 Flask、FastAPI 和 Tailwind CSS 做主题,实时数据用 Chart.js 渲染,从 TigerData 取数时借助 time_bucket 和 make_interval。数据库侧的用法包括:读数表按时间分区,树莓派直接写入,断网时在内存里缓冲;time_bucket() 把 1 分钟到 24 小时的图表平均到约 300 个点,保证每个缩放级别都快而可读;last() 用一次查询取回各通道最新值供实时仪表盘使用;连续聚合用一分钟汇总支撑 6 小时以上的图表,与原始数据的偏差在 0.012V 以内;压缩与保留策略则在数据写入一天后压缩、90 天后丢弃。

他存的是原始电压,换算公式在下游应用,这样改公式永远不会污染历史数据。仪表盘通过只读角色连接,另有一个用模拟数据的演示模式,方便分享网站而不暴露真实读数。

回报来得很快。系统上线的第二天,导师让保罗关掉真空泵并汇报压力是否稳得住。他直接把网址发了过去,导师自己就能盯着看,不用他每隔几小时跑一趟。他就这么坐在工位上,看着压力一点点升上去。

这套系统他们决定开源,因为其他实验室很可能有类似需求。PCB 可以按需索取,代码放在 GitHub 上,任何人都能部署到自己实验室里。