曹蓬+潘盛輝
摘 要:為對移動物體進行近距離檢測,縮小傳感器的體積和增加安裝便捷性,文中設計了一款基于藍牙技術的姿態(tài)檢測傳感器。該系統(tǒng)利用三軸加速度傳感器、三軸陀螺儀和磁力計完成對運動物體速度、運動方向的檢測,然后將得到的數(shù)據(jù)通過藍牙通信技術傳輸至手機App,并保存至手機存儲卡中。實驗結果表明,本系統(tǒng)的定位精度可達5 m,速度檢測誤差低。
關鍵詞:藍牙技術;安卓平臺;傳感器技術;慣性測量單元
中圖分類號:TP212.9 文獻標識碼:A 文章編號:2095-1302(2017)06-00-05
0 引 言
隨著傳感器技術的發(fā)展,現(xiàn)代工業(yè)控制變得更加精準,更多實時檢測處理傳感器得到了廣泛應用[1]。在車載應用中,傳統(tǒng)的傳感器測控網(wǎng)絡為有線式監(jiān)控網(wǎng)絡,使用屏蔽線或導線進行信號傳輸[2]。在汽車控制系統(tǒng)上集成了許多不同的傳感器裝置,用以測量汽車是否正常工作[3]??赏ㄟ^查看汽車各傳感器的參數(shù)值進行故障診斷等操作,而對車身整體的運動檢測傳感器目前研究尚淺[4]。因此,文中提出一款基于藍牙無線技術的汽車車載運動狀態(tài)檢測裝置,該裝置是基于TCP /IP協(xié)議的網(wǎng)絡化智能傳感器。相比普通的基于現(xiàn)場總線的傳感器,該傳感器不僅體積小,安裝便捷性也得以提升[5]。本傳感器適合安裝于車輛內部各個位置,通過藍牙無線信號傳輸將本系統(tǒng)與汽車控制系統(tǒng)及其他檢測系統(tǒng)區(qū)分開來,以降低信號冗余度,減少信號擁堵。因此本系統(tǒng)可稱為獨立的運動檢測裝置[6]。
在許多應用場合,不依靠外界而從自身內部獲取自身運動狀態(tài)信息十分重要,慣性測量單元就扮演了這一角色。慣性測量單元(Inertial Measurement Unit,IMU)由微型陀螺儀、微型加速度計、專用集成電路(ASIC)、嵌入式微機及相應的軟件組成,內部采用I2C總線接口,可以測出載體的角速度、加速度等信息,屬于微電子機械系統(tǒng)的一種[5]。微電子機械系統(tǒng)(Micro-Electro-Mechanical Systems,MEMS)采用較低的成本把具有特定功能的復雜系統(tǒng)置于一個小小的硅片上,并將各種微型探測傳感器及微型機械裝置與微電子元件集為一體,使得系統(tǒng)的集成化程度更高,傳感器的體積更小。
1 系統(tǒng)功能分析
為分析藍牙無線姿態(tài)檢測傳感器,可根據(jù)數(shù)據(jù)的傳輸過程將系統(tǒng)分為3個部分:
(1)傳感器數(shù)據(jù)獲取模塊。利用動態(tài)卡爾曼濾波等算法,對原始傳感器進行采集濾波整合處理;
(2)傳感器數(shù)據(jù)無線發(fā)送模塊。掌握并運用藍牙發(fā)送模塊的參數(shù)及配置;
(3)數(shù)據(jù)顯示及保存模塊。使用手機App進行數(shù)據(jù)接收及保存。
2 總體設計
本系統(tǒng)包含軟件和硬件設計,硬件電路使用STM32系列的ARM芯片,使用I2C總線通信方式與加速度計陀螺儀通信,并使用串口與藍牙芯片HC05通信,藍牙模塊發(fā)送數(shù)據(jù)至安卓手機端。軟件編程使用Keil,IAR,Eciplse軟件對模塊編程。使用Keil軟件完成對傳感器數(shù)據(jù)信息的采集和數(shù)據(jù)打包處理;使用IAR完成對藍牙模塊的配置操作處理,設置藍牙的發(fā)送模式,波特率等參數(shù);使用Ecilpse完成手機端App的編程,使用手機自帶的藍牙通信接口獲取數(shù)據(jù),后將數(shù)據(jù)解析拆包,將得到的數(shù)據(jù)顯示到手機屏幕并保存。系統(tǒng)總體模塊框圖如圖1所示。
3 系統(tǒng)硬件設計框圖
3.1 IMU慣性測量單元
IMU的主控制芯片選用STM32F103T8,ARM 32-bit Cortex-M3內核,它擁有64 KB的閃存存儲器和20 KB的運行內存及7通道的DMA,7個定時器。通過8 MHz晶體和STM32內部的PLL,控制器可以運行在72 MHz主頻上,由于姿態(tài)解算需要耗費大量內存進行數(shù)學運算,因此采用具有更快處理速度的芯片做更多解算優(yōu)化[6]。IMU慣性測量單元硬件組成框圖如圖2所示。
IMU上的傳感器通過I2C接口與STM32連接,同時傳感器的數(shù)據(jù)中斷引腳與STM32的IO相連,使得傳感器在完成ADC轉換后,STM32可在第一時間讀取最新、最快的數(shù)據(jù),快速響應姿態(tài)變化,獲取各傳感器的狀態(tài)和轉換結果。其中,MPU6050為整合型6軸處理運動組件,包含三軸陀螺儀和三軸加速度器,可準確追蹤快速與慢速動作[7]。HMC5883采用霍尼韋爾地磁傳感器,具有對正交軸的低靈敏度固相結構,可用來測量地球磁場的方向和大小。BMP180是一款高精度、超低能耗的壓力傳感器,測量大氣壓力后可換算為海拔高度。
3.2 Bluetooth模塊
傳感器使用的SPP-C藍牙模塊是遵循V2.1+EDR藍牙規(guī)范的智能無線數(shù)據(jù)模塊。除P12,P5為特殊I/O口外,其他P口均為可編程輸入/輸出接口,其串口UART-TX與UART-RX均采用CMOS接口。該模塊主要用于短距離的數(shù)據(jù)無線傳輸領域[8]??梢苑奖愕呐cPC機的藍牙設備相連,數(shù)據(jù)也可以在兩個模塊之間互通。藍牙模塊的硬件框圖如圖3所示。
4 傳感器軟件設計
4.1 IMU傳感器數(shù)據(jù)采集
IMU數(shù)據(jù)采集流程包括數(shù)據(jù)采集處理芯片STM32和三個傳感器的初始化,即首先對STM32芯片系統(tǒng)上電初始化,完成I2C接口初始化和串口初始化,然后對三個傳感器的配置初始化,如圖4所示。
4.1.1 對MPU6050初始化
MPU6050初始化如圖5所示,軟件配置流程如下:
(1)由電源管理寄存器1(0X6B)控制復位MPU6050;
(2)由陀螺儀配置寄存器(0X1B)和加速度傳感器配置寄存器(0X1C)設置角速度傳感器和加速度傳感器的滿量程范圍;
(3)由中斷使能寄存器(0X38)配置中斷;
(4)由用戶控制寄存器(0X6A)設置AUX I2C接口;
(5)由FIFO使能寄存器(0X23)設置FIFO;
(6)由采樣率分頻寄存器(0X19)配置陀螺儀采樣率;
(7)由配置寄存器(0X1A)設置數(shù)字低通濾波器;
(8)由電源管理寄存器1(0X6B)設置系統(tǒng)時鐘。一般選擇x軸陀螺PLL作為時鐘源,以獲得更高精度的時鐘;
(9)由電源管理寄存器2(0X6C)使能角速度傳感器(陀螺儀)和加速度傳感器。
4.1.2 對HMC5883初始化
HMC5883初始化程序如圖6所示。在軟件中設置HMC5883的工作模式0,為連續(xù)測量模式。在連續(xù)測量模式下,裝置不斷測量,并將數(shù)據(jù)更新至數(shù)據(jù)寄存器。由配置寄存器A設置測量輸出過程中的采樣平均數(shù)為8個周期,75 Hz的輸出速率。然后使用HMC5883L傳感器內部產生的標準磁場進行初步標定,最后讀取校正后磁力計ADC的值。
4.1.3 對BMP180初始化
BMP180的初始化如圖7所示,需要在軟件中進行配置:
(1)發(fā)出壓力(或溫度)轉換命令;
(2)一段時間后從UP(UT)寄存器讀取原始數(shù)據(jù);
(3)若要得到攝氏溫度和hPa 壓力則需要用到校正數(shù)據(jù),這些數(shù)據(jù)放在BMP085的E2PROM中,通過I2C可以在初始化時讀出。
4.2 藍牙無線模塊配置
藍牙HC05是主從一體的藍牙串口模塊,可以使其工作在主或從機狀態(tài)。當藍牙設備配對連接成功后,無需考慮藍牙內部的通信協(xié)議,直接將藍牙作為串口使用。連接建立后,兩設備共同使用一通道,一個設備發(fā)送數(shù)據(jù)到通道中,另一個設備可以接收通道中的數(shù)據(jù)。為建立這種通道連接,需要將藍牙設置為能進行配對連接的AT模式。使用藍牙模塊的AT指令對其進行配置,將模塊設置為從機模式,依次輸入指令:
AT+NAME=Bluetooth-Slave //藍牙名稱為Bluetooth-Slave
AT+ROLE=0 // 藍牙模式為從模式
AT+CMODE=0 // 藍牙連接模式為任意地址連接模式
AT+PSWD=1234 // 藍牙配對密碼為1234
AT+UART=9600,0,0 // 藍牙通信串口波特率為9 600,停止位1位,無校驗位
AT+RMAAD // 清空配對列表
5 手機安卓端軟件
5.1 系統(tǒng)總體設計
為完成手機端App的軟件開發(fā),首先建立其用例圖,描述用戶使用本App實現(xiàn)的目的。首先用戶打開App圖標進入軟件,完成藍牙設備的匹配連接,然后根據(jù)用戶的需要選擇用戶希望獲取的數(shù)據(jù)信息,最后用戶保存需要的數(shù)據(jù)信息。
根據(jù)實現(xiàn)的功能按照實現(xiàn)類方法進行劃分。其中涉及藍牙通信服務,用戶與手機圖形界面交互中的事件監(jiān)聽處理機制,及數(shù)據(jù)的實時動態(tài)刷新顯示。在設計軟件時設計了用例圖和部署圖,具體如圖8和圖9所示。
5.2 App實現(xiàn)框架
在AndriodMenifest.xml文件列出了應用程序提供的功能,凡需要用到的組件都要在此進行配置及注冊,包括Activity、Intent、Service及 ContentProvider。當使用到系統(tǒng)中內置的應用(如電話服務、互聯(lián)網(wǎng)服務、短信服務、GPS服務等)時還需在此文件中聲明使用權限,該文件也是所有Android應用程序都需要的文件,描述了程序包的全局變量,包括公開的應用程序組件和每個組件的實現(xiàn)類,及可以操作的數(shù)據(jù)資源,運行空間等。
軟件中的Activity是Android的核心類,其作用相當于c中的主函數(shù)。該類的全名是android.app.Activity。Activity相當于C/S程序中的窗體(Form)或Web程序的頁面。每一個Activity提供了一個可視化區(qū)域。在這個區(qū)域中可以放置各種Android控件,如按鈕、圖像、文本框等。
其軟件框架如圖10所示,由AndroidMenifest.xml文件配置軟件安卓運行版本條件,并先執(zhí)行DeviceListActivity.java獲取設備列表,使用Intent調用DataMonitor.java程序。DeviceListActivity繼承了Activity類,DataMonitor繼承了FragmentActivity類。兩者在執(zhí)行時都調用BluetoothService.Java函數(shù)以完成藍牙通信。DeviceListActivity.java和DataMonitor.java都由可視化組件View及其子類組成,這些組件按照XML布局文件在指定位置的窗口上擺放。
5.3 數(shù)據(jù)處理及顯示
DataMonitor是一個繼承了FragmentActivity的類,F(xiàn)ragmentActivity 繼承自Activity,它提供了操作Fragment的方法,因此可在Activity中嵌入Fragment來實現(xiàn)需要的布局效果。在DataMonitor中首先實現(xiàn)的是oncreate方法,該方法在DataMonitor初始化時調用藍牙連接,通過setContentView方法將View放到Activity上。綁定后,Activity會顯示View上的控件。其余的是繼承父類的onStart(),onResume(),onPause(),onStop()和onDestroy()方法,未對其修改,完成Activity生命周期的重載基本方法。
在確保藍牙已經連接的情況下使用handler接口完成Activity的Widget與應用程序中線程的交互。重寫handler類中的handleMessage方法,通過該方法接收信息。接收的信息表示當前時刻接收消息的狀態(tài),分別為MESSAGE_STATE_CHANGE,MESSAGE_READ,MESSAGE_DEVICE_NAME,MESSAGE_TOAST。第一種狀態(tài)表示藍牙處于連接狀態(tài);第二種狀態(tài)表示數(shù)據(jù)讀取狀態(tài);第三種狀態(tài)為設備名稱讀入狀態(tài);第四種狀態(tài)為數(shù)據(jù)顯示狀態(tài),可將數(shù)據(jù)顯示在手機屏幕上。通過OnclickConfig(View v),ControlClick(View v)完成界面顯示及跳轉功能,在ControlClick中可以選擇顯示的內容,并根據(jù)按下的按鍵選擇對應的輸出數(shù)據(jù)。onRecordBtnClick(View v)方法是當用戶按下“記錄”鍵時將數(shù)據(jù)保存到SD卡中,當用戶按下“停止”按鈕時停止記錄數(shù)據(jù)信息。DataMonitor內部成員及方法函數(shù)如圖11所示。
5.4 藍牙傳輸BluetoothService
對藍牙進行開發(fā),首先在AndroidManifest.xml文件中加入管理員權限和藍牙開發(fā)權限,開啟藍牙后,用isEnabled()查詢當前藍牙設備的狀態(tài),若返回為false,則表示藍牙設備沒有開啟,需要封裝一個ACTION_REQUEST_ENABLE請求到intent,調用startActivityForResult()方法使能藍牙設備。使用BluetoothAdapter類的方法可以查找遠端設備,使用mArrayAdapter.Add方法顯示可以配對的藍牙設備集,以便選取一個設備進行通信。
掃描設備只需調用startDiscovery()方法,應用程序為了ACTION_FOUND動作需要注冊一個BroadcastReceiver來接收設備掃描到的信息。使能自身設備,將ACTION_REQUEST_DISCOVERABLE動作封裝在intent中并調用startActivityForResult(Intent, int)方法。
建立兩個藍牙設備之間的連接,完成客戶端和服務器端的代碼。一個開啟服務來監(jiān)聽,一個發(fā)起連接請求(使用服務器端設備的MAC地址)。當他們都擁有一個藍牙套接字在同一RFECOMM信道上時,可認為他們之間已經連接上了。getInptuStream()獲取輸入流,getOutputStream()獲取輸出流,進行數(shù)據(jù)傳輸。藍牙連接示意圖如圖12所示。
6 傳感器數(shù)據(jù)測試
打開藍牙傳感器,開啟啟動開關后,指示燈不停閃爍,則表明設備運轉正常。手機首先開啟藍牙功能,然后打開App界面,進入界面后點擊搜索設備,可選擇HC-02。選擇該設備后,會有一個配對過程,輸入配對碼0000,即可完成兩者的配對。顯示的數(shù)據(jù)可選擇加速度,角速度,角度等并點擊記錄按鈕,數(shù)據(jù)將會保存;點擊停止按鈕,則會有提示信息、數(shù)據(jù)保存的文件及路徑。傳感器實物及手機App端如圖13所示。
手機內部有集成慣性傳感器,可對手機的姿態(tài)進行實時監(jiān)測,其中重力感應裝置會根據(jù)手機的狀態(tài)自動旋轉屏幕。手機中的記步工具利用手機內部的慣性傳感器進行記步。我們打開手機記步工具,同時開啟無線藍牙傳感器進行姿態(tài)檢測。將得到的數(shù)據(jù)txt文件導入電腦,并分析z軸加速度曲線。根據(jù)曲線的波峰個數(shù)來判定步數(shù),然后再將其與手機記步工具進行對比[3]。加速度曲線如圖14所示。
當我們行走50步時,得到傳感器數(shù)據(jù)記錄值。取其中的z軸記錄值進行分析,通過Matlab將z軸數(shù)據(jù)繪制成圖14所示的曲線。得到加速度幅值大于1.2的波峰個數(shù),計算為49個,誤差僅為2%。然后在記步工具顯示的數(shù)據(jù)為953-905=48步??梢钥闯鲇洸焦ぞ叩贸龅臄?shù)據(jù)沒有本系統(tǒng)精確。
7 結 語
本文中,我們提出了一種基于藍牙和慣性測量單元的無線位姿傳感器檢測系統(tǒng),針對傳感器的硬件和軟件進行設計。使用整合型6軸處理運動組件MPU6050、BMP180、HMC5883和STM32組成IMU(慣性測量單元),將數(shù)據(jù)通過藍牙發(fā)送至手機端,然后顯示,并將數(shù)據(jù)保存在手機端。文中設計的系統(tǒng)具有較好的實時性,且精度滿足一般運動物體的檢測要求。
參考文獻
[1]賈利亞.安卓平臺下跌倒檢測技術的研究與實現(xiàn)[D].南昌:南昌航空大學,2015.
[2]林英祿.運動數(shù)據(jù)的實時監(jiān)測與健康評價模型的研究[D].上海:華東師范大學,2015.
[3]吳忠澤.基于智能移動終端的人體運動狀態(tài)監(jiān)測系統(tǒng)的設計與實現(xiàn)[D].廣州:華南理工大學,2013.
[4]林英祿.運動數(shù)據(jù)的實時監(jiān)測與健康評價模型的研究[D].上海:華東師范大學,2015.
[5]楊志海.遠程護理中老年人跌倒檢測研究[D].大連:大連海事大學,2015.
[6]孟妍.可穿戴式心電采集與處理方法的研究[D].天津:天津理工大學,2014.
[7]趙婧.基于可穿戴技術的信息處理與數(shù)據(jù)融合算法研究[D].北京:北京服裝學院,2014.
[8]陳瑾.穿戴式人體姿態(tài)監(jiān)測系統(tǒng)研究和設計[D].長沙:中南大學,2014.