手持式可见光光谱分析仪的设计*

2019-11-27 05:00徐志江邵祥兵卢为党华惊宇
传感技术学报 2019年11期
关键词:光源绘制客户端

徐志江,张 俊,邵祥兵,卢为党,4,华惊宇,贡 毅

(1.浙江机电职业技术学院电气电子技术系,杭州 310053;2.浙江工业大学信息工程学院,杭州 310023;3.浙江工商大学信息与电子工程学院,杭州 310018;4.南方科技大学深圳市物联网智能信息处理工程实验室 广东 深圳 518055)

随着社会的不断发展,人们越发关注蓝光危害问题,照明灯光源安全性受到重视[1]。因为照明灯在生产过程中不合格或者长时间使用照明灯老化都会导致蓝光分量过多,这会对人体产生一定危害,即所谓的蓝光危害,因此对照明灯等可见光光源进行光谱质量检测分析非常有必要。

光谱仪器是应用光学技术、电子技术、图像技术、传感器技术以及计算机技术对物质成分、结构、特性等进行测量和分析的基本设备,也是研究光谱学的重要装置。光谱仪器在许多领域越来越多的发挥着重要作用。在测量应用中可以量测发光体光谱、物质对光谱吸收度和穿透度、色彩等,化学分析应用中可以进行物质分析、成分分析、定性分析[2]等。另外,光谱仪还可以应用于航天遥测、军事领域中。传统上大多数光谱设备用于工业或实验室应用是昂贵的、笨重的[3],由于这些限制,许多光谱研究仅限于实验室方面。随着光学、微电子技术等的发展,出现了很多微型光谱仪[4],大大提高光谱设备的便携性、实用性。

此外,很多光谱设备将数据采集模块和数据分析显示模块集成在一起,或者通过USB接口连接[5],这会降低设备的实用性、可拓展性。也有基于WiFi无线通信的光谱设备[6],但往往只利用WiFi模块进行数据传输,需要额外微控制器进行数据采集控制以及数据传输控制,而实际上WiFi模块内嵌了性能强悍的微控制器,可以不用再添加额外的微处理器。

本文提出并设计了一种手持式可见光光谱分析仪。分析仪采取了基于ESP32 WiFi模块[7-8]的光谱数据采集设备与基于安卓智能手机上的数据分析与显示的App应用程序相分离的模式[9-10],两者之间通过WiFi进行信令和数据的通信交互。光谱数据采集设备以乐鑫公司的ESP32作为控制核心,经过合适的积分时间之后,驱动光谱传感器C12666MA[11]模拟量数据[3];然后再配合模数转换(ADC)芯片把模拟量转换成数字量。整个时序驱动数据采集模块是放置在ESP32的MicroPython固件[12]中,全部用C语言来编写实现,避免了Python执行效率偏低无法保证时序的缺点。利用ESP32模块的WiFi功能产生一个无线AP[13],通过TCP协议[14-15]接收App应用程序连接,解析按照双方既定的消息格式发送的命令;根据相应命令执行和回传结果,实现了光谱数据的采集和数据传输。光谱数据分析与显示App客户端是基于Android平台的App软件,利用TCP协议发送数据请求命令,获取光谱分布数据[14]、绘制可见光光谱图、显示光谱分布数据、计算并显示光谱参数与绘制色品图。

如果光谱传感器的积分时间[16-18]不充分或者过饱和,从而导致采集到的光谱数据无效,后续参数估计不可靠的问题。基于此,提出了一种积分时间自适应控制算法,在被测光的强度是未知的情况下,仍然能够快速、自适应地选择合适的积分时间。此外,App在绘制相关色品图时,数据计算量过大导致出现界面延迟加载卡顿现象[19],故而采用双缓冲机制解决此问题。

本文的组织如下:第1节介绍了分析仪的整个系统设计原理;第2节详细阐述了软件系统,包括基于状态机的光谱数据采集的驱动、快速合理的自适应积分时间控制算法、色度学参数的计算方法和双缓冲机制原理实现等;第3节是测试和结果分析;最后是结论。

1 系统设计原理

所设计的系统原理框图如图1所示。系统分为光谱数据采集设备和基于Android手机的App客户端软件。采集设备集成了2000 mAh锂电池、充放电与升压一体化模块、WiFi传输和控制为一体的乐鑫ESP32模块、光谱传感器C12666MA以及16位模数转换芯片ADS8326[20]。

图1 系统原理框图

光谱数据采集设备的核心器件是滨松C12666MA这颗图像传感模块,它基于滨松MEMS和图像传感技术设计的。图像传感器是基于CCD(Charge Coupled Device)感应原理工作,内置256个感光像素,具有340 nm~780 nm的光谱响应范围,最大光谱分辨率为15 nm。

充放电与升压一体模块既可以通过外接MicroUSB口为锂电池充电,又可以把锂电池放电的输出电压升高到5 V,为光谱传感器和模数转换芯片供电,同时通过低压降电源芯片LDO为ESP32模块提供3.3 V电源。系统在锂电池满充满、ESP32全速运行的情况下,稳定工作时长至少4 h。

微控制芯片采用了ESP-WROOM-32(ESP32)WiFi模块,是乐鑫最新发布的新一代WiFi和蓝牙双模双核无线通信芯片,内置了一颗高性能Tensilica LX6双核处理器以及32 MB大小Flash空间,拥有额外拓展IO口,支持超低功耗待机,是移动设备、可穿戴电子产品和物联网应用的最佳选择。EPS32的协议栈只占用一半的系统资源,对于数据采集功能,系统资源够用。因此,本系统采用ESP32模块来驱动光谱传感器C12666MA和模数转换芯片ADS8326。尽管ESP32内部也集成了12位的ADC,但其输入的电压范围和转换精度不满足要求,本系统采用了16位的ADS8326作为模数转换芯片。

基于Android手机的光谱分析和参数显示App客户端软件,主要是把采集到的光谱分布数据,根据光源色度学标准计算、分析、显示参数,绘制相关色品图,显示内容丰富。

2 系统软件设计

系统软件设计包含光谱分布数据采集与传输软件和手机App软件。其中光谱分布数据采集与传输包括了光谱传感器和ADC的驱动程序,以及通过WiFi的、基于TCP协议的信令和数据交互;手机App软件设计包括自适应积分时间算法、光源色度学参数计算和手机App功能展示等功能;针对加载卡顿现象,提出了采用双缓冲机制解决此问题。

2.1 光谱分布数据采集的驱动

光谱分布数据采集模块是驱动光谱传感器与ADC模块,以获取光谱分布数据。C12666MA时序图如图2所示,由ESP32控制IO管脚的逻辑电平,生成完全符合图2的时序状态,实现了每个像素点的积分、在CLK时钟信号的驱动下移动出模拟量Video、经过ADC转换为数字量的驱动功能。

图2 C12666MA时序图[11]

光谱分布数据采集驱动采用定时器加状态机来协同控制光谱传感器与ADC芯片的时序,以完成数据采集,状态图如图3所示。在就绪状态,初始化所有控制光谱传感器和ADC模块的管脚,为积分和转换做好准备;启动积分,使得光谱传感器进入积分状态,ST管脚上2次相邻下降沿的时间差为像素的积分时间;积分时间到,每个像素的模拟信号Video在CLK时钟的驱动下依次串行移出,然后经过ADC转换成数字量。根据C12666MA的时序图,每4个CLK时钟,串行移出一个像素点的模拟值,只有当模拟量有效时,开启ADC转换,并把转换后的数字量保存到数组中。

图3 光谱分布数据采集状态图

时序驱动主要利用ESP32模块定时器中断完成时序模拟、传感器状态切换,结合状态机在定时器中断服务函数里完成数据采集。首次进入定时器中断服务程序ISR时,初始化光谱传感器和ADC芯片的所有管脚,为后续的动作做好准备。每个像素点的积分时间由光谱传感器ST管脚上的2次相邻下降沿的时间差来控制,因此在开始积分时刻和积分结束时刻,均在ST管脚上产生下降沿。当进入到读取像素状态时,从光谱传感器中串行移出一个像素的模拟量,需要4个CLK时钟,也即4个高电平、4个低电平,共8次ISR中断。在第K次中断,如果K=3,此时某个像素的模拟量已在光谱传感器的Video管脚有效输出,设置ADC的片选有效,为AD转换做准备;在K=4时,启动ADC转换,也即启动SPI功能;在K=7时,AD转换已经结束,把转换后的数字量保存到数组中;然后判断256个像素是否已经全部移出并且AD转换完毕,如果是,则在下一个ISR中复位光谱传感器和ADC芯片,并关闭定时器。

2.2 数据传输

ESP32工作在AP(Access Point)模式下,手机App客户端通过WiFi与此AP连接。ESP32为服务端,App为客户端,通过TCP的socket进行通信。服务端采用了select机制来管理所有客户端,根据双方既定的协议来进行交互数据。ESP32采用了开源的MicroPython固件,编写Python代码来实现通信。利用uselect模块poll()方法获取poll对象poll_obj,利用poll_obj对象的register()方法监听主socket的POLLIN和POLLHUP事件。利用poll_obj对象的poll()方法获取事件对象events,遍历事件对象获取其中socket,如果是主socket,则说明是新增的会话,执行addSession()方法,把新用户的套接字和地址保存到字典connections中,并且对poll_obj对象中添加新套接字的POLLIN和POLLHUP事件进行监听;如果不是主socket,则从connections字典中得到客户端socket,利用usocket模块recv()方法接收客户端上发的消息msg。从消息中利用正则模块ure的search()函数和正则表达式匹配双方既定的消息格式,提取出命令和参数。如果是合法的,则执行相应的功能;如果是非法的,则向客户端发送命令/参数错误信息。如果是断开连接的命令,则调用poll_obj对象的unregister()方法和主动断开所有客户端的socket,否则继续监控事件对象events。当网络出现异常或者客户端退出时调用delSession()方法,从poll_obj对象中取消事件监听,并从字典中删除该用户的socket。

2.3 自适应积分时间算法

线阵CCD的积分时间在光谱测量中十分重要,由于CCD的输出与积分时间之间不是完全线性的,并且当积分时间不充分或者过饱和时,与理想线性值之间的相对误差非常大。如果在CCD感光元件的非线性区间采用线性方法会对频谱分布数据的测量带来较大误差,导致后续参数估算不可靠的问题。为了解决这一问题,设计了一套完整的CCD自适应调控积分时间算法。记线阵CCD包含的光传感器像素点个数为N,第k个像素点对应的波长为λk,第k个像素点的零漂为Vd,k,像素点的最大饱和输出电压为Vsat,比例系数C1=C2=2,CCD积分时间自适应控制方法包括以下步骤:

①令i=0,给定一个较短的积分时间ti;

(1)

Vk(ti)包含了测量误差;

④对Vk(ti)作归一化处理,得到相对电压值,也即

RVk(ti)=Vk(ti)/Vsat

(2)

(3)

⑥当 RVi∈[1/4,3/4]时,如果i≥1,并且 RVi-1在非线性区间[0,1/8),更新比例系数C1,

C1=C1+μ(RVi-1/2)

(4)

如果 RVi-1在非线性区间(7/8,1],更新比例系数C2,

C2=C2+μ(RVi-1/2)

(5)

式中:μ为学习速率,这里取μ=0.1,同时,积分时间为ti时获得的光谱分布数据在合理的范围内,跳出循环,结束;

当 RVi∈[1/8,1/4)和 RVi∈(3/4,7/8]时,虽然在线性区间内,但与最优积分时间相比,相差比较大,因此以最优积分时间为基准、线性增加或减少积分时间;当 RVi∈[0,1/8)时,积分时间明显不足,以C1倍的线性比增加积分时间;当 RVi∈(7/8,1]时,积分时间明显太长,以C2倍的线性比减少积分时间。跳到步骤②继续下次测量。

2.4 光源色度学参数计算

本系统能够显示的光源色度学参数有很多,下面将给出三个重要参数计算方法。

①色品坐标

光源的色品坐标是一个重要的色度学参数。色品坐标精确的表示了照明光源的发光颜色,借助数学方法来表示颜色的基本参数,它可以在色度图中表示出来。通过测得光源的相对光谱功率分布,从而计算出色品坐标。首先在可见光波段内计算出光源颜色的三刺激值,用下面的公式来进行计算:

(6)

(7)

(8)

(9)

(10)

在实际工作中,首先要用光谱辐射计测量得到光源的相对光谱功率分布或者用分光光度计来测得物体的光谱反射比或者是光谱透射比,然后再根据CIE推荐的标准照明体数据和标准色度观察者光谱三刺激值数据,最后可编写计算程序,得到样品的色品坐标值。

②色温

光源的色温是用来描述光源的光谱分布的物理量,它可以量度光线的颜色组成成分。但是,一般光源不会正好落在黑体轨迹线上,因此光源的色温用相关色温表示。相关色温能够简便的描述光源的光色,相关色温相同的光源说明它们的光色相同,但它们的光谱分布可以有较大的差异。相关色温的经验计算公式如下:

T=a1A4+a2A3+a3A2+a4A+a5

(11)

③显色性

光源对物体自然颜色所能呈现的程度称为显色性,换言之也就是光源显现被照物体真实颜色的能力。物体的真实颜色是指在参照照明体(通常为完全辐射体)下所呈现的颜色。光源的显色性是由显色指数来衡量的。光源对某一种标准样品显色指数叫做特殊显色指数,用Ri来表示。显色指数的计算过程如下所示:

(12)

再根据光谱功率分布和颜色样品的光谱反射系数,计算待测光源照明下15种颜色样品的色度坐标(xk,i,yk,i),计算(uk,i,vk,i);分别将被测光源的色坐标(uk,vk)、被测光源照射下的颜色样品色坐标(uk,i,vk,i)代入下式中,计算出ck,dk以及ck,i,dk,i

(13)

(14)

(15)

(16)

(17)

(18)

(19)

(20)

式中:r为参考光源下标,i为颜色样品序号的下标,k为被测光源下标。

最后由式(21)和式(22)计算一般显色指数Ra和特殊显色指数Ri;

Ri=100-4.6ΔEi

(21)

(22)

2.5 移动端软件功能设计

为了方便用户本地查阅和光谱数据的可视化显示,分析仪借助Android手机设计了一套客户端App来进行光谱数据的分析和结果显示。如图4所示,客户端App包括光谱数据采集、参数估计、文件管理和频谱图绘制四个功能。

图4 客户端App功能分类示意图

①光谱分布数据采集功能包括开启并连接采集装置、设置采集积分时间和采集频谱命令。

②参数估算功能对采集到的数据进行分析处理,计算出频谱参数,并显示在ListView中。

③文件管理功能将频谱分布数据以流的形式保存至SD卡内指定的文件夹中,保存的数据可实时被查看。

④频谱图绘制功能包括频谱图绘制,以380 nm至780 nm之间的N个离散波长为横坐标,以对应频谱分布数据为纵坐标绘制频谱曲线图,曲线图中用不同的RGB颜色填充,填充的颜色为该离散波长下的RGB颜色分量。通过频谱图直观地了解到不同波长下频谱的变化趋势。

2.6 双缓冲机制

APP在绘制相关色品图时,数据计算量过大导致出现界面延迟加载卡顿现象[19],故提出采用双缓冲机制解决此问题。双缓冲机是软件启动的时候就在缓存中开始进行复杂的数据计算和绘图过程,并将绘制的图片以Bitmap形式保存。当软件运行实现色品图展示的功能时,直接从缓存中读取已绘制的图片,并将其加载到屏幕上,毋须再进行数据计算和绘制的过程。在Android中通过自定义View继承View,创建父类View中的构造方法,在构造方法中创建一个缓冲区图片cacheBitmap,该缓冲区图片大小与Android自定义View的图片大小相同,然后将缓冲区图片cacheBitmap设置为画布cacheCanvas,将需要绘制的色品图通过cacheCanvas绘制到缓冲区画布上。然后在自定义View中重写onDraw()方法,通过drawBitmap()方法绘制cacheBitmap,这样就可以将缓冲区画布上的色品图加载到App的屏幕上。采用双缓冲机制大大节俭了绘图时间,加快色品图展示时间,有效地解决了页面卡顿现象。

3 实测与分析

测试是检验系统合理性的关键步骤,本系统完成光谱定标工作和在光谱定标的基础上进行系统测试工作。

3.1 光谱定标

光谱定标是实际光谱数据测量中一个重要环节,由于CCD感光元件的输出值并不是真实光谱值,而是AD转换器的AD值,如果只采用CCD的输出值进行运算,将会给后续工作带来较大误差,因此需要通过光谱定标确定实际待测灯的相对光谱值。

如图5所示,分别给出的真实的相对光谱值和CCD输出的相对AD值。其中红色曲线代表的是由色温计算得到的真实相对光谱图,而白色曲线代表的是CCD输出的相对AD值,由该图可以看出,如若不进行光谱定标,将会存在很大误差。

图5 真实的相对光谱值和CCD输出的相对AD值对比图

3.2 系统测试

系统测试是在光谱定标基础上进行测试,App根据获取的光谱数据进行光谱绘制和光源色度学参数计算。以下是测试过程:①打开设备端电源开关,给CCD探头盖上乳白色的滤光片;②打开手机网络设置,搜索模块的SSID,输入密码,进行通信连接;③在App主界面,点击“开始”按钮,开始进行光谱检测(此时测量无需在黑暗环境下);④当检测完成后,坐标系相应位置绘制出相对光谱图。此时,检测完成。

如图6所示,测量了60 W的白炽灯灯管的相对光谱分布图,其中横坐标是380 nm~780 nm的波长,纵坐标为相对光谱值,坐标系中的垂直蓝线可以进行左右滑动,并显示出当前的波长和相对光谱值。由此图可表明与标准灯光谱基本一致,数据可靠。

图6 白炽灯相对光谱分布图

如图7给出了60 W白炽灯的CIE1931色品图。从图中可以看出本文提供的系统和算法能较好完成光谱数据的测量和分析工作。

如图8所示,通过Android下的ListView控件展示了使用60 W的白炽灯的相对光谱值计算得到的光源色度学参数,包括CIE1931(x,y)色品坐标、显色指数CRI,TM-30-18 Rf和Rg等。

图7 白炽灯CIE1931坐标图

图8 60 W白炽灯的光源色度学参数

4 结论

所提出的可见光光谱分析系统,结构简单,使用方便,经过测试后表明系统能够正确检测出待测光源光谱特性,分析计算得到色度学参数并绘制相应特征图。系统各部分稳定协调工作,操作简单,可以运用于可见光的光谱检测和分析,提高可见光光源质量。

猜你喜欢
光源绘制客户端
光源改变光环境
如何看待传统媒体新闻客户端的“断舍离”?
超萌小鹿课程表
放学后
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
绿色光源
两种LED光源作为拟南芥生长光源的应用探究
科技连载:LED 引领第三次照明革命——与传统照明的对比(一)