用Arduino与纸色谱复现HPLC核心原理:从朗伯-比尔定律到DIY光谱检测

发布时间:2026/6/4 16:42:06

用Arduino与纸色谱复现HPLC核心原理:从朗伯-比尔定律到DIY光谱检测 1. 项目概述用Arduino搭建一个“桌面级”色谱-光谱分析系统色谱和光谱这两个词听起来像是专业实验室里那些昂贵、精密的“大家伙”才玩得转的技术。确实一台标准的高效液相色谱HPLC动辄几十万紫外-可见UV-Vis光谱仪也不是小数目。但分析化学的核心原理其实非常直观色谱负责“分开”光谱负责“看清”。这个项目的核心想法就是用我们手边触手可及的材料——Arduino开发板、几张纸巾、几个食用色素、一个手电筒和一个光敏电阻——来亲手搭建一个系统完整地复现这两个核心过程从而在桌面上模拟出HPLC仪器的基本功能。我之所以对这个项目感兴趣是因为它完美地诠释了“从原理到实践”的工程思维。它不追求商业仪器的精度和自动化而是聚焦于让抽象的原理变得可视、可操作。对于学生、教育工作者或任何对分析化学和电子测量感兴趣的爱好者来说这是一个绝佳的动手学习项目。通过它你不仅能深刻理解色谱分离的动力学过程和朗伯-比尔定律光谱定量基础还能掌握如何用微控制器Arduino将物理信号光强转化为可处理的数字数据并完成一次完整的“样品制备-分离-检测-数据分析”流程。接下来我将拆解这个项目的每一个环节分享我在搭建和调试过程中的具体步骤、遇到的坑以及让结果更可靠的小技巧。2. 核心原理与设计思路拆解2.1 色谱分离为什么一张纸巾就能当色谱柱高效液相色谱HPLC的核心是色谱柱里面填充了微小的颗粒作为固定相流动相溶剂在高压下泵送流过样品中的不同组分因为与固定相和流动相的相互作用力不同从而以不同的速度被洗脱出来实现分离。我们这个实验用纸色谱来模拟这一过程。纸色谱可以看作一个超简易、低压版本的液相色谱。这里的固定相是纤维素纸巾的主要成分流动相是水或其它溶剂。当我们将含有混合色素的样品点在纸巾底部并将底部浸入水中时水会通过毛细作用向上迁移。样品中的不同色素分子由于极性、分子大小和与纤维素结合能力的差异在水流动相和纤维素固定相之间的分配系数不同。分配系数大的色素更亲水更易溶于流动相随水向上走得快迁移距离远分配系数小的色素更亲脂更易吸附在固定相则走得慢迁移距离近。于是原本混合在一起的点就在纸巾上“拉开”成了不同高度、不同颜色的条带。注意这里有一个关键细节原文中使用的是水作为流动相。对于食用色素这类水溶性染料水是合适的。但如果你想分离像叶绿素这样的脂溶性色素就需要更换流动相比如使用丙酮或石油醚与乙醇的混合溶剂。溶剂的选择直接决定了分离效果这是色谱实验设计的首要考量。2.2 光谱检测如何用光敏电阻和Arduino实现UV-Vis检测标准的UV-Vis光谱仪使用单色器产生特定波长的光穿过样品后用光电倍增管或CCD检测器测量透射光强度从而计算吸光度。我们的简易装置做了极大简化用宽谱白光手电筒作为光源用光敏电阻作为检测器。光敏电阻的阻值会随着光照强度的增强而降低。我们将其与一个固定电阻10kΩ串联构成一个分压电路连接到Arduino的模拟输入引脚如A0。当光穿过装有样品的比色管照射到光敏电阻上时光强会因样品对光的吸收而减弱导致光敏电阻阻值升高从而A0引脚读取到的分压电压值发生变化。Arduino的模拟输入会将0-5V的电压映射为0-1023的整数值。我们记录下空白溶剂纯异丙醇时的读数I0相当于透射光强度最大值再记录下样品溶液的读数I。根据朗伯-比尔定律吸光度 A -log₁₀(T) -log₁₀(I / I0)。这里T I / I0 就是透射比。通过这个公式我们就能将Arduino读取的原始电压值转化为具有明确物理意义的吸光度值从而实现定量或半定量分析。2.3 系统集成设计思路整个系统的设计思路是模块化的清晰地分为三个部分分离模块以纸色谱为核心完成混合样品的物理分离。检测模块以Arduino、光敏电阻、光源和样品池为核心搭建光电检测平台。控制与数据处理模块由Arduino程序固件和串口监视器上位机组成负责信号采集、初步计算和数据输出。这种设计的好处是每个模块都可以独立优化。例如你可以尝试不同的色谱材料咖啡滤纸、层析滤纸来改进分离也可以尝试不同颜色的LED作为准单色光源来提高检测的特异性而无需改动整个系统架构。3. 材料准备与工具选择要点3.1 色谱部分材料清单与替代方案固定相色谱载体首选厨房纸巾。便宜易得纤维素纯度尚可。但不同品牌纸巾的厚度、密度和添加剂如漂白剂、湿强剂会影响分离效果和背景洁净度。建议选用无印花、无香型的普通白色纸巾。升级方案咖啡滤纸。这是更好的选择。咖啡滤纸通常由更纯净的纤维素制成质地均匀背景干扰更小分离效果通常优于纸巾。成本略高但依然非常低廉。专业方向层析滤纸。如果追求更好的重现性和分离度可以购买专用的色谱滤纸其质地和流速经过标准化设计。流动相展开剂蒸馏水或去离子水。自来水中的矿物质可能干扰分离或与色素反应因此最好使用纯净水。对于复杂分离可尝试水-异丙醇混合液例如7:3比例通过调节极性来优化分离。样品食用色素红、黄、蓝。这是理想的安全样品颜色鲜明在水中溶解性好。可以制备二元混合物红黄、黄蓝、红蓝和三元混合物进行挑战。点样工具牙签或毛细管。牙签足够使用每次点样前需确保清洁或更换防止交叉污染。毛细管可从网上购买或从旧的温度计中获取能点上更小、更集中的样点有利于获得更清晰的色谱带。展开容器透明玻璃杯或烧杯。便于观察水面高度和展开过程。杯口直径应略大于卷成的纸筒直径。3.2 电子与检测部分材料清单核心控制器Arduino Uno R3。最通用、资料最丰富的型号。任何兼容板如Elegoo Uno同样可用。光探测器光敏电阻GL5528或类似。这是关键传感器。GL5528光谱响应范围宽适合可见光检测。注意不同型号的光敏电阻其电阻范围亮阻/暗阻和响应曲线不同会影响测量灵敏度和量程。配套电阻10kΩ 碳膜或金属膜电阻。与光敏电阻组成分压电路。其精度通常为±5%对绝对电压值有影响但对于测量相对变化吸光度差影响不大。光源高亮白光LED手电筒。要求光线集中、亮度稳定。手机手电筒也可用但可能因自动亮度调节功能引入误差。高级玩法是使用特定颜色的LED如红色630nm、绿色520nm、蓝色460nm这样可以模拟更接近单色光的情况使测量更符合朗伯-比尔定律的假设条件。样品池比色皿小型玻璃试管或1mL玻璃注射器去针头。关键要求是透光性好、直径均匀。塑料制品可能自身有颜色或荧光不建议使用。确保用于空白和所有样品的容器规格一致。遮光与固定结构样品架泡沫块如包装用EPS泡沫。易于切割打孔。在中心打一个垂直孔以固定样品管在两侧水平打两个对称的孔分别用于插入光敏电阻和透入光源。遮光罩卫生纸筒。完美尺寸能罩住整个样品架区域有效隔绝环境光干扰。内部可贴黑色电工胶布进一步减少反光。3.3 工具与软件硬件工具剪刀、尺子、铅笔、订书机、电工胶带/杜邦线、面包板。软件Arduino IDE用于编写和上传代码、串口绘图仪/监视器用于查看数据。4. 实验步骤详解与实操要点4.1 纸色谱分离操作实录制备色谱纸取一张纸巾剪成约4x6英寸10x15厘米的长方形。用铅笔在距离底边1厘米处轻轻画一条直线基线。铅笔芯石墨在色谱展开过程中不会被移动而圆珠笔或墨水笔的染料会溶解并干扰分离。在基线上每隔1.5厘米左右画一个“X”作为点样标记。配制与点样分别配制红黄、蓝黄、红蓝的混合色素水溶液各约1-2滴色素溶于5mL水。用牙签尖端分别蘸取纯色素和混合液轻轻点在对应的“X”中心。关键技巧是“少量多次”点一下吹干或晾干再在原处点第二次。这样能得到一个直径小、浓度集中的样点分离后条带更窄、更清晰。样点直径最好控制在2-3毫米内。展开将纸片卷成圆筒使两边几乎但不完全接触用订书机在顶部和底部固定形成一个中空圆柱体。向展开杯中加入约0.5厘米深的蒸馏水。将纸筒垂直放入确保基线高于水面约2-3毫米样点绝不能浸入水中。盖上保鲜膜或杯盖以减少溶剂挥发。观察与终止静置观察。水会通过毛细作用向上爬升带动色素上行。不同色素会逐渐分开。当溶剂前沿水湿润的最高线上行至距离纸顶端约1-2厘米时立即取出色谱纸。用铅笔马上标出溶剂前沿的位置然后平铺晾干。实操心得展开过程最好在无风、温度稳定的环境下进行。风速和温度变化会影响溶剂蒸发速率从而改变展开速度导致每次实验的重现性变差。可以用一个大的透明储物盒倒扣在杯子上创造一个简易的密闭展开室。4.2 样品制备与提取干燥后的色谱纸上你会看到分离出的不同颜色的条带。用剪刀小心地将每个色带包括纯色素的单一点分别剪下并剪成小碎片。将每个色带的碎片分别放入不同的小容器如小玻璃瓶或离心管盖中。向每个容器中加入足量的异丙醇刚好浸没纸片即可。异丙醇是一种有机溶剂能更有效地从纤维素上洗脱大多数有机染料且挥发性适中。覆盖保鲜膜静置30分钟以上期间可偶尔摇晃直至大部分颜色从纸片上溶出溶液呈现清晰的颜色。这样你就得到了一系列对应于不同成分的待测样品溶液。4.3 电子检测系统搭建与编程电路连接这是最需要细心的一步。按照以下顺序在面包板上搭建将光敏电阻的一条腿连接到Arduino的5V引脚。将光敏电阻的另一条腿连接到面包板的一个节点同时从这个节点连接一根线到Arduino的模拟输入引脚A0。将一个10kΩ电阻的一端连接到刚才的A0节点另一端连接到GND。这样就构成了一个经典的分压电路5V - 光敏电阻 - A0测量点- 10kΩ电阻 - GND。Arduino程序代码详解 代码的核心是持续读取A0引脚的模拟值并将其换算为电压和吸光度。以下是代码的核心逻辑与关键点// 定义引脚和变量 const int sensorPin A0; // 光敏电阻连接至A0 int sensorValue 0; // 存储读取的原始值 (0-1023) float voltage 0.0; // 计算出的电压值 (0-5V) float transmittance 0.0; // 透射比 T V_sample / V_blank float absorbance 0.0; // 吸光度 A -log10(T) float blankVoltage 0.0; // 存储空白溶剂的电压读数需预先测量 void setup() { Serial.begin(9600); // 初始化串口通信波特率9600 // 提示用户先测量空白 Serial.println(系统就绪。请先放入空白溶剂纯异丙醇稳定后发送任意字符以记录空白值...); while(!Serial.available()) { // 等待用户输入 } Serial.read(); // 清空输入缓冲区 blankVoltage readStableVoltage(); // 调用函数获取稳定的空白电压 Serial.print(空白电压已记录: ); Serial.println(blankVoltage, 4); // 打印4位小数 Serial.println(现在可以开始测量样品。); } void loop() { // 读取稳定的样品电压 float sampleVoltage readStableVoltage(); // 计算透射比和吸光度 transmittance sampleVoltage / blankVoltage; // 防止除零或无效值 if(transmittance 0) { absorbance -log10(transmittance); } else { absorbance NAN; // 无效值 } // 输出结果 Serial.print(电压: ); Serial.print(sampleVoltage, 4); Serial.print( V | 透射比 T: ); Serial.print(transmittance, 4); Serial.print( | 吸光度 A: ); if(isnan(absorbance)) { Serial.println(无效); } else { Serial.println(absorbance, 4); } delay(1000); // 每秒输出一次读数 } // 一个用于读取稳定电压值的函数 float readStableVoltage() { long sum 0; int readings 20; // 取20次读数平均 for(int i 0; i readings; i) { sum analogRead(sensorPin); delay(10); // 短暂延迟 } float averageValue sum / (float)readings; return averageValue * (5.0 / 1023.0); // 转换为电压 }代码关键点解析取平均值readStableVoltage()函数通过多次采样取平均能有效减少单次读数的随机波动噪声使数据更稳定。空白校正程序开始时要求先测量空白溶剂并将该电压值作为I0blankVoltage存储。后续所有样品的吸光度计算都基于此空白值这消除了系统固有背景如光源强度、电路基线的影响是光谱定量分析的标准做法。单位转换analogRead()返回0-1023的整数乘以(5.0 / 1023.0)将其转换为0-5V的实际电压值。错误处理加入了判断透射比是否大于零的逻辑防止数学错误。上传与测试将代码上传至Arduino。打开串口监视器波特率设为9600。按照提示先放入装有纯异丙醇的样品管盖好遮光罩待读数稳定后在输入框发送一个字符如回车。程序会记录空白电压。之后每次更换样品串口监视器就会持续输出该样品的电压、透射比和吸光度。4.4 仪器组装与光路优化制作样品架取一块厚约3-4厘米的泡沫板。在中心钻/挖一个直径略小于你的样品管如玻璃注射器外径的垂直孔使其能紧密插入。在垂直于中心孔的方向钻两个水平通孔确保它们与中心孔相交。这两个孔一个用于插入光敏电阻确保感光面朝向中心另一个用于让手电筒的光线射入。固定与遮光将组装好光敏电阻的泡沫板放在平稳处。把卫生纸筒罩在上面底部用胶带或重物稍加固定防止漏光。关键技巧在纸筒内壁贴上黑色哑光胶带或涂黑可以极大减少内部光反射造成的背景干扰提高信噪比。光源固定手电筒的位置必须固定。可以用橡皮筋或夹具将其对准样品架的进光孔。一旦开始测量在测量同一批样品期间绝对不要移动或开关手电筒否则光源强度变化会直接导致读数错误。5. 测量流程、数据处理与结果分析5.1 标准化测量步骤系统预热与空白测量打开手电筒和Arduino预热2-3分钟让光源和电子元件达到稳定状态。在样品管中加入纯异丙醇插入样品架。盖上遮光罩等待串口读数稳定通常10-15秒。在Arduino串口监视器中发送指令记录下此时的空白电压值程序会自动完成。样品测量用滴管或移液器将制备好的样品溶液如从红色条带提取的溶液加入另一个干净的、规格相同的样品管中。替换掉空白溶剂管。盖上遮光罩等待读数稳定。记录下稳定的吸光度值A_sample。每个样品测量前后如果条件允许最好用溶剂润洗样品管2-3次以防止交叉污染。重复与背景扣除对每个分离出的色带溶液重复步骤2。最终每个样品的报告吸光度应为A_corrected A_sample - A_blank。在我们的程序中由于直接使用了空白电压进行计算输出的吸光度A已经是扣除背景后的值。5.2 数据分析与解读假设我们成功分离了蓝色和黄色的混合色素并分别测量了纯蓝、纯黄以及混合物分离后的两个色带溶液。 你可能会得到类似下表的数据样品描述测量电压 (V)计算吸光度 (A)观察到的颜色空白 (异丙醇)3.8520.000 (参考)无色纯蓝色色素溶液2.1450.254深蓝纯黄色色素溶液3.0120.106亮黄混合物分离-色带12.2010.243蓝色混合物分离-色带22.9870.110黄色结果分析定性分析混合物分离后的两个色带其吸光度值与对应的纯色素溶液吸光度值非常接近。色带1的吸光度0.243接近纯蓝0.254色带20.110接近纯黄0.106。这有力地证明纸色谱成功地将蓝黄混合物分离成了两个独立的组分并且我们的检测系统能够区分它们。半定量分析根据朗伯-比尔定律在相同光程和波长下吸光度与浓度成正比。如果我们将纯色素溶液视为已知浓度的标准尽管我们不知道确切摩尔浓度但知道是“纯”的那么可以粗略估计分离后各组分在混合物中的相对含量。例如色带1蓝的吸光度略低于纯蓝可能意味着在原始混合物中蓝色素的浓度略低于我们点样的纯蓝样品浓度。趋势讨论通常颜色越深吸光度越高的样品其溶液浓度可能越高。你可以引导学生思考为什么分离后的色带吸光度可能低于纯样品原因可能包括分离不完全导致损失、提取效率不是100%、样品在展开过程中有所扩散等。5.3 实验扩展与探究方向探究不同展开剂的影响这是色谱实验的核心探究课题。尝试用不同比例的水-异丙醇混合液如9:1 7:3 5:5作为展开剂。你会发现随着异丙醇比例增加溶剂极性降低不同色素的迁移速度Rf值会发生变化分离效果两个色带之间的距离也可能改善或变差。记录每种溶剂下的Rf值色素迁移距离/溶剂前沿迁移距离并分析规律。升级光源将白光手电筒替换为特定颜色的LED如红色LED。由于食用色素主要吸收其互补色蓝色色素吸收橙红光黄色色素吸收蓝紫光使用红色LED时蓝色色素的吸光度会显著高于黄色色素这使得检测的选择性更强更能模拟真实光谱仪选择特定波长进行检测的原理。探究真实样品尝试分离树叶的色素提取液用丙酮研磨绿叶提取。你会观察到叶绿素a、叶绿素b和类胡萝卜素等不同色素被分离成多条色带这是一个更接近真实科研的挑战。此时流动相可能需要换成石油醚-丙酮混合液等非极性或中等极性溶剂。构建校准曲线配制一系列不同稀释浓度的单一色素如蓝色溶液测量其吸光度。以浓度为横坐标吸光度为纵坐标作图理论上应得到一条通过原点的直线。这可以验证朗伯-比尔定律并让实验进入定量分析阶段。6. 常见问题排查与调试技巧在搭建和运行这个系统的过程中你几乎一定会遇到一些问题。下面是我在实际操作中总结的“排坑指南”问题现象可能原因排查与解决步骤串口读数无变化或始终为01. 电路连接错误或接触不良。2. 光敏电阻或电阻损坏。3. 代码中引脚定义错误。1.断电检查用万用表通断档仔细检查5V-光敏电阻-A0-10kΩ电阻-GND这条通路是否连通。2.传感器测试用手电筒直接照射光敏电阻同时用万用表测量其两端电阻应看到阻值显著下降从几百kΩ到几kΩ。若无变化则传感器可能损坏。3.代码验证上传最简单的analogRead示例程序看A0引脚读数是否随光照变化。读数波动非常大噪声大1. 环境光干扰。2. 光源手电筒亮度不稳定或闪烁。3. 电路接触不良。4. 电源噪声。1.加强遮光确保遮光罩严密在暗室或夜间进行实验效果最佳。2.稳定光源使用电池电量充足的优质手电筒避免使用可能带有PWM调光的廉价LED灯。可尝试用直流稳压电源给一个LED供电作为光源。3.软件滤波在代码中增加更强大的滤波算法如中值滤波或滑动平均滤波而不仅仅是简单平均。4.电源隔离为Arduino使用独立的电池组供电而不是从电脑USB取电以减少电脑端引入的噪声。吸光度计算为负值或异常大1. 空白值测量不准确或在测量样品时光源强度发生了变化。2. 样品池不干净或有气泡。3. 样品浓度过高透射光太弱超出检测线性范围。1.固定光源确保从空白测量到所有样品测量完毕光源位置和亮度绝对不变。测量中途不要碰触手电筒。2.规范操作使用匹配、洁净的样品池。加入溶液后轻轻弹动管壁驱除气泡。3.稀释样品如果样品颜色太深吸光度可能超过1.0甚至2.0此时检测器可能处于非线性区或噪声占主导。将样品用溶剂适当稀释后重新测量。色谱分离效果差色带拖尾、重叠1. 点样量过多导致样品过载。2. 样点直径太大。3. 展开剂选择不当。4. 色谱纸不干净或质地不均。1.“少量多次”点样这是改善分离最关键的一步。务必让前一次点样完全干燥后再点下一次。2.更换展开剂尝试调整水与异丙醇的比例。对于某些色素纯水可能不是最佳选择。3.升级材料换用咖啡滤纸或层析滤纸效果通常有立竿见影的提升。不同样品间测量结果重复性差1. 样品池规格不一致。2. 每次放置样品池的角度、深度不一致。3. 测量时间不足读数未稳定。1.统一容器尽可能使用同一批号、规格一致的玻璃试管或注射器。2.标准化操作在样品架上做一个标记确保每次插入样品管的深度和旋转角度相同。3.延长稳定时间更换样品后等待至少20-30秒再记录数据确保系统达到热平衡和扩散平衡。这个项目最迷人的地方在于它用一个成本极低的系统清晰地串联起了分析化学、电子工程和数据处理的基本逻辑。你遇到的每一个问题无论是色谱分离不佳还是电信号噪声大都是一个绝佳的学习机会迫使你去思考背后的原理并动手解决。当看到自己分离出的色带在自制的检测器上产生出有意义的吸光度数据时那种连接了理论知识与物理世界的成就感是任何教科书都无法给予的。我建议你在成功完成基础实验后一定要尝试一两个扩展探究比如更换溶剂或测试植物色素那时你会对这个简易系统所蕴含的潜力有更深的认识。

相关新闻