在科研实验中,光谱分析仪的使用之所以非常广泛,是因为它作为一种强大的分析工具,能够通过物质与光相互作用产生的独特“指纹”光谱,实现对物质成分、化学结构、物理状态及动态过程的精准、快速且往往是无损的探测。
其应用横跨众多学科领域:在材料科学中,它用于鉴定元素成分、分析分子结构(如拉曼光谱)和研究光学性质;在化学与催化领域,时间分辨光谱是揭示反应机理的关键;在生命科学与药学中,从蛋白质结构分析(圆二色谱)到药物代谢研究(质谱),都离不开光谱技术;同时,它也是环境监测中检测污染物、天体物理学中分析恒星成分以及地球科学中进行地质定年的核心手段。
总而言之,光谱分析仪凭借其提供信息的丰富性和应用的普适性,已成为从原子分子尺度到宇宙天体尺度不可或缺的“科研眼睛”,极大地推动了科学发现的边界。
然而实验室所用光谱分析仪价格昂贵,本期我们介绍一款基于AS7341传感器开发的低成本、便携式光谱分析模块。它将专业的光谱分析能力从造价数十万的实验室设备,成功“浓缩”进了一块硬币大小的电路板中,使其价格降至普通开发者和爱好者也能承受的范围。这款模块通过其内置的多个光学通道,能够精确感知不同波长的光线,从而实现诸如环境光色温自适应调节、物体颜色精准识别、甚至液体浊度或植物叶片叶绿素含量的初步分析等功能。
1、AS7341的工作流程
AS7341是一款非常先进的11通道多光谱数字传感器,它将专业的光谱分析能力高度集成在一颗微型芯片上拥有8个主要的光谱通道(F1-F8),其中心波长覆盖了可见光区的415nm(紫色)到680nm(红色)。此外,它还包含1个清除通道(CLEAR) 用于测量总光强,1个近红外通道(NIR),以及1个闪烁检测通道。
参数:增益AS7341的工作始于精细的软硬件配置。主控制器通过I2C总线与传感器建立通信后,首要任务是根据测量对象的光强环境,设定两个关键参数:增益 与积分时间。
增益决定了信号放大的倍数,而积分时间控制了每个通道感光的时间长短,二者共同决定了测量的灵敏度和动态范围,是确保数据准确不饱和的基础。紧接着,需配置核心的SMUX,将传感器内部多达11个的光谱通道(如F1-F8、CLEAR、NIR等)按需分配到有限的ADC资源上,为有序测量铺平道路。
第二段:核心测量与数据采集与积分时间。
增益决定了信号放大的倍数,而积分时间控制了每个通道感光的时间长短,二者共同决定了测量的灵敏度和动态范围,是确保数据准确不饱和的基础。紧接着,需配置核心的SMUX(开关矩阵),将传感器内部多达11个的光谱通道(如F1-F8、CLEAR、NIR等)按需分配到有限的ADC资源上,为有序测量铺平道路。
配置完成后,主控制器发出启动测量指令。AS7341随即进入自动化测量序列:SMUX像一位高效的交通指挥,按照预设顺序,依次将各个光谱通道的光电二极管与中央的模数转换器连接。光信号被转换为电信号,再经过放大和数字化,最终形成每个通道的原始计数值。在此过程中,主控制器通过查询状态寄存器或等待中断信号,同步监测测量是否完成,确保数据就绪后才进行下一步。
当测量周期结束,原始数据便安静地存储在各自的数据寄存器中。主控制器通过I2C总线依次读取这些寄存器,获取一组代表不同波长光强度的原始数据阵列。这些数据通常需要经过简单的公式计算,以消除增益和积分时间的影响,将其转化为标准化的光强度值。最终,这些处理后的光谱数据被送入应用层算法,实现从基础的色彩识别、光源分析到复杂的物质鉴别等多种智能感知功能,完成从物理信号到智能信息的完整转化。
2、ESP32中使用AS7341
在Arduino IDE中安装Adafruit AS7341库,将AS7341的SDA和SCL分别接在D22,D21默认I2C引脚,接着对AS7341进行初始化工作:
if (!as7341.begin()) {Serial.println("无法找到AS7341传感器");while (1) delay(10);}as7341.setATIME(100);as7341.setASTEP(999);as7341.setGain(AS7341_GAIN_256X);
设置积分时间为100,积分步长999,增益256倍。
if (!as7341.readAllChannels(channels)) {Serial.println("读取失败!");}// 提取可见光通道(8个通道)uint16_t visibleChannels[8];getVisibleChannels(channels, visibleChannels);Serial.print("A:");for (int i = 0; i < 8; i++) {Serial.print(visibleChannels[i]);if (i < 7) Serial.print(",");}voidgetVisibleChannels(uint16_t channels[], uint16_t visibleChannels[8]){visibleChannels[0] = channels[AS7341_CHANNEL_415nm_F1]; // 415nm (紫)visibleChannels[1] = channels[AS7341_CHANNEL_445nm_F2]; // 445nm (蓝)visibleChannels[2] = channels[AS7341_CHANNEL_480nm_F3]; // 480nm (青)visibleChannels[3] = channels[AS7341_CHANNEL_515nm_F4]; // 515nm (绿)visibleChannels[4] = channels[AS7341_CHANNEL_555nm_F5]; // 555nm (黄绿)visibleChannels[5] = channels[AS7341_CHANNEL_590nm_F6]; // 590nm (黄)visibleChannels[6] = channels[AS7341_CHANNEL_630nm_F7]; // 630nm (橙)visibleChannels[7] = channels[AS7341_CHANNEL_680nm_F8]; // 680nm (红)}
获取AS7341的八个可见光谱通道并打印输出,利用串口示波器查看离散光谱数据。
3、测试效果
注:测试图片均用手机,会收到屏幕影响,因此不是非常标准的测量。
对着环境直接照射会发现总体的数值都比较大,并且中间波长的数值也很大,环境光谱集中在黄绿光,因为人眼对这个波段555nm波长正好处于人眼在明亮环境下最敏感的绿光区域。为了用最低的能耗实现最高的视觉亮度,绝大多数显示设备和光源都会在555nm附近分配最强的能量。
纯红色手机屏幕对应的橙红光谱最高,完全符合测试图片。
绿色背景结果
蓝色背景结果
2630