基于掌控板的物理实验装置《可即时分析的玻意尔探究装置》
作品说明
一、背景分析与设计要求
摘要:玻意耳定律是高中物理"气体实验定律"的核心内容,但气体"看不见、摸不着",学生对压强与体积的反比关系往往只停留在公式记忆上。教材常用的两种实验装置各有短板:注射器加气压计的方案受活塞摩擦力与气压计分度值限制,误差偏大,且装置体积小、后排学生看不清读数;DIS 实验室方案精度高,但多数学校(尤其是农村学校)并未配备。本项目用低成本开源硬件重做了一台玻意耳定律探究装置:以两个 200mL 医用注射器为主体容器与调节容器,用 5mm 三通气阀连通,把气压传感器直接放进针筒内部测量气压;掌控板负责采集与显示,数据经 MQTT 物联网平台即时上传,在电脑网页端和手机上就能看到压强随体积变化的曲线,形成折线图并导出分析。装置还加入了齿轮传动机构,让操作者可以一手推压活塞、一手按键记录,并由程序自动连续测量三次取平均值,最终相对误差控制在 2.5% 以内,实测压强与体积倒数的线性拟合关系与玻意耳定律吻合。该作品获第二十四届福建省学生信息素养提升实践活动高中组创意智造二等奖,相关设计已申请实用新型专利并整理成论文公开发表。
关键词:玻意耳定律;开源硬件;掌控板;气压传感器;MQTT 物联网;即时数据分析
1.1 项目背景
1.1.1 一条"看得见公式、看不见气体"的定律
玻意耳定律是高中物理气体部分的重点内容,它指出在密闭容器中的定量气体,在温度恒定时,气体的压强与体积成反比,即 PV = 常数,也可写成 P1V1 = P2V2。由于气体既看不见也摸不着,这部分内容对学生来说比较抽象,理解起来存在困难。也正因为如此,把这个定律做成可以动手操作、可以定量读数的实验,对帮助学生建立概念、验证结论就显得很有必要。
1.1.2 传统装置的三处不便
在动手做之前,我们先梳理了教材和教学中常见的装置,发现三处共同的短板:
- 摩擦与分度值带来的误差:利用注射器封闭一定质量的气体,通过气压计测量压强,或在活塞上加减砝码间接测量压强。这种方案操作简单,但活塞与筒壁之间的摩擦力较大,气压计的分度值也较大,直接导致实验误差大,不利于实验结论的形成。
- 装置太小,课堂可观察性差:受装置体积影响,教师在课堂上演示时,坐在后排的学生很难看清装置及由此产生的实验数据,既凸显了可观察性差的不足,也给教学带来不便。
- DIS 实验室门槛高:用压强传感器、注射器、数据采集器与计算机组成的数字化实验系统,操作便捷、计算精确,能直观反映数据规律;但受条件限制,很多学校并没有配备 DIS 实验室,实验难以开展。
这三条并非我们的判断,而是直接来自本项目后续整理发表的教学论文《基于开源硬件的玻意耳定律验证实验》(《实验教学与仪器》2024 年第 3 期)中对现有方案的梳理,它也正好解释了我们要动手改进的方向。

非本作品实拍):气压计、活塞、空气柱、橡胶套构成了最基本的验证方案" style="max-width:100%;border-radius:10px">图 1-1 教材中"利用注射器测量气压"的传统装置示意(作品 PPT 引入部分所引用的教材插图,非本作品实拍):气压计、活塞、空气柱、橡胶套构成了最基本的验证方案

图 1-2 教材与教辅中出现的几种气体定律实验方案对比(作品 PPT 引用插图,非本作品实拍):甲、乙为不同结构的注射器方案,丙为带减压装置的方案,各有取舍
1.1.3 我们的切入角度
我们的想法是:把"读数"和"记录"这两件最费事、最容易出错的事交给机器。开源硬件成本低、易制作,掌控板(ESP32 主控)本身就带 OLED 屏幕,可以实时显示测量值;再用物联网把数据即时送出去,让老师和同学在电脑网页端、手机上直接看曲线,不需要再"肉眼观察、手抄记录"。这样一来,实验的重点就从"抄数据"回到了"看规律"上。
1.2 主体结构
装置主体由五个部分组成,构成"一个密闭气路 + 一套传动机构 + 一块主控"的结构:
- 木质支架:5mm 椴木板激光切割后榫卯拼接,为主体针筒提供垂直方向的固定与导轨;
- 主体容器:200mL 医用注射器(螺纹口),筒内安装气压传感器,是测量的对象;
- 调节容器:另一支 200mL 医用注射器,通过推拉活塞改变系统内气体的体积;
- 连通与控制:5mm 三通气阀把两支针筒连通,用于封闭、转移气体,是改变气体质量的开关;
- 主控与显示:掌控板插在 I/O 扩展板上,气压传感器经 IIC 接口接入,屏幕现场显示压强,同时通过 Wi-Fi 把数据发布到 MQTT 平台。
工作流程可以概括为一句话:推拉活塞改变体积 → 传感器读压强 → 掌控板显示 → 物联网上传 → 网页/手机看曲线。为了能一手压缩活塞、另一手按键记录,我们还给主体针筒加了一套齿轮传动与螺杆结构,把"推"这个动作变得省力且可微调。

图 1-3 定稿作品实拍:木质支架内竖立着主体针筒(内置气压传感器),顶部为齿轮传动与螺杆机构;前方横放的是调节针筒,两者由黄色 5mm 三通气阀连通;右侧为插在扩展板上的掌控板,屏幕正在显示测量界面
1.3 设计要求
1.3.1 功能要求
| 序号 | 功能要求 | 落实方式 |
|---|---|---|
| 1 | 即时采集针筒内气压并上传物联网平台 | BMP388 气压传感器经 IIC 接入掌控板,程序读取后经 MQTT 发布到 SIoT 平台 |
| 2 | 在线查看数据并自动形成折线图,手机端同样可看 | SIoT 建立本地 MQTT 服务器,Web 管理页与手机端均可查看分时曲线 |
| 3 | 支持定量研究等质量气体的体积与压强关系 | 双针筒 + 三通气阀,可分别实现对等质量与等体积两种工况的控制 |
| 4 | 自动多次测量取平均,减小单次读数误差 | 程序连续读取三次压强,取平均后再换算单位显示 |
| 5 | 单手可操作,边压活塞边记录 | 齿轮传动 + 螺杆机构省力,A 键测量、B 键发送数据 |
1.3.2 工程结构要求
| 维度 | 具体要求 | 为什么这样要求 |
|---|---|---|
| 气密性 | 针筒与传感器引线穿出处用密封胶封固,气阀与接口旋紧 | 气密性受工艺影响,长时间操作数据稳定不足;密封不好会直接破坏 PV=常数的前提 |
| 可读性 | 针筒刻度朝外可见,装置尺寸放大以适配课堂演示 | 传统装置体积小、后排看不清,是本项目要解决的痛点之一 |
| 操作性 | 单人双手分工:一手推压、一手按键 | 实验需在恒温下快速完成多组读数,操作越省力、越快越准 |
| 经济性 | 主控与传感器选用教学常用开源硬件,结构件用椴木板激光切割 | 目标是让没有 DIS 实验室的学校也能低成本做定量实验 |
| 稳固性 | 支架榫卯拼接,螺杆与齿轮提供导向,折叠滑轨消除径向晃动 | 针筒活塞推拉会产生侧向力,不稳固会造成读数漂移 |
二、设计思维导图
下图是本作品的设计思维导图。中心是作品本体,六个分支分别对应它的定位、核心功能、硬件构成、软件平台、结构形态与应用场景,这也是我们在立项阶段讨论最多、改动最多的六个方面。

三、硬件选用与连接
3.1 器材清单
下表按参赛材料《作品方案》中的"材料清单和相关要求"整理。申报材料只列出了名称、规格与数量,没有逐项标注采购单价,也没有合计金额,此处如实照录,不作估算。
| 元器件 | 规格 | 数量 | 主要用途 |
|---|---|---|---|
| 掌控板 | DFR0608-1 | 1 块 | 计算数据,将结果上传至 MQTT 物联网平台 |
| 气压温度传感器 | BMP388 | 1 个 | 测量针筒内气压数据大小 |
| 杜邦线 | 若干 | 1 批 | 连接传感器和掌控板 |
| 椴木板 | 5mm | 若干 | 激光切割制成支架与齿轮等结构件 |
除清单所列之外,作品实际还用到:I/O 扩展板(与掌控板配套,把引脚引出并便于外接传感器)、200mL 螺纹口医用注射器 2 支、5mm 气阀 1 个、四芯导线与密封胶(用于把传感器引线从活塞内部引出并封固)。这些在《作品方案》的正文叙述中出现,但未列入清单表。
传感器型号需要说明一处材料差异:参赛《作品方案》与《创意设计报告》都写的是"BMP388 气压传感器",程序里调用的是 Mind+ 的 BMP388 初始化 I2C地址0x77 与 bmp388.readPressure();而本作品后续整理发表的教学论文中,记录的是 BMP280 气压温度传感器。两者是同一系列的不同型号,我们在此并列保留,不做合并——参赛程序与截图按 BMP388 呈现,论文中的参数按 BMP280 呈现。
3.2 硬件连接
连接关系并不复杂:掌控板插在 I/O 扩展板的卡槽上,气压传感器用四根线接到扩展板的 IIC 接口。接线图如下:

图 3-1 硬件连接图:掌控板(A 面朝下)插入 I/O 扩展板的卡槽,气压传感器经红(VCC)、黑(GND)、蓝(SCL)、绿(SDA)四线接入扩展板的 IIC 接口区
连线对应关系如下表。需要提醒的是,图 3-1 是作品材料中的连接示意图,红色为电源正、黑色为电源负、蓝绿为 IIC 的时钟线与数据线,四线颜色与传感器模块丝印上的 VCC / GND / SCL / SDA 一一对应。
| 连线 | 从(传感器模块) | 到(I/O 扩展板) | 作用 |
|---|---|---|---|
| 红线 | VCC | IIC 区 +(电源正) | 为气压传感器供电 |
| 黑线 | GND | IIC 区 −(电源负) | 共地 |
| 蓝线 | SCL | IIC 区 C(时钟) | IIC 总线时钟线 |
| 绿线 | SDA | IIC 区 D(数据) | IIC 总线数据线 |
| USB 线 | — | 掌控板 Type-C 口 | 供电与程序上传 |
程序端的初始化语句是 BMP388 初始化 I2C地址0x77,也就是说传感器占用的是 IIC 总线上的 0x77 地址。这一点在制作时很关键:如果接线松动或地址冲突,程序不会报错提示,只会一直读到无效值,屏幕上会出现明显偏离 1000hPa 附近的读数。我们在联调阶段就是靠"读数是否落在 1000hPa 上下"来判断传感器有没有正常工作。
3.3 分模块参数
(1)主控与显示
| 项目 | 内容 |
|---|---|
| 型号 | DFRobot 掌控板 DFR0608-1(ESP32 主控) |
| 显示 | 板载 OLED 屏幕,程序按"第 N 行"与"坐标 (X, Y)"两种方式写屏 |
| 按键 | 板载 A、B 两个按键,本作品中 A 键测数据、B 键发送数据 |
| 扩展 | 插接 I/O 扩展板后引出 IIC 接口与 P0~P16 等金手指插孔 |
| 联网 | 板载 Wi-Fi,程序中按"连接热点 → 等待连接成功"的方式接入网络 |

图 3-2 掌控板正反面与 I/O 扩展板实物:正面(右)可见 OLED 屏幕、A/B 按键与金手指,反面(左)为元件面;文件中的实物图来自作品材料
(2)气压传感器
| 项目 | BMP388(参赛材料与程序) | BMP280(论文记录) |
|---|---|---|
| 接口 | IIC,地址 0x77 | IIC(经扩展板 IIC 接口接入) |
| 程序调用 | bmp388.readPressure(),返回压强原始值(Pa) | Mind+ 的 BME280 模块读取 |
| 气压量程 | 参赛材料未给出 | 300~1100 hPa |
| 气压相对精度 | 参赛材料未给出 | ±0.12 hPa |
| 温度测量范围 | 参赛材料未给出 | 0~65.00 ℃ |
| 温度测量精度 | 参赛材料未给出 | 0.01 ℃ |
| 在本作品中的作用 | 内置在主体针筒内部,直接测量筒内气压 | 同样内置在针筒内,同时承担气压与温度测量 |
把气压传感器直接放进针筒内部,是这套装置与教材装置最大的不同。论文中对这一点有明确说明:气压温度传感器把温度传感器和压强传感器合二为一,具有接触面小、接触点少的优点,既能保证接触紧密,又能确保气密性,避免了传统实验装置中摩擦力的影响。

图 3-3 气压传感器模块实物(作品材料中的传感器模块图):模块为小型化板卡,通过排针与外接导线连接
(3)气路与容器
| 部件 | 规格 | 作用 | 选型考虑 |
|---|---|---|---|
| 主体针筒 | 200mL 螺纹口医用注射器 | 容纳被测气体,筒内安装气压传感器 | 螺纹口便于与气阀、转接头连接,刻度清晰便于读体积 |
| 调节针筒 | 200mL 螺纹口医用注射器 | 推拉活塞改变系统内气体体积与质量 | 医用注射器气密性优于普通容器,且刻度已经印好 |
| 三通气阀 | 5mm 气量调节阀 | 连通两支针筒,并作为改变气体质量的开关 | 论文中记录的是螺纹口注射器对接转换接头,与气阀属于同一功能的不同实现 |
| 连通软管与接头 | 配套 | 连接气阀与针筒 | 软管过长会带来额外的"死体积",影响体积读数的准确性 |

图 3-4 5mm 气量调节阀实物与尺寸标注:接口外径 5.8mm、总长约 46mm,黄色阀体,转动阀芯即可通断气路

图 3-5 医用注射器实物:筒身印有 50~200mL 刻度,活塞推到不同位置即可改变封闭气体的体积
3.4 上电自检
接线完成后先不急着做实验,而要先确认"传感器活着、网络通了、平台连上了"。程序里的初始化顺序正是按这个思路写的:连接 Wi-Fi → 显示"WIFI连接成功" → 初始化 MQTT 参数并连接 → 显示"SIOT连接成功" → 显示"研究玻意尔定律" → BMP388 初始化 → 播放提示音 → 进入主循环。每一步都有屏幕反馈,任何一步失败都能一眼看出卡在哪里。

图 3-6 上电自检实拍:掌控板插在扩展板上,四芯排线从针筒内部引出接到 IIC 接口,屏幕显示实时读数(此调试版本的屏幕同时显示压强与体积,参赛定稿程序把压强换算为 hPa 后只显示压强一项)
从图中的读数可以看出,针筒内的气压在 10 万帕量级,这正是常压附近的合理数值;而参赛定稿程序把单位统一换算成 hPa 显示,读数就变成 1000hPa 上下,更贴近中学物理教材使用的单位。换算关系是 1 hPa = 100 Pa,所以程序里用"原始值 ÷ 3 取整后 × 0.01"来完成从 Pa 到 hPa 的换算。
四、结构安装与制作过程
4.1 外观与结构设计
这台装置的外观并不是一次就定下来的,而是经过了两轮比较明显的调整。
第一版:立式木框,纯手动推压
最早的结构是一个立式木质框架,主体针筒固定在框架内部,操作者直接用手推压针筒活塞来改变体积。这个版本能测出数据,但推压时装置会晃动,读数也不稳定,而且一只手要压住装置、一只手推活塞,根本没有第三只手去按按键记录数据。

图 4-1 第一版结构实拍:立式木质框架内固定主体针筒,此时还没有齿轮传动机构,调节针筒也未与主体形成完整气路
第二版:加装齿轮传动与螺杆,把"推"变成"摇"
第二版针对"晃动"和"没手按键"这两个问题做了两处改动:一是加装齿轮传动与螺杆机构,用手旋转齿轮即可带动活塞升降,既省力又能微调,同时螺杆本身对主体针筒起到了导向作用;二是把主体针筒用两块夹板上下夹持,配合折叠滑轨消除径向晃动。这样一来,操作者可以一只手持握齿轮、另一只手按 A 键记录,正如作品创新点中所写的——齿轮传动可一手压缩主体针筒活塞,另一手按 A 键测量数据,灵活轻松。

图 4-2 定稿结构的 3D 建模(SketchUp 2019):方形木框内部为主体针筒,顶部为双齿轮与螺杆机构,前方接入调节针筒

图 4-3 同一模型的另一视角:可看清主体针筒与调节针筒的相对位置,以及三通气阀在两筒之间的连接走向

图 4-4 齿轮传动件实物:两个椴木板切割的齿轮与固定底板,齿形与轴孔由激光切割一次成型
定稿版的整体构成
| 部位 | 结构设计 | 设计意图 |
|---|---|---|
| 支架主体 | 5mm 椴木板激光切割 + 榫卯拼接成方形框体 | 不用螺丝与胶水连接,装配快、精度由切割图纸保证 |
| 针筒夹持 | 上下夹板固定主体针筒,配合导向结构 | 抑制活塞推拉时的径向晃动,保证读数稳定 |
| 传动机构 | 双齿轮 + 螺杆,手摇齿轮带动活塞升降 | 省力、可微调,实现单手操作、另一手按键记录 |
| 气路布置 | 针筒底部经软管接 5mm 三通气阀,再连调节针筒 | 气阀置于低位便于观察与操作,软管尽量短以减小死体积 |
| 主控位置 | 掌控板插扩展板后置于支架侧面,屏幕朝外 | 屏幕朝向操作者,读数不需要绕到装置背后 |
| 外观配色 | 保留椴木原色,仅气阀为黄色、排线为彩色 | 不做喷涂,突出"自制教具"的朴素感,也便于看清内部结构 |

图 4-5 定稿作品局部特写:竖立的主体针筒由木框上下夹板固定,筒内腔体经黄色 5mm 三通气阀与前方横放的调节针筒连通;彩色四芯排线从主体针筒活塞处引出,接向掌控板的 IIC 接口。这一张能同时看清气路走向、传动机构与引线方式
4.2 零件加工与激光切割
结构件的设计在 LaserMaker 中完成,采用"先排版、再切割"的常规流程。一次排版把方形侧板、弧形件、长条、圆环与两个齿轮等零件全部排进同一张板料,既省料也省时间。

图 4-6 激光切割设计图纸:同一张板料上排布了方形侧板(含榫卯齿)、弧形件、长条、圆环与齿轮等零件,下方两个齿轮即为传动机构的核心零件
切割参数按下图设置。激光切割木质件的关键在"切透但不烧边",速度过快会切不透、过慢会把边缘烧焦,本次使用的参数为加工工艺 = 切割、速度 = 16、功率 = 100。

图 4-7 LaserMaker 中的加工参数设置:加工工艺为切割、速度 16、功率 100,画布中即为图 4-6 的零件排版(界面底部任务栏已裁去)
4.3 传感器内置与气密处理
整套装置里工艺要求最高的一步,是把气压传感器放进针筒内部。成品传感器模块无法穿过针筒口,所以采用了"从活塞内部走线"的办法,具体步骤与论文中记录的工艺一致:
- 活塞开孔:取出 1 个注射器活塞,在活塞中间开 1 个小孔,将四芯导线穿过该小孔;
- 导线焊接:四芯导线的一端直接与气压传感器的触点相焊接,另一端同杜邦线母头相连接。由于注射器内部空间有限,根本无法容纳排针与插头,所以采用导线直接与线路板焊接的方式,而没有采用焊接排针与插头的方式;
- 装入针筒:将活塞连同气压传感器插至注射器针筒内 30mL 刻度处;
- 密封固定:用密封胶固定穿线孔及活塞;
- 接入主板:将四芯导线另一端连接到扩展板的 IIC 接口端。
这几步里,第 4 步的密封胶是成败关键。穿线孔和活塞边缘任何一处漏气,整个 PV = 常数 的实验前提就不成立了。作品方案在"不足之处"中也如实写到了这一点:本设备气密性容易受工艺的影响,长时间操作数据稳定不足,因此操作动作要熟练、迅速。
4.4 编程与联调
结构搭建完成后进入编程与联调阶段。程序在 Mind+ 1.7.3 中完成,采用"上传模式"烧录到掌控板;调试过程中反复往返于"改程序—烧录—推活塞—看读数"之间,直到屏幕读数稳定、平台能收到数据为止。

图 4-11 作品所在的创客教室:装置已经装配成型摆在桌面上,一旁是用于编程与查看数据的电脑
4.5 装配要点小结
| 环节 | 关键动作 | 容易出问题的地方 | 我们的处理 |
|---|---|---|---|
| 针筒开孔 | 在活塞中间开 1 个小孔穿四芯导线 | 孔位偏心会导致活塞受力不均、密封困难 | 居中开孔,穿线后立刻试推活塞检查是否卡滞 |
| 传感器焊接 | 导线直接焊在传感器触点,不焊排针 | 焊接温度过高会损伤线路板 | 快速点焊,焊后先单独通电确认读数正常 |
| 密封 | 密封胶封固穿线孔与活塞 | 胶量过多会影响活塞行程,过少则漏气 | 薄涂两遍,待第一遍固化后再补第二遍 |
| 装配 | 榫卯拼接,装齿轮与螺杆 | 齿轮啮合过紧会卡、过松会打滑 | 先空转试齿,再固定轴位 |
| 整机测试 | 通电检查网络、平台、读数 | 接线松动或 IIC 地址异常时程序不报警 | 以"读数是否在 1000hPa 附近"作为判断依据 |
五、编程流程分析
5.1 程序总览
参赛定稿程序名为"玻意尔0501"(同为"研究玻意尔定律"),在 Mind+ 1.7.3 中编写,共 93 块积木,采用"上传模式"烧录到掌控板。程序整体由一条主程序链、一条按键事件链和三个自定义块组成,这也是 Mind+ 中典型的多脚本并行结构。

图中 Wi-Fi 账号与密码输入框已隐去处理" style="max-width:100%;border-radius:10px">图 5-1 参赛定稿程序全貌(Mind+ 1.7.3):左侧为积木分类区,中间为三栏脚本——第 1 栏为主程序,第 2 栏为 B 键事件与"AVG"自定义块,第 3 栏为"说明"与"测量"两个自定义块。图中 Wi-Fi 账号与密码输入框已隐去处理
| 脚本 | 触发方式 | 功能 |
|---|---|---|
| 主程序(ESP32 主程序) | 上电即运行 | 变量初始化 → 连 Wi-Fi → 初始化并连接 MQTT → 屏显提示 → BMP388 初始化 → 播放提示音 → 进入主循环(循环调用"说明"与"测量") |
| B 键事件 | 按下 B 键 | 向主题 Topic_1 发布"P × 0.01",把当前压强值发送到 MQTT 平台 |
| 自定义块 说明 | 主循环中反复调用 | 检测 A 键;按下后计数 n 加 1,并按 n 的模值决定是否刷新屏幕提示界面 |
| 自定义块 测量 | 主循环中反复调用 | 当计数 n 满足条件时,调用"AVG"完成一次三点测量,并在屏幕显示换算后的压强 |
| 自定义块 AVG | 由"测量"调用 | 连续读取三次气压并累加,循环结束后求平均、取整并换算单位 |
5.2 主程序与测量流程
程序最关键的设计在"什么时候测、测几次、怎么显示"。下面的流程图按源码逐块还原了从主循环到一次完整测量的执行路径:
上电:变量 n = 0连接 Wi-Fi 与 MQTT 平台BMP388 初始化(I2C 0x77)进入主循环调用自定义块「说明」调用自定义块「测量」循环执行「说明」:A 键按下?按下则 n+1;若 n÷3 余 1 则刷新提示界面「测量」:n÷3 余 2?满足则 n+1,并调用「AVG」「AVG」:连测 3 次取平均P = 取整(P ÷ 3) × 0.01屏幕显示 P = xxx hPa等待 0.5 秒后返回主循环测量完成按 A 键触发一次测量,按 B 键把当前压强值单独发布到物联网平台
5.3 三次测量取平均
单次读数容易受气流、手温、传感器抖动影响,所以程序做了"连测三次取平均"。这一段逻辑全在自定义块「AVG」里,用"重复执行直到 I = 4"实现循环三次:
进入「AVG」:I = 1I = 4 ?(重复执行直到)屏幕提示"多次测量"并显示当前是第几次等待 1 秒给筒内气流稳定的时间读气压 → TEMP2累加:P = P + TEMP2I = I + 1回到判断处继续循环P = 取整(P ÷ 3) × 0.01先求平均,再把 Pa 换算为 hPa否(I < 4,继续测)循环 3 次是(I = 4,已测满 3 次)三次读数累加后一次性求平均,避免反复取整带来的累积误差
这里有一个容易被忽略的细节:程序不是"每次测完就取平均",而是先把三次读数累加,最后再一次性求平均。这样做的好处是只在最后取整一次,避免中间步骤反复取整带来的累积误差。
5.4 三个关键技术处理
(1)用"计数取模"实现按键防抖与分步提示
掌控板的 A 键在主循环中会被反复检测,如果直接把"按 A 键"当作一次测量,手指按下的那一瞬间程序会触发几十次测量。程序的做法是引入一个计数器 n:每次检测到 A 键按下就让 n 加 1,再用 n 除以 3 的余数来判断当前处于哪一步——余 1 时显示"按下A键,开始测量 / 按下B键,发送数据"的操作提示界面,余 2 时执行一次三点测量。这本质上是一种软件分频,把"连续按下"转换成了"每隔若干次循环执行一次",起到了防抖的作用。
(2)单位换算:Pa → hPa
气压传感器读取的原始值是国际单位帕(Pa),而中学物理教材使用的是百帕(hPa),两者相差 100 倍。程序在取平均之后乘 0.01,把读数换算成 hPa,屏幕上显示的就是 P=1005hPa 这样的数值,与教材、与气象数据都能直接对应。
(3)为什么只上传压强,不上传体积
程序初始化时在 MQTT 参数里配置了两个主题:GT-bye/Volume-1(体积)与 GT-bye/Pressure(压强)。但在全部 93 块积木中,只有向压强主题发布数据的语句,没有向体积主题发布数据的语句。也就是说,体积数据是靠实验者读取针筒刻度后手工记入表格的,而压强数据由装置自动采集上传。这一点直接影响实验操作方式:压强不需要抄,体积需要看刻度记下来。我们也把这条作为后续改进方向之一(见第九节)。
六、参考代码
6.1 图形化程序
作品主体程序采用 Mind+ 图形化积木编写,完整脚本见图 5-1。Mind+ 支持把图形程序一键切换为文本代码查看,下面两组截图就是这套积木自动生成的 C++ 代码,可用于对照理解积木与代码的对应关系。

图 6-1 图形程序生成的 C++ 源码头段:包含库引用、全局变量声明(mind_n_n、mind_n_I、mind_n_P、mind_n_TEMP2 等)与传感器对象定义

图 6-2 图形程序生成的三个自定义函数:DF_ShuoMing()(说明)、DF_AVG()(三次平均)、DF_CeLiang()(测量),与图 5-1 中的三个自定义块一一对应

图 6-3 图形程序生成的事件回调与数值格式化函数:B 键回调 onButtonBPressed() 负责发布数据,numberRetain() 负责按指定小数位格式化显示数值
把图 6-2 与图 6-3 中的代码完整抄录如下(Wi-Fi 账号与密码在原程序中是明文常量,此处已替换为占位符),并补上逐行中文注释:
// ===================== 第一部分:三个自定义函数 =====================
// 【1】说明:检测 A 键,并根据计数 n 的余数刷新屏幕上的操作提示
void DF_ShuoMing() {
if (((buttonA.isPressed())==1)) { // 判断板载 A 键是否被按下
mind_n_n += 1; // 计数器 n 自增,用于按键防抖与分步控制
if ((((int32_t(mind_n_n)) % (int32_t(3)))==1)) { // n 除以 3 余 1 时,说明处于"等待测量"步骤
display.fillScreen(0); // 清屏(参数 0 表示黑色)
display.setCursor(12, 0); // 光标移到坐标 (12, 0)
display.print("研究玻意尔定律"); // 打印标题,不换行
display.setCursorLine(2); // 光标移到第 2 行
display.println("按下A键,开始测量"); // 打印操作提示
display.setCursorLine(3); // 光标移到第 3 行
display.println("按下B键,发送数据"); // 打印操作提示
}
}
}
// 【2】AVG:连续读取三次气压并累加,最后一次性求平均并换算单位
void DF_AVG() {
mind_n_I = 1; // 循环变量从 1 开始
while (!(mind_n_I==4)) { // 重复执行直到 I 等于 4,即循环 3 次
display.fillScreen(0); // 清屏
display.setCursorLine(2);
display.println("多次测量"); // 提示正在多次测量
display.setCursorLine(3);
display.println((String("次数:") + String(numberRetain(mind_n_I,0)))); // 显示当前是第几次
delay(1000); // 等待 1 秒,让筒内气流稳定后再读数
mind_n_TEMP2 = (bmp388.readPressure()); // 读取气压传感器原始值(单位 Pa)
mind_n_P = (mind_n_P + mind_n_TEMP2); // 累加到 P 上,三次读完后 P 是总和
mind_n_I += 1; // 循环变量自增
display.fillScreen(0);
display.setCursorLine(2);
display.println((String("次数:") + String(mind_n_I - 1))); // 显示已完成的次数
yield(); // 让出 CPU,保证 Wi-Fi / MQTT 后台任务不被饿死
}
// 三次总和先除以 3 取整得到平均值,再乘 0.01 把 Pa 换算为 hPa
mind_n_P = ((String(mind_n_P / 3)).toInt() * 0.01);
}
// 【3】测量:当计数条件满足时,执行一次测量并显示结果
void DF_CeLiang() {
if ((((int32_t(mind_n_n)) % (int32_t(3)))==2)) { // n 除以 3 余 2 时触发一次测量
mind_n_n += 1; // 先自增,使条件不再满足,避免重复测量
DF_AVG(); // 调用三次平均函数
display.setCursor(12, 0);
display.print("研究玻意尔定律"); // 重新打印标题
display.setCursorLine(3);
// 把换算好的压强值格式化为整数后拼接单位显示,例如 P=1005hPa
display.println((String("P=") + String((String(numberRetain(mind_n_P,0)) + String("hPa")))));
delay(500); // 停留 0.5 秒,便于观察读数
}
}
// ================ 第二部分:B 键回调与数值格式化 ================
// B 键按下的事件回调:把当前压强值经一次缩放后发布到物联网平台
void onButtonBPressed() {
myIot.publish(topic_1, (mind_n_P * 0.01)); // topic_1 即 GT-bye/Pressure
}
// 数值格式化:把浮点数 t 保留 n 位小数并转成字符串,供屏幕显示使用
String numberRetain(float t, uint8_t n) {
String str = t<0 ? "-" : ""; // 负数先补符号
int8_t _n = n; // 需要保留的小数位数
t = abs(t); // 取绝对值,符号已单独处理
for(; _n>=0; --_n){ // 逐位取出整数部分与每一位小数
uint32_t integer = floor(t); // 取当前整数部分
float decimal = t - integer; // 取小数部分
// 第一位输出"整数 + 小数点",其余位只输出数字字符
str += _n == n ? (String(integer) + (n ? "." : "")) : integer;
t = decimal*10; // 把小数部分放大 10 倍,进入下一位
}
return str; // 返回格式化后的字符串
}6.2 电脑端实时绘图程序
在用物联网方案之前,装置还试过另一条技术路线:让掌控板把数据通过 UDP 直接广播到电脑,由电脑端 Python 程序用 matplotlib 实时绘制动态曲线。这条路线记录在后来的教学论文中,程序保存在"python探究玻意耳定律"文件夹里,名为 11.py(文件头标注"造物记上传版")。它和图形程序配合使用:掌控板端用 UDP 广播发送数据,电脑端接收后画图。下面照录并加逐行注释(原程序中绑定的本机局域网 IP 已替换为占位符):
# 造物记上传版:电脑端接收掌控板广播的数据并实时绘制动态曲线
from matplotlib import pyplot as plt
import matplotlib.animation as animation # 用于逐帧刷新图表
import datetime as dt
import matplotlib
import time
import socket # UDP 通信
# 创建 UDP 套接字(SOCK_DGRAM 表示 UDP 协议)
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定本地地址与端口:必须绑定自己电脑的 IP 与端口,且要与掌控板端程序一致
localaddr = ("本机局域网IP", 8888) # 原程序填的是本机局域网 IP,此处已隐去
udp_socket.bind(localaddr)
data = []
matplotlib.rcParams['font.family'] = 'FangSong' # 指定中文字体,避免中文标题乱码
fig = plt.figure(num='气体温度压强测量', figsize=(12, 6), dpi=100)
ax1 = fig.add_subplot(1, 1, 1) # 左侧纵轴:气压
ax1.yaxis.set_tick_params(labelcolor='b')
ax1.yaxis.set_tick_params(color='b')
ax2 = ax1.twinx() # 右侧纵轴:热力学温度(共用横轴)
ax2.yaxis.set_tick_params(labelcolor='r')
ax2.yaxis.set_tick_params(color='r')
xs = [] # 时间轴数据
ys1 = [] # 气压序列
ys2 = [] # 温度序列
def animate(i, xs, ys1, ys2):
# 阻塞等待接收一帧数据,返回 (数据字节, 来源地址)
recv_data = udp_socket.recvfrom(1024)
recv_msg = recv_data[0]
send_addr = recv_data[1]
# 掌控板发来的是 "压强:温度" 格式的字符串,用冒号切分
data = recv_msg.decode("gbk").split(":")
press = int(eval(data[0])) # 气压值
temp = int(eval(data[1])) # 温度值
xs.append(dt.datetime.now().strftime('%H:%M:%S')) # 记下当前时刻
ys1.append(press)
ys2.append(temp)
# 只保留最近 20 个点,实现滚动显示
xs = xs[-20:]
ys1 = ys1[-20:]
ys2 = ys2[-20:]
ax1.clear() # 清空旧图
ax2.clear()
ax1.set_ylabel('气压P/×100Pa', color='b', size=15)
ax1.set_ylim(300, 1600) # 固定纵轴范围,便于读数对比
ax1.tick_params('x', labelrotation=45) # 横轴时间标签旋转,避免重叠
ax2.set_ylabel('热力学温度T/K', color='r', size=15)
ax2.set_ylim(270, 380)
ax1.plot(xs, ys1, 'b.-') # 蓝色点线画气压
ax2.plot(xs, ys2, 'r.:') # 红色点线画温度
plt.title('测量气体压强、温度', size=20)
# 在每个数据点上方标注数值,便于边看曲线边读数
for a, b, c in zip(xs, ys1, ys2):
ax1.text(a, b, b, ha='center', va='bottom', color='b', fontsize=15, alpha=0.5)
ax2.text(a, c, c, ha='center', va='bottom', color='r', fontsize=15, alpha=0.5)
# 每 1000ms 调用一次 animate,实现秒级刷新
ani = animation.FuncAnimation(fig, animate, fargs=(xs, ys1, ys2), interval=1000)
plt.show() # 弹出窗口显示动态图
udp_socket.close() # 关闭套接字需要如实说明一处:这套 UDP 方案与最终提交的物联网方案是两条不同的技术路线,两者在传感器型号(论文记录的 BMP280 与程序的 BMP388)、调节容器规格(论文记录 40mL 注射器 + 螺纹对接转换接头,参赛材料使用 200mL 调节针筒 + 5mm 三通气阀)上都存在差异。我们把两套材料都按原样呈现,不强行统一,因为它们分别对应了装置在不同阶段、不同场合下的真实形态。
七、作品创新点
7.1 让数据"即时可分析"
先看一眼整台装置在实验完成后的样子。下图与图 1-3 是同一台作品的另一种取景,能更清楚地看到木质支架、前置的调节针筒与右侧的主控板:

图 7-1 定稿作品的另一取景(作品材料中的"作品改进"照片):木质支架、主体与调节两支针筒、三通气阀与掌控板构成一台完整的桌面探究装置
作品最核心的创新,是把"数据采集—传输—显示—分析"这条链路整体自动化。可即时采集装置内的压强数据并上传至本地电脑中的 MQTT 物联网平台 SIoT1.3,进行即时在线查看分析、形成折线图,也可以用手机调用分析。相比"肉眼观察、手抄记录"的传统做法,学生不用再把精力花在抄数上,可以专注于观察规律本身。
| 序号 | 创新点 | 与传统的差别 |
|---|---|---|
| 1 | 压强数据即时采集并上传物联网平台,在线查看、形成折线图,手机端可调用分析 | 教材装置需要人手读数、人工记录、事后描点,本装置把这一步全部自动化 |
| 2 | 创造性地使用双针筒及三通气阀,可有效调节针筒内气体质量 | 既能研究等质量气体"压强随体积变化"的关系,也能对等体积气体"质量与气压变化"的关系做量化分析 |
| 3 | 装置气密性好,自动测量多次取平均值减小误差,相对误差小于 2.5% | 多次测量与取平均由程序自动完成,不需要人工重复操作 |
| 4 | 齿轮传动可一手压缩主体针筒活塞,另一手按 A 键测量数据,灵活轻松 | 解决了"一只手压装置、一只手推活塞、还需要第三只手记录"的困境 |
7.2 实测数据一:等质量气体的体积与压强关系
实验一用于定量研究等质量的气体,体积与气压的变化关系。操作流程是:打开气阀,把主体针筒体积固定在 50mL,将调节针筒推到 150mL 后关闭气阀,此时筒内气体体积为 200mL;上电启动掌控板后,每改变一次体积就按一次 A 键记录数据,把主体针筒内的 50mL 也计入,对应气体体积依次为 200、190、180、170、160、150mL。最终整理出的数据与拟合图如下:

图 7-2 实验一数据表与 P~1/V 拟合图(截取自作品材料中的 Excel 分析表):六组体积对应的压强依次为 1005、1055、1097、1151、1209、1280hPa,P×V 平均值约 196670,平均相对误差 1.51%,最大单点偏差 2.37%
| 序号 | 压强 P / hPa | 体积倒数 1/V / mL-1 | 体积 V / mL | P × V | 相对误差 |
|---|---|---|---|---|---|
| 1 | 1005 | 0.005 | 200 | 201000 | 2.20% |
| 2 | 1055 | 0.005263 | 190 | 200450 | 1.92% |
| 3 | 1097 | 0.005556 | 180 | 197460 | 0.40% |
| 4 | 1151 | 0.005882 | 170 | 195670 | 0.51% |
| 5 | 1209 | 0.00625 | 160 | 193440 | 1.64% |
| 6 | 1280 | 0.006667 | 150 | 192000 | 2.37% |
| 平均 | — | — | — | 196670 | 1.51% |
数据的走向很清楚:体积从 200mL 压到 150mL,压强从 1005hPa 升到 1280hPa;P×V 的乘积大致稳定在 196670 附近,六组数据的平均相对误差为 1.51%,最大单点偏差 2.37%——与作品创新点中"相对误差小于 2.5%"的说法一致。把体积倒数 1/V 作为横轴、压强 P 作为纵轴作散点图,六个点基本落在一条直线上,说明 P 与 1/V 成正比例关系,也就是 P 与 V 成反比,玻意耳定律得到验证。
7.3 实测数据二:等体积气体的质量与压强关系
实验二用于定性研究等体积的气体,质量与气压的关系。操作流程是:打开气阀,固定主体针筒至 100mL,将调节针筒推到底后关闭气阀,此时针筒内气体体积为 100mL;每拉开一段调节针筒,就会有一部分气体被"分走",主体针筒内的气体质量随之变小,此时按一次 A 键记录一次数据,分别对应拉至 10、20、30、40、50mL。整理后的数据如下:

图 7-3 实验二数据表与 P~1/V 拟合图(截取自作品材料中的 Excel 分析表):六组数据压强依次为 1006、922、856、801、745、701hPa,P×V 平均值约 103053,平均相对误差 1.43%
| 序号 | 压强 P / hPa | 体积倒数 1/V / mL-1 | 体积 V / mL | P × V | 相对误差 |
|---|---|---|---|---|---|
| 1 | 1006 | 0.01 | 100 | 100600 | 2.38% |
| 2 | 922 | 0.009090909 | 110 | 101420 | 1.58% |
| 3 | 856 | 0.008333333 | 120 | 102720 | 0.32% |
| 4 | 801 | 0.007692308 | 130 | 104130 | 1.04% |
| 5 | 745 | 0.007142857 | 140 | 104300 | 1.21% |
| 6 | 701 | 0.006666667 | 150 | 105150 | 2.03% |
| 平均 | — | — | — | 103053 | 1.43% |
这一组数据的读法需要说明清楚:表中的"体积"是主体针筒与调节针筒加起来的容积,主体针筒本身始终固定在 100mL。所以当"体积"从 100mL 变为 150mL 时,并不是主体针筒变大了,而是同样的气体被分散到了更大的空间里,主体针筒内的气体质量相应减少。数据表现出来的规律是:体积(即空间)越大,主体针筒内气体质量越小,压强也越低。把压强与"质量占比"(100mL ÷ 总容积)对照来看:质量占比 90.9% 时压强 922hPa、占比 83.3% 时压强 856hPa、占比 76.9% 时压强 801hPa,两者同样呈正比例关系——这正是等体积条件下"气压与质量成正比"的体现。作品方案中也写明,这一组实验是"定性研究"性质,并在编程时把结果换算成原质量的百分比来呈现。
7.4 与论文重新测量数据的对照
本作品后续整理成教学论文发表时,作者对同一装置又做了一轮重新测量。把两轮数据放在一起对照,能看出装置的可重复性:
| 气体体积 V / mL | 作品参赛数据 P / hPa | 论文重新测量 P / hPa | 差值 / hPa |
|---|---|---|---|
| 200 | 1005 | 996 | +9 |
| 190 | 1055 | 1045 | +10 |
| 180 | 1097 | 1097 | 0 |
| 170 | 1151 | 1151 | 0 |
| 160 | 1209 | 1213 | −4 |
| 150 | 1280 | 1290 | −10 |
六组数据中,180mL 与 170mL 两组的压强值完全一致,其余四组的差值在 4~10 hPa 之间,相对于 1000hPa 量级不到 1%。两轮测量还能互相印证同一个规律:气体质量越小,拟合直线的斜率越大。论文中记录的两组拟合结果为:实验一斜率 k = 5.68E−06 ± 3.75E−07,相对误差均值 1.01%;实验二斜率 k = 1.04E−05 ± 6.17E−07,相对误差均值 0.95%——实验二的斜率约为实验一的 1.8 倍,而实验二的气体质量更小,完全符合玻意耳定律的预期。
7.5 误差来源与我们的分析
论文中对误差做了明确分析:理论上压强 P 与体积倒数 1/V 的图象截距 b 应为 0,而拟合曲线仍有很小的截距值,误差主要是容纳气体的针筒并不是处于理想中的完全密闭状态,因而难以保证气体的质量在实验过程中始终恒定不变。结合我们自己的操作体验,误差还可以拆成四个来源:
| 误差来源 | 表现 | 影响程度 | 我们的应对 |
|---|---|---|---|
| 气密性不足 | 长时间操作后读数漂移,P×V 缓慢变化 | 主要误差来源 | 密封胶封固穿线孔与活塞;操作时动作迅速、减少停留时间 |
| 非恒温过程 | 手推活塞时手温传导给气体,压强偏高 | 次要但真实存在 | 推拉动作轻缓,避免长时间手持针筒 |
| 摩擦力与死体积 | 活塞与筒壁摩擦、软管内部存在额外容积 | 随装置而定 | 加装齿轮与螺杆使运动平稳;尽量缩短连通软管 |
| 读数与取整误差 | 体积靠读刻度,程序取整后保留整数 | 相对较小 | 每 10mL 一个测量点,程序连测三次取平均 |
八、项目应用拓展
8.1 可以直接用在哪里
| 场景 | 怎么用 | 为什么合适 |
|---|---|---|
| 高中物理课堂演示(鲁科版选择性必修第三册) | 教师边推活塞边投屏网页端曲线,全班同时看数据变化 | 解决传统装置"体积小、后排看不清"的老问题;单位用 hPa 与教材一致 |
| 学生分组探究实验 | 每组一台装置,按 A 键记录、按 B 键上传,课后导出数据自行拟合 | 把课时从"抄数据"省下来用于讨论规律;数据可导出到 Excel 做定量分析 |
| 没有 DIS 实验室的学校 | 用教学常用的开源硬件搭建替代方案 | 主控与传感器都是教学常用件,结构件用椴木板激光切割,投入成本低、易制作、效果好 |
| 科普基地与创客展示 | 观众自己推活塞、看曲线变化,直观感受"气压与体积成反比" | 交互性强,遥控屏/手机端都能看,适合互动展项 |
| 教师培训与案例分享 | 作为"开源硬件改进传统实验"的典型案例讲解 | 本作品已多次在市级教研与培训讲座中作为优秀学生作品分享 |
| 跨学科主题学习 | 物理(气体定律)+ 信息技术(编程与物联网)+ 通用技术(结构设计) | 一个作品同时覆盖三个学科的核心素养要求 |
8.2 与本装置相关的成果
这台装置的意义不只在课堂上,它还延伸出了三项可查证的成果:
| 成果类型 | 具体内容 | 时间 |
|---|---|---|
| 学生获奖 | 第二十四届福建省学生信息素养提升实践活动 高中(含中职)组 创意智造 二等奖(福建省电化教育馆) | 2023 年 5 月 |
| 实用新型专利 | 发明创造名称:一种可即时分析的玻意尔定理探究装置;申请号 2023214703558;申请人:宁德市第五中学;发明人含本作品作者;国家知识产权局发出《专利申请受理通知书》 | 2023 年 6 月 9 日 |
| 教学论文 | 《基于开源硬件的玻意耳定律验证实验》发表于《实验教学与仪器》2024 年第 3 期,DOI:10.19935/j.cnki.1004-2326.2024.03.000;论文详细记录了装置的制作工艺、程序实现与两轮实验数据 | 2024 年 3 月 |
论文还带着一项课题背景:宁德市第五届研训基地校 2023 年度专项课题"义教信息科技课标下的跨学科主题教学实践研究"(编号 NDJKYZ23-47)。也就是说,这台从学生手里做出来的装置,后来成了教师研究跨学科主题教学的一个真实载体。
8.3 与同类商用教具的对照
市面上也有成熟的商品化玻意耳定律实验器(例如产品编号 TP2025 的玻意耳定律实验器),这类产品"由支架、活塞架、针筒构成",用于研究一定质量的气体在温度不变时压强与体积的变化关系,说明书特别提示"活塞在 60mL 到 20mL 区间运动较好"。
| 对比维度 | 本作品 | 商品化实验器(以 TP2025 为例) |
|---|---|---|
| 数据记录方式 | 自动采集、物联网上传、网页/手机端看曲线 | 人工读数并记录,无数据上传功能 |
| 容器规格 | 200mL 主体针筒 + 200mL 调节针筒 | 以针筒为主,说明书提示活塞在 60~20mL 区间工作 |
| 测量方式 | 传感器内置筒内,直接测气压 | 配压强传感器胶管与针筒连接,需确保套紧不漏气 |
| 成本与可复制性 | 开源硬件 + 椴木板,学校可自行制作 | 成品采购,价格与交期依赖厂商 |
| 教学价值 | 学生全程参与设计、切割、编程、调试 | 即开即用,侧重实验本身而非制作过程 |
需要说明的是,商品化实验器在气密性一致性、结构可靠性上明显优于自制装置,本装置的价值主要在于低成本、可复制,以及学生能完整经历一次真实的工程实践,两者并不互相替代。
九、小结
9.1 制作历程
| 时间 | 节点 | 主要事情 |
|---|---|---|
| 2023 年 1 月 10 日 | 第一次讨论(2 人参加) | 确定作品定位为学生实验探究装置;决定使用掌控板作主控、气压传感器测气压、SIoT1.3 作 MQTT 服务器 |
| 2023 年 2 月 6 日 | 第二次讨论(3 人参加) | 确认继续使用 SIoT1.3 作 MQTT 服务器;决定用 WEB 网页端查看并导出数据,在 Excel 中生成可定量分析的关系图,并尝试定性分析等体积气体的质量与气压关系 |
| 2023 年 2 月 18 日 | 作品提交 | 签署诚信承诺书,提交作品方案、创意设计报告、程序与演示视频 |
| 2023 年 5 月 | 获得省级奖项 | 获第二十四届福建省学生信息素养提升实践活动高中组创意智造二等奖 |
| 2023 年 6 月 9 日 | 专利申请受理 | 国家知识产权局发出《专利申请受理通知书》,申请号 2023214703558 |
| 2024 年 3 月 | 论文发表 | 基于本装置的教学论文《基于开源硬件的玻意耳定律验证实验》刊于《实验教学与仪器》2024 年第 3 期 |
9.2 不足与改进方向
作品方案里学生自己写下的不足很实在:本设备气密性容易受工艺的影响,长时间操作数据稳定不足,因此操作动作要熟练、迅速。论文的误差分析也指向同一个问题——针筒并非完全密闭,难以保证气体质量在实验过程中始终不变。在这个基础上,我们自己反思还发现了三处可以做得更好的地方:
- 体积还需要人工读刻度:目前程序只把压强上传到物联网,体积靠操作者读针筒刻度后手工录入表格。下一步可以在活塞上增加位移测量(例如超声波测距或光电计数),让体积也自动上传,实现真正意义上的"全自动记录"。
- 恒温条件不够严格:论文中特别强调"保持实验恒温",而我们的装置目前没有温控措施,推拉活塞时的做功与手温都会带来温度波动。可以考虑加装半导体制冷片或简单的水浴恒温套,把温度稳定住。
- 单点测量仍显稀疏:实验每 10mL 记一个点,六到七个数据点能看出趋势,但拟合精度有限。改进后可以设定程序自动连续采集,把数据点加密到每 2mL 一个,让拟合直线的可信度更高。



