Open Colorimeter 开放式智能光度分析仪|低成本精准定量检测平台

基于 ESP32-S3 与 TSL25911 的开源光度分析平台,支持透射率、吸光度及标准曲线定量检测

戴子淇

参数信息

光源中心波长
630 nm
比色皿光程
10 mm
机械重复定位 CV
<2 %
标准曲线浓度点
6 个
单次结果平均采样
10 次

复现文档

清点 编号和检查材料

第一阶段开始前完成材料验收。\

\

1. 将全部器件放在桌面,并按 BOM 编号贴标签。\

2. 选择一颗完整的红色 LED 作为 LED-01,其余依次编号 LED-B01~LED-B19。注意:当前采购链接只标“红色 LED”,未明确证明峰值为 630 nm,正式实验前应确认光谱参数。\

3. 选择一只无明显划痕的 10 mm PS 比色皿作为 CUV-01,后续固定用于 Blank;其余编号 CUV-02~CUV-20。\

4. 确认 CTRL-01 为 ESP32-S3 N16R8,SEN-01 为 TSL25911,USB-01 支持数据传输。\

5. 将 RES-220、RES-150、RES-082 分开放置。\

6. 拍摄全部材料照片,文件名:OC-CN-V1-001\_材料验收\_001.jpg。\

\

完成标准:器件型号、数量和编号均与 BOM 一致后再进入下一步。

测试 ESP32-S3

仅连接:电脑 → USB-01 → CTRL-01。\

\

1. 安装 Arduino IDE 2。\

2. Boards Manager 搜索并安装“esp32 by Espressif Systems”。\

3. Board 选择“ESP32S3 Dev Module”,插入 CTRL-01 并选择新出现的 Port。\

4. 上传简单串口测试程序,将 Serial Monitor 设为 115200。\

5. 确认持续看到:\

OC-CN-V1-001\

CTRL-01 START SUCCESS\

CTRL-01 running...\

\

若上传卡在 Connecting,按住 BOOT 后重新 Upload,开始 Writing 后松开。\

\

完成标准:记录“CTRL-01 functional verification: PASS”。

连接 TSL25911

![image1.png](https://orecord-files.oss-cn-zhangjiakou.aliyuncs.com/sbp/projects/f42b6d62-89d4-4b5d-9f9b-6ff109f21dea/files/image/dd7c907b7bbe487493ea5e6809676b09.png)操作前先拔掉 USB。\

\

按以下方式接线:\

VCC → 3V3\

GND → GND\

SDA → GPIO8\

SCL → GPIO9\

INT → 不接\

\

重新插入 USB,上传 I²C Scanner。Serial Monitor 必须显示“I2C device found at address 0x29”,连续扫描数次均能找到 0x29 才算通过。

测试 TSL25911 光强响应

在 Arduino Library Manager 安装 Adafruit TSL2591 Library 和 Adafruit Unified Sensor。\

\

初始参数统一为:\

Gain = MED\

Integration Time = 500 ms\

\

程序持续输出 FULL、IR、VISIBLE,后续正式比色以 FULL 为主测量值。依次测试正常室内、遮住 SEN-01、用灯照射 SEN-01。\

\

完成标准:\

- 遮挡时 FULL 明显下降;\

- 光照时 FULL 明显增加;\

- 普通工作状态不长期为 65535。\

\

若持续 65535,将 Gain 改为 LOW。通过后记录“SEN-01 optical response verification: PASS”。

点亮 LED-01

![image2.png](https://orecord-files.oss-cn-zhangjiakou.aliyuncs.com/sbp/projects/f42b6d62-89d4-4b5d-9f9b-6ff109f21dea/files/image/1639d485a708405bb101286e1a9e0085.png)先拔掉 USB,在 BRD-01 上按以下顺序连接:\

CTRL-01 3V3 → RES-220 → LED-01 阳极\

LED-01 阴极 → CTRL-01 GND\

\

第一轮必须从 RES-220 开始,禁止将 LED 直接接到 3V3。重新插入 USB,连续运行 5 min。\

\

完成标准:LED 正常发红光、不闪烁、不异常发热。记录“LED-01 light-source functional verification: PASS”。

LED 与传感器联合测试

保持 Gain = MED、Integration Time = 500 ms、RES-220。LED 正对 SEN-01,初始距离约 3–5 cm。\

\

1. 记录 LED OFF 时的 FULL。\

2. 点亮 LED,记录 LED ON 时的 FULL。\

3. 要求 FULL_ON 远大于 FULL_OFF,且 FULL_ON 不长期等于 65535。\

\

过亮时先增大距离,仍饱和再将 Gain 改为 LOW。过暗时先重新对准,再依次试 RES-150、RES-082。每次更换电阻前必须断电。本步骤只寻找可用范围,不锁定最终工作点。

设计 HOL-01 比色皿支架

使用游标卡尺实测 LED-01 外径、CUV-01 外宽与外厚、透明窗口中心高度、SEN-01 PCB 长宽、TSL25911 感光芯片位置及安装孔位置。\

\

按 LED-01 → CUV-01 → SEN-01 建立直线光路,三者中心必须位于同一光轴。Holder 使用黑色不透光 SLA,同时设计 CAP-01 遮光盖。\

\

不要照抄网上尺寸,必须按照手中实物尺寸建模。

打印并安装光学结构

打印 HOL-01 和 CAP-01,依次安装 LED-01、SEN-01、CUV-01、CAP-01。\

\

安装要求:\\

- CUV 可顺利插拔且不明显晃动;\\

- 插入方向固定;\\

- LED 中心对准比色皿;\\

- SEN 感光芯片正对光路;\\

- CAP 可完全盖合。\

\

将同一只 CUV-01 插入、测量、取出后重新插入,重复至少 5 次,计算 FULL 的变异系数 CV。\

\

第一版目标:CV &lt; 2%。

![image3.png](https://orecord-files.oss-cn-zhangjiakou.aliyuncs.com/sbp/projects/f42b6d62-89d4-4b5d-9f9b-6ff109f21dea/files/image/a0eafbb1f6ec4daba4df11e7527c60d7.png)

测量 Dark Blank 和 Sample

![image4.png](https://orecord-files.oss-cn-zhangjiakou.aliyuncs.com/sbp/projects/f42b6d62-89d4-4b5d-9f9b-6ff109f21dea/files/image/83da1af93fe24836a967e22ae7b772bb.png)从本步骤起固定 LED、电阻、Gain、Integration Time、Holder、SEN 位置、CUV 插入方向和 CAP 状态。\

\

Dark:关闭 LED,连续读取 FULL 10 次,均值得 I_dark。\

Blank:CUV-01 加入 SOL-01 DI 水,擦干透明面,固定方向插入并盖好 CAP,连续读取 10 次,均值得 I_blank。\

Sample:CUV-02 加入浅蓝色 DYE-01 溶液,同样测量 10 次,均值得 I_sample。\

\

计算:\

T = (I_sample - I_dark) / (I_blank - I_dark)\

A = -log10(T)\

\

Excel 可写:\

=(B4-B2)/(B3-B2)\

=-LOG10(B5)\

\

正常条件:I_dark &lt; I_sample &lt; I_blank。通过后记录“OC-CN-V1-001 basic colorimetric measurement: PASS”。

建立 Beer Lambert 标准曲线

使用同一份 Brilliant Blue FCF / E133 Stock 配制 10 mL 标准液:\

STD-00:0 mL Stock + 10 mL DI 水,0%\

STD-01:1 + 9 mL,10%\

STD-02:2 + 8 mL,20%\

STD-03:3 + 7 mL,30%\

STD-04:4 + 6 mL,40%\

STD-05:5 + 5 mL,50%\

\

按浓度由低到高依次测量。每个浓度做 3 个 replicate;每个 replicate 连续读取 10 次 FULL,求平均并计算 A。记录 A1、A2、A3、Mean A 和 SD。\

\

以 Relative concentration 为 X 轴、Absorbance A 为 Y 轴进行线性拟合 A = kc + b,保存方程、R²、原始数据和曲线图。\

\

完成标准:A 随浓度整体增加、数据基本线性、高浓度点未接近 Dark。记录“OC-CN-V1-001 Beer–Lambert response verification: PASS”。

改用恒流驱动

第二阶段开始。断电后拆掉 RES-220、RES-150、RES-082,安装 DRV-01,将 LED 恒流调至约 16 mA。\

\

重新上电,连续读取 Blank 约 1–2 min,确认 LED 不闪烁、无异常发热、FULL 不饱和且光强稳定。\

\

更换驱动后必须重新执行 Dark → Blank → Sample;旧的 Dark 和 Blank 不再使用。

安装 LCD-01

LCD-01:ST7735S 1.8 英寸、128×160、SPI。\

\

Arduino IDE 安装 Adafruit GFX Library 和 Adafruit ST7735 and ST7789 Library。建议固定接线:\

VCC → 3V3\

GND → GND\

SCK → GPIO12\

SDA/MOSI → GPIO11\

CS → GPIO10\

DC → GPIO14\

RST → GPIO13\

\

先上传 LCD Test。屏幕应显示:\

OC-CN-V1-001\

Open Colorimeter\

System Ready\

\

说明:上述 GPIO 是本实施版的统一建议,不是原始 294 页文档已确定的引脚;后续程序和 PCB 应保持同一套配置。

安装并测试五个按键

![image5.png](https://orecord-files.oss-cn-zhangjiakou.aliyuncs.com/sbp/projects/f42b6d62-89d4-4b5d-9f9b-6ff109f21dea/files/image/4ca51bc949cf422787472ed0df50a55c.png)统一建议:\

BTN-01 Blank → GPIO4\

BTN-02 Measure → GPIO5\

BTN-03 Up → GPIO6\

BTN-04 Down → GPIO7\

BTN-05 Menu/Confirm → GPIO15\

\

程序使用 INPUT_PULLUP,每个按键连接为 GPIO → 按键 → GND。逐个按下测试,Serial Monitor 应分别显示 BLANK、MEASURE、UP、DOWN、MENU。\

\

五个按键全部正常后再整合程序。

上传第二阶段完整程序

完整程序保留三个主要页面:\

\

Ready:显示 Open Colorimeter、630 nm、Ready。\

Blank:按 BTN-01,连续读取 10 次并取平均,保存为 I_blank,显示 Blank OK 和 I0。\

Measure:放入 Sample 后按 BTN-02,连续读取 10 次并计算 I、T、A。\

\

BTN-03、BTN-04 用于切换页面或参数,BTN-05 用于确认。Dark 建议在开机初始化或菜单中的 Dark Calibration 单独执行。\

\

统一计算:\

T = (I - I_dark) / (I_blank - I_dark)\

A = -log10(T)

装入 ENC-01 外壳

![image6.png](https://orecord-files.oss-cn-zhangjiakou.aliyuncs.com/sbp/projects/f42b6d62-89d4-4b5d-9f9b-6ff109f21dea/files/image/61c47a8f465d4dc691efec53baf802de.png)ENC-01 至少固定 CTRL-01、LCD-01、BTN-01~BTN-05、DRV-01、HOL-01 和 CAP-01。外壳保持黑色、不透光。\

\

正面保留 LCD、Blank/Measure、Up/Down、Menu/Confirm 和 Cuvette Slot。USB Type-C 接口必须露在外壳外侧,用于供电、上传程序和调试。\

\

BAT-01 为可选配置;若加入电池,应分别完成 USB 和电池供电状态下的完整测试。

完整仪器最终验收

整机编号:OC-CN-V1-001。关机重启后按真实使用顺序测试:\

\

1. 开机,LCD 显示 Open Colorimeter / System Ready。\

2. Dark Calibration:遮光或关闭 LED,保存 I_dark。\

3. Blank:放入 CUV-01 + DI 水,按 Blank,显示 Blank OK。\

4. Sample:换入样品,按 Measure,直接得到 T 和 A。\

5. 同一样品连续插拔测量 5 次,结果不得明显跳变。\

6. 复测 STD-00、STD-02、STD-04,必须满足 A_STD00 &lt; A_STD02 &lt; A_STD04。\

7. 保存最终记录:CTRL、Sensor、Light source、LED driver、Cuvette path、Display,以及 Dark、Blank、Sample、Beer–Lambert、Standalone UI 和 Final result 的 PASS/FAIL。\

\

全部通过后记录“OC-CN-V1-001 复现完成”。