朱玉清,瑚 琦,高鵬飛
(上海理工大學(xué) 光電信息與計算機工程學(xué)院,上海 200093)
光譜儀廣泛用于冶金、地質(zhì)、石油化工、醫(yī)藥衛(wèi)生、環(huán)境保護等部門,也是軍事偵察、宇宙探索、資源和水文勘測時必不可少的光學(xué)儀器?,F(xiàn)有市場上的大部分光譜儀都具備數(shù)據(jù)采集功能,但體積龐大且采集得到的數(shù)據(jù)無法直接處理,需要通過計算機來實現(xiàn),若在戶外使用將會造成諸多不便,而嵌入式微型光譜儀則有效地彌補了這些不足。嵌入式系統(tǒng)的運用使光譜儀整體微型化,并且處理器可直接進行數(shù)據(jù)處理和顯示[1]。
嵌入式光譜儀一般都會加入 Windows CE、Linux等操作系統(tǒng),代替了傳統(tǒng)的由手工編制的監(jiān)控程序,同時屏蔽了底層硬件,使應(yīng)用程序員面向操作系統(tǒng)開發(fā)應(yīng)用軟件,并易于在不同的CPU內(nèi)核的嵌入式處理器上移植[2-5]。本文提出采用Android系統(tǒng)平臺,在此平臺上進行光譜數(shù)據(jù)傳輸及圖形化界面顯示[6]。Android系統(tǒng)是一種基于Linux的自由及開放源代碼的操作系統(tǒng),由Google公司和開放手機聯(lián)盟領(lǐng)導(dǎo)及開發(fā),主要使用于移動設(shè)備,如智能手機和平板電腦。該系統(tǒng)安全精煉,操作內(nèi)容豐富,功能強大,易于使用,且其可移植性強[7-9]。
本設(shè)計基于Android系統(tǒng),通過RS232串口發(fā)送控制信號并獲取采集到的光譜數(shù)據(jù),利用AChartEngine安卓圖形庫進行光譜圖顯示,最終將光譜圖片及數(shù)據(jù)保存在SD卡中。
基于Android系統(tǒng)的微型光譜儀數(shù)據(jù)傳輸及圖形化顯示,一方面加快了數(shù)據(jù)的處理速度、簡化了光譜儀的操作流程;另一方面,可與其他Android系統(tǒng)的嵌入式移動設(shè)備如手機等進行方便的通信連接,簡化了后續(xù)的軟件開發(fā)與應(yīng)用。
圖1所示為光譜儀系統(tǒng)框圖,入射光通過光學(xué)系統(tǒng)進行分光、濾波,有用信號被提取出來送入CCD數(shù)據(jù)采集模塊,此模塊將采集到的模擬信號轉(zhuǎn)換成數(shù)字信號并傳給MCU,MCU最終將數(shù)據(jù)傳給基于Android系統(tǒng)的嵌入式設(shè)備。MCU與嵌入式設(shè)備間通過串口RS232的形式連接,如圖2所示,發(fā)送數(shù)據(jù)針腳TXD與接收數(shù)據(jù)針腳RXD相連,彼此交叉,信號對應(yīng)相接。整個系統(tǒng)通過嵌入式設(shè)備發(fā)送采樣控制信號進行運作,MCU控制CCD數(shù)據(jù)采集模塊,驅(qū)動CCD采樣,最終數(shù)據(jù)傳入嵌入式設(shè)備進行光譜圖顯示。
圖1 光譜儀系統(tǒng)框圖Fig.1 Block diagram of the spectrometer system
圖2 串口連接Fig.2 Serial port connection
一般嵌入式系統(tǒng)主要由嵌入式處理器、相關(guān)支撐硬件和嵌入式軟件系統(tǒng)組成,它是集軟硬件于一體的可獨立工作的“器件”。如圖3所示,本設(shè)計基于Android系統(tǒng)的嵌入式設(shè)備包括安卓平臺、SD卡模塊、RS232通信模塊。此安卓平臺基于ARM Cortex-A8處理器,主頻為1GHz。此處理器可高速進行數(shù)據(jù)分析、顯示等操作,并可同時進行其他任務(wù)的處理。RS232模塊用于光譜儀嵌入式設(shè)備與MCU間通信,通過此串口,嵌入式設(shè)備向MCU發(fā)出控制信號,并接受光譜數(shù)據(jù)。SD卡模塊可以保存光譜數(shù)據(jù)和光譜圖片。
圖3 基于Android系統(tǒng)的嵌入式設(shè)備原理框圖Fig.3 Principle block diagram of embedded devices based on Android system
此安卓平臺功能框圖如圖4所示,包括光譜數(shù)據(jù)采集、光譜數(shù)據(jù)顯示和光譜數(shù)據(jù)存儲。基于Android系統(tǒng)的嵌入式平臺,不僅支持光譜數(shù)據(jù)的單次采集和連續(xù)采集,同時還可以實時地顯示光譜圖,并對包括光譜圖像在內(nèi)的光譜數(shù)據(jù)進行存儲。此平臺選用多點觸控液晶屏作為系統(tǒng)中人機交互的窗口,可直接用手點擊液晶屏上所顯示的功能菜單對系統(tǒng)進行操作。該界面設(shè)有單次采集、連續(xù)采集、保存圖片、保存數(shù)據(jù)、退出等按鈕,通過.xml布局文件來進行按鈕的添加,其中按鈕間實行線性排布方式,另外通過在布局文件中添加代碼,在界面右側(cè)建立id號為chart且大小規(guī)定的繪圖區(qū),代碼如下:
主程序中通過setContentView(R.layout.console)引用該布局文件。
圖4 功能框圖Fig.4 Functional block diagram
Android系統(tǒng)的嵌入式設(shè)備與MCU間以串口RS232的方式進行通信,波特率設(shè)定在115200bit/s,通過Android界面直接控制MCU采集光譜數(shù)據(jù),并將數(shù)據(jù)上傳回嵌入式設(shè)備進行處理。
在Android串口通信程序的設(shè)計中,需要新建類來找到串口并控制串口。需要新建以下幾個類:SerialPortFinder類,其作用是找到串口;SerialPort類,其主要作用是加載SO文件,并通過JNI的方式打開關(guān)閉串口;Application,其繼承android.app.Application,用來對串口進行初始化和關(guān)閉串口;Activity類,它的功能是繼承抽象類,主要用于讀取串口的信息。
當(dāng)點擊單次采集時,程序執(zhí)行mOutputStream.write(1),通過串口向MCU發(fā)送0x01的指令。
當(dāng)點擊連續(xù)采集時,程序執(zhí)行mOutputStream.write(2),通過串口向MCU發(fā)送0x02的指令。
Android平臺通過串口接收到的數(shù)據(jù)都放在buffer數(shù)組中,需要用時可調(diào)用protected void onDataReceived(final byte[]buffer,final int size)函數(shù)。
圖5 折線圖構(gòu)成Fig.5 The line chart structure
本平臺最終將采集得到的光譜數(shù)據(jù)以光譜圖的形式直觀地顯示出來。在Android開發(fā)過程中,選用了AChartEngine圖形庫來繪圖。AChartEngine是用于Android平臺上的類庫,它能夠幫助用戶繪制高效、美觀、多樣化的圖表。
如圖5所示,折線圖構(gòu)成需要五項重要元素。XYMutilpleSeriesRenderer用于進行繪制的總設(shè)置,如整個界面中所有坐標(biāo)系的式樣、范圍和精度,圖形的顯示形式、縮放的比例;XYSeriesRender對象用于單個定義繪制的點集合設(shè)置,如一組點集合的顯示式樣;XYMutilpleSeriesDataset用于所有數(shù)據(jù)的存放;XYseries對象用于向XYMutilpleSeriesDataset提供繪制的點集合的數(shù)據(jù),XYMutilpleSeriesRenderer和XYMutilpleSeriesDataset傳入ChartFactory后,調(diào)用getXXXChartIntent(Context context,XYMutilpleSeriesRenderer,XYMutilpleSeriesDataset()方法來進行折線圖表的顯示。
設(shè)置圖形參數(shù)的重要代碼如下:
在實現(xiàn)讀寫SD卡功能的程序中,首先調(diào)用Environment的getExternalStorageState()方法來判斷卡槽是否插入了SD 卡,并且通過代碼 Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)來給予應(yīng)用程序讀寫SD卡的權(quán)限;接下來調(diào)用Environment的getExternalStorageDirectory()方法來獲取外部存儲器路徑,也就是SD卡的路徑;最后使用FileInputStream、FileOutputStream、FileReader和FileWriter來讀取寫入文件到SD卡中。在光譜儀的數(shù)據(jù)和圖像保存的操作中,圖片以jpg的形式保存,數(shù)據(jù)以txt的形式保存。
基于Android系統(tǒng)的嵌入式設(shè)備的界面結(jié)果如圖6所示,圖中界面左側(cè)的操作按鈕可進行單次和連續(xù)采集、對采集數(shù)據(jù)進行繪圖、對圖片與數(shù)據(jù)進行保存和退出界面。點擊畫折線圖按鈕后界面右側(cè)將以光譜折線圖的形式繪制采集得到的光譜數(shù)據(jù),并且可以通過下端的按鈕對光譜圖的顯示比例進行調(diào)整,通過不同的觸碰方式也可以直接對光譜圖進行放大、縮小和移動。點擊保存數(shù)據(jù)按鈕能成功將光譜數(shù)據(jù)輸出為txt形式的文件,點擊保存圖片按鈕能成功將光譜圖以jpg的文件形式輸出,并且都保存于SD卡中。整體界面操作方便、圖片顯示直觀清晰。
圖6 界面結(jié)果圖Fig.6 Interface result diagram
基于ARM Cortex-A8處理器與Android操作系統(tǒng),設(shè)計了光譜儀的數(shù)據(jù)傳輸及圖形化顯示。經(jīng)過測試,該設(shè)備的串口傳輸數(shù)據(jù)速度最高可達115200bit/s,并可直觀顯示光譜圖,另外該設(shè)備還支持數(shù)據(jù)及圖片的保存,完成了光譜儀數(shù)據(jù)的傳輸與圖形化顯示。由于該設(shè)計采用了Android操作系統(tǒng),與傳統(tǒng)的光譜儀相比,其功能更強大,開發(fā)人員無需關(guān)心光譜儀數(shù)據(jù)采集的硬件實現(xiàn),可以集中精力針對實際應(yīng)用設(shè)計更多相應(yīng)的數(shù)據(jù)分析處理軟件,使后續(xù)開發(fā)變得更容易、更具有良好的應(yīng)用價值。
[1]林 晨.嵌入式光譜儀的應(yīng)用發(fā)展[J].科技資訊,2011,278(29):26.
[2]徐 喆,劉 卓,張 華.基于Linux的便攜式光譜儀數(shù)據(jù)采集系統(tǒng)的設(shè)計[J].計算機測量與控制,2009,17(3):608-610.
[3]趙才榮,瞿 芳,王增林.一種便攜式光譜儀的設(shè)計[J].儀表技術(shù),2007,164(7):27-29.
[4]周進波,張 磊,張 敏,等.基于 Android系統(tǒng)藍牙開發(fā)的研究與實現(xiàn)[J].光學(xué)儀器,2013,199(1):34-36.
[5]王偉蘭,談 圖,汪 磊,等.基于線陣CCD的光譜信號高速數(shù)據(jù)采集系統(tǒng)設(shè)計[J].儀表技術(shù)與傳感器,2011,346(11):48-50.
[6]許炳楠,錢記名,賈建勛.光譜儀數(shù)據(jù)采集與處理系統(tǒng)的開發(fā)[J].河海大學(xué)學(xué)報,1993,218(2):99-102.
[7]傅海威,平 凱,喬學(xué)光,等.基于Android的用于光纖光柵信號解調(diào)的OCM檢測系統(tǒng)[J].儀表技術(shù)與傳感器,2012,352(5):94-95.
[8]李 剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2011.
[9]李 剛.瘋狂JAVA講義[M].北京:電子工業(yè)出版社,2012.