← 文章

光学控制测试平台:让激光按我的剧本"打光"

2026-05-27 · 项目 · 4 min · #Python #串口 #激光 #工具

起因

做光学刺激实验时,要让激光器按设计好的"剧本"出光——什么时候亮、亮多强、亮多久、隔多久再亮一次。激光器(我用的是 Cobolt)能通过串口控制,但每次实验都现敲串口指令、手动掐时间,既不精确也不安全。

于是我做了这个「光学控制测试平台」:把各种刺激范式做成界面上的选项,填好参数,它替我精确地、按时序地控制激光器

光学控制测试平台界面

十一种实验模式

左边一栏是我常用的刺激范式,从简单到复杂:

  • 基础学习–遗忘–再学习:连续脉冲成组输出,可调脉冲时间、间隔、光强、每组个数、组数和组间隔;
  • 分组参数扫描:变光强 / 变脉宽 / 变脉冲个数 / 变频率,四种扫描,自动跑完一整组对比;
  • RayPulse 扩展:PPF 双脉冲间隔扫描、二维脉高–脉宽扫描、随机光强序列、0/1 双光强编码、多态阶梯刺激、储备池二进制编码。

每种模式选中后,右边参数区会换成它对应的输入项,填好就能用。

先"看"再"做",每一步都留痕

点「预览 / 导出 CSV」,它会先算出这次实验预计有多少组、多少个脉冲、总共要跑多久,并把每个脉冲的开始 / 结束时间写进一份 CSV——实验还没开始,时序就已经清清楚楚记录在案了。右边还有一块实时日志,运行时每一步都打出来。

最重要的部分:别让它误伤人

激光不是闹着玩的,所以这个工具我花最多心思的地方其实是安全

  • 默认 dry-run:打开就只是"空跑",把整个时序走一遍、记录下来,但不会真的发激光
  • 要真实出光,必须手动勾选「启用真实激光输出」
  • 光这样还不够,还得再勾一道**「我确认光路、防护和样品状态已准备好」**;
  • 两道都勾了,真正开跑前它还会弹窗,让你再确认一次 COM 口、脉冲数和预计总时长。

三道关卡叠在一起,就是为了让"真的射出激光"这件事绝不可能手滑触发。做硬件控制,我始终觉得:能让它跑得多花哨是其次,先得保证它不会伤到人和样品。

技术上

Python 写的,串口通信封装了一层 Cobolt 的控制(dry-run 和真实激光器是两套实现,靠同一组接口切换,所以空跑和实跑的逻辑完全一致,不会出现"空跑好好的、实跑就不对")。界面把参数配置、预览、日志、运行控制都集中在一屏,操作起来一目了然。

一点感想

写控制硬件的软件,和写纯软件最大的不同,是你得对物理世界负责。一个边界没判好,纯软件顶多报个错,激光控制可能就是另一回事了。这个项目让我更习惯了一件事:先想"它最坏会怎样",再想"它能做到多好"。

#Python#串口#激光#工具