把实验写成状态机
牛津大学等团队发表于eLife的模块化开源科研仪器,用Python状态机控制鼻触、声光刺激和奖励输出。附原厂整套采购清单、11章图解、软件与硬件分项许可,以及柏林洪堡大学团队的独立实测证据。
alan000
eLife 2022
### 选定原版套件并核对装箱
本页采用原厂Complete Set No 1装配路线,采购表11行是1套的内部构成,不要重复买11套。核对主控含pyboard v1.1、3鼻触、2阀、音频板和扬声器、4根RJ45、USB线、12V3A电源、箱体/备用盖/装配包。原厂未列所有螺钉数量,开箱逐袋拍照登记后再组装;完整板级自制BOM放在模型与图纸,不能与套件路线叠加采购。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)


### 固定箱体与控制板
按收到的原厂机械件和官方前后视图干摆,先确认控制板接口不受箱壁遮挡。用原配M3螺钉和绝缘隔柱固定,避免PCB焊点接触金属;不得猜测螺钉长度/孔位强行锁紧。原公开资料缺逐颗爆炸图,本章不是已经验证的全尺寸装配图。拍下成品正反面与安装位置,断电检查后继续。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)

### 连接三只鼻触与音频板
遵循固定版`example_hardware_definition`:左鼻触接port 1,中间port 2,右侧port 3,Audio board接port 4,扬声器接音频板。使用套件4根RJ45线逐一贴标签。RJ45只是连接器,绝不能插网络交换机/PoE;音频板需要DAC/I2C,不能随意换至不支持的端口。先不接水路和奖励阀做干测试。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)

### 供电与信号边界检查
外设需要12V电源接breakout桶形插座,仅USB可能使主控工作而外设不工作。确认电源极性/插座与原厂板匹配后再通电,板温异常立即断电。4BNC数字输出均为3.3V;只有BNC1/2数字输入耐5V,DAC1/2不耐5V;所有模拟输入限制0–3.3V。POW是低侧开关,不是直接输出电压;本套件以原配负载为准,勿超过官方电流限制。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)

### 安装软件与记录版本
软件采用v2.1.1对应固定提交f3415197af262b3d60897d4ebc20123077bcfbf2。安装Python 3,在独立环境装numpy、pyserial、PyQt6、pyqtgraph,再运行`pyControl_GUI.pyw`。[官方文档有少数.py](http://官方文档有少数.py)旧拼写,当前文件后缀是.pyw。记录Python/依赖版本和GUI错误日志。MicroPython必须匹配pyboard 1.1;只有使用新版`UART_handler`才额外要求MicroPython≥1.26,不把该条件误当所有设备统一最低版本。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)

### 加载框架并运行闪灯任务
USB连电脑后,在Run task的Setup选择pyboard并Connect;Config→Load framework。若按官方建议关闭板载USB闪存模式,重新选择串口再连接;这不等于删除电脑数据。Tasks选example/blinker,Upload→Start,检查蓝LED周期闪烁,Stop停止。此时还没验证鼻触、声音或奖励输出。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)

### 用三次按键验证状态机
加载官方example/button任务,无需外部传感器。每按USR一次应记录`button_press`;累计三次进入`LED_on`,蓝灯约亮1秒后回到`LED_off`,计数归零。使用图中的状态转移逐项核对日志。记下10轮测试的预期/实际,不把论文时延当本板测试结果。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)

### 加载硬件定义并检验鼻触
Config→Load hardware definition加载按实际布线核对的`example_hardware_definition`。它把中间鼻触SOL别名为houselight,套件并未列独立室内灯;没有该灯就保留端口空载,不能擅自接第三只阀。运行example/`hardware_test`:遮左/右光束切换活动端口,对应LED亮;遮中间会令所选侧SOL通电,首次测试务必保持阀断开。测试结束确认所有输出关闭。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)


### 检查音频与可选奖励通道
音频板接port4,先将实体音量旋钮调低,通过已审核的任务调用speaker接口逐渐增加并记录响度。水路按原阀门方向和套件管路装配,先在无动物台架完成漏液测试;不得让液体流到PCB。`hardware_test`在中间光束持续被挡住时会持续开阀,不能把它当定量奖励程序。实际任务需限定脉宽,实测每次出液量并保存校准曲线;本页没有替你确定剂量。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)

### 保存数据并扩展多箱
Run task填Subject ID如bench01,并确认Data directory;按钮从Start变成Record后运行才能保存。检查TSV事件/状态与相应NPY模拟数据(如启用),保存任务代码、硬件定义、pcx配置、框架提交和依赖环境。多箱时在Setups命名,再在Experiments配置任务/对象/变量;硬件测试阶段不保存正式数据。扩展每箱需独立breakout及供电预算,不能拿单套清单当多箱完整BOM。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)

### 验收时序与整理复现记录
基础验收:10轮三次按键状态机无漏记,逐个鼻触与LED映射正确,停止后输出关闭,至少一份真实TSV能重新读取。需要同步时使用官方脉冲同步方法并记录外部设备时钟。柏林洪堡大学LabNet团队在pyboard1.1上实际做10,000次read-and-set测量,报告0.66±0.11ms;这是外部论文结果,并非本次v2.1.1套件的保证值。本站只完成资料与页面,未组装或跑实物。
图片来自Thomas Akam等pyControl官方文档,文档许可MIT,原许可全文保留在单元详情;图示为原作者资料,不代表本站实测。
[官方图文手册](https://pycontrol.readthedocs.io/en/latest/) · [当前软件GPLv3](https://github.com/pyControl/code/blob/f3415197af262b3d60897d4ebc20123077bcfbf2/LICENSE.txt)
