基于 ESP32-S3 与 TSL25911 的开源光度分析平台,支持透射率、吸光度及标准曲线定量检测
戴子淇
第一阶段开始前完成材料验收。\
\
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 一致后再进入下一步。
仅连接:电脑 → 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”。
操作前先拔掉 USB。\
\
按以下方式接线:\
VCC → 3V3\
GND → GND\
SDA → GPIO8\
SCL → GPIO9\
INT → 不接\
\
重新插入 USB,上传 I²C Scanner。Serial Monitor 必须显示“I2C device found at address 0x29”,连续扫描数次均能找到 0x29 才算通过。
在 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”。
先拔掉 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”。
保持 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。每次更换电阻前必须断电。本步骤只寻找可用范围,不锁定最终工作点。
使用游标卡尺实测 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 < 2%。

从本步骤起固定 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 < I_sample < I_blank。通过后记录“OC-CN-V1-001 basic colorimetric measurement: PASS”。
使用同一份 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: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 应保持同一套配置。
统一建议:\
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 至少固定 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 < A_STD02 < 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 复现完成”。