朱玉清,瑚 琦,高鹏飞
(上海理工大学 光电信息与计算机工程学院,上海 200093)
光谱仪广泛用于冶金、地质、石油化工、医药卫生、环境保护等部门,也是军事侦察、宇宙探索、资源和水文勘测时必不可少的光学仪器。现有市场上的大部分光谱仪都具备数据采集功能,但体积庞大且采集得到的数据无法直接处理,需要通过计算机来实现,若在户外使用将会造成诸多不便,而嵌入式微型光谱仪则有效地弥补了这些不足。嵌入式系统的运用使光谱仪整体微型化,并且处理器可直接进行数据处理和显示[1]。
嵌入式光谱仪一般都会加入 Windows CE、Linux等操作系统,代替了传统的由手工编制的监控程序,同时屏蔽了底层硬件,使应用程序员面向操作系统开发应用软件,并易于在不同的CPU内核的嵌入式处理器上移植[2-5]。本文提出采用Android系统平台,在此平台上进行光谱数据传输及图形化界面显示[6]。Android系统是一种基于Linux的自由及开放源代码的操作系统,由Google公司和开放手机联盟领导及开发,主要使用于移动设备,如智能手机和平板电脑。该系统安全精炼,操作内容丰富,功能强大,易于使用,且其可移植性强[7-9]。
本设计基于Android系统,通过RS232串口发送控制信号并获取采集到的光谱数据,利用AChartEngine安卓图形库进行光谱图显示,最终将光谱图片及数据保存在SD卡中。
基于Android系统的微型光谱仪数据传输及图形化显示,一方面加快了数据的处理速度、简化了光谱仪的操作流程;另一方面,可与其他Android系统的嵌入式移动设备如手机等进行方便的通信连接,简化了后续的软件开发与应用。
图1所示为光谱仪系统框图,入射光通过光学系统进行分光、滤波,有用信号被提取出来送入CCD数据采集模块,此模块将采集到的模拟信号转换成数字信号并传给MCU,MCU最终将数据传给基于Android系统的嵌入式设备。MCU与嵌入式设备间通过串口RS232的形式连接,如图2所示,发送数据针脚TXD与接收数据针脚RXD相连,彼此交叉,信号对应相接。整个系统通过嵌入式设备发送采样控制信号进行运作,MCU控制CCD数据采集模块,驱动CCD采样,最终数据传入嵌入式设备进行光谱图显示。
图1 光谱仪系统框图Fig.1 Block diagram of the spectrometer system
图2 串口连接Fig.2 Serial port connection
一般嵌入式系统主要由嵌入式处理器、相关支撑硬件和嵌入式软件系统组成,它是集软硬件于一体的可独立工作的“器件”。如图3所示,本设计基于Android系统的嵌入式设备包括安卓平台、SD卡模块、RS232通信模块。此安卓平台基于ARM Cortex-A8处理器,主频为1GHz。此处理器可高速进行数据分析、显示等操作,并可同时进行其他任务的处理。RS232模块用于光谱仪嵌入式设备与MCU间通信,通过此串口,嵌入式设备向MCU发出控制信号,并接受光谱数据。SD卡模块可以保存光谱数据和光谱图片。
图3 基于Android系统的嵌入式设备原理框图Fig.3 Principle block diagram of embedded devices based on Android system
此安卓平台功能框图如图4所示,包括光谱数据采集、光谱数据显示和光谱数据存储。基于Android系统的嵌入式平台,不仅支持光谱数据的单次采集和连续采集,同时还可以实时地显示光谱图,并对包括光谱图像在内的光谱数据进行存储。此平台选用多点触控液晶屏作为系统中人机交互的窗口,可直接用手点击液晶屏上所显示的功能菜单对系统进行操作。该界面设有单次采集、连续采集、保存图片、保存数据、退出等按钮,通过.xml布局文件来进行按钮的添加,其中按钮间实行线性排布方式,另外通过在布局文件中添加代码,在界面右侧建立id号为chart且大小规定的绘图区,代码如下:
主程序中通过setContentView(R.layout.console)引用该布局文件。
图4 功能框图Fig.4 Functional block diagram
Android系统的嵌入式设备与MCU间以串口RS232的方式进行通信,波特率设定在115200bit/s,通过Android界面直接控制MCU采集光谱数据,并将数据上传回嵌入式设备进行处理。
在Android串口通信程序的设计中,需要新建类来找到串口并控制串口。需要新建以下几个类:SerialPortFinder类,其作用是找到串口;SerialPort类,其主要作用是加载SO文件,并通过JNI的方式打开关闭串口;Application,其继承android.app.Application,用来对串口进行初始化和关闭串口;Activity类,它的功能是继承抽象类,主要用于读取串口的信息。
当点击单次采集时,程序执行mOutputStream.write(1),通过串口向MCU发送0x01的指令。
当点击连续采集时,程序执行mOutputStream.write(2),通过串口向MCU发送0x02的指令。
Android平台通过串口接收到的数据都放在buffer数组中,需要用时可调用protected void onDataReceived(final byte[]buffer,final int size)函数。
图5 折线图构成Fig.5 The line chart structure
本平台最终将采集得到的光谱数据以光谱图的形式直观地显示出来。在Android开发过程中,选用了AChartEngine图形库来绘图。AChartEngine是用于Android平台上的类库,它能够帮助用户绘制高效、美观、多样化的图表。
如图5所示,折线图构成需要五项重要元素。XYMutilpleSeriesRenderer用于进行绘制的总设置,如整个界面中所有坐标系的式样、范围和精度,图形的显示形式、缩放的比例;XYSeriesRender对象用于单个定义绘制的点集合设置,如一组点集合的显示式样;XYMutilpleSeriesDataset用于所有数据的存放;XYseries对象用于向XYMutilpleSeriesDataset提供绘制的点集合的数据,XYMutilpleSeriesRenderer和XYMutilpleSeriesDataset传入ChartFactory后,调用getXXXChartIntent(Context context,XYMutilpleSeriesRenderer,XYMutilpleSeriesDataset()方法来进行折线图表的显示。
设置图形参数的重要代码如下:
在实现读写SD卡功能的程序中,首先调用Environment的getExternalStorageState()方法来判断卡槽是否插入了SD 卡,并且通过代码 Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)来给予应用程序读写SD卡的权限;接下来调用Environment的getExternalStorageDirectory()方法来获取外部存储器路径,也就是SD卡的路径;最后使用FileInputStream、FileOutputStream、FileReader和FileWriter来读取写入文件到SD卡中。在光谱仪的数据和图像保存的操作中,图片以jpg的形式保存,数据以txt的形式保存。
基于Android系统的嵌入式设备的界面结果如图6所示,图中界面左侧的操作按钮可进行单次和连续采集、对采集数据进行绘图、对图片与数据进行保存和退出界面。点击画折线图按钮后界面右侧将以光谱折线图的形式绘制采集得到的光谱数据,并且可以通过下端的按钮对光谱图的显示比例进行调整,通过不同的触碰方式也可以直接对光谱图进行放大、缩小和移动。点击保存数据按钮能成功将光谱数据输出为txt形式的文件,点击保存图片按钮能成功将光谱图以jpg的文件形式输出,并且都保存于SD卡中。整体界面操作方便、图片显示直观清晰。
图6 界面结果图Fig.6 Interface result diagram
基于ARM Cortex-A8处理器与Android操作系统,设计了光谱仪的数据传输及图形化显示。经过测试,该设备的串口传输数据速度最高可达115200bit/s,并可直观显示光谱图,另外该设备还支持数据及图片的保存,完成了光谱仪数据的传输与图形化显示。由于该设计采用了Android操作系统,与传统的光谱仪相比,其功能更强大,开发人员无需关心光谱仪数据采集的硬件实现,可以集中精力针对实际应用设计更多相应的数据分析处理软件,使后续开发变得更容易、更具有良好的应用价值。
[1]林 晨.嵌入式光谱仪的应用发展[J].科技资讯,2011,278(29):26.
[2]徐 喆,刘 卓,张 华.基于Linux的便携式光谱仪数据采集系统的设计[J].计算机测量与控制,2009,17(3):608-610.
[3]赵才荣,瞿 芳,王增林.一种便携式光谱仪的设计[J].仪表技术,2007,164(7):27-29.
[4]周进波,张 磊,张 敏,等.基于 Android系统蓝牙开发的研究与实现[J].光学仪器,2013,199(1):34-36.
[5]王伟兰,谈 图,汪 磊,等.基于线阵CCD的光谱信号高速数据采集系统设计[J].仪表技术与传感器,2011,346(11):48-50.
[6]许炳楠,钱记名,贾建勋.光谱仪数据采集与处理系统的开发[J].河海大学学报,1993,218(2):99-102.
[7]傅海威,平 凯,乔学光,等.基于Android的用于光纤光栅信号解调的OCM检测系统[J].仪表技术与传感器,2012,352(5):94-95.
[8]李 刚.疯狂Android讲义[M].北京:电子工业出版社,2011.
[9]李 刚.疯狂JAVA讲义[M].北京:电子工业出版社,2012.