趙旭強,高天星,馬忠梅
(北京理工大學 計算機學院,北京 100081)
?
CC3200與Android的跌倒檢測系統上位機設計※
趙旭強,高天星,馬忠梅
(北京理工大學 計算機學院,北京 100081)
摘要:Android系統使用 OpenGL 的標準接口來支持3D圖形功能。通過處理CC3200下位機發送的數據,計算出加速度芯片模型四邊形的4個頂點坐標。系統使用OpenGL ES在窗口中顯示模型四邊形,能夠將芯片姿態的3D形式準確顯示到窗口中。通過分析數據,可有效判斷出人體是否處于跌倒狀態。
關鍵詞:CC3200;Android;OpenGL;跌倒檢測
引言
近年來,老人摔倒的問題越來越嚴重。為了在老人跌倒后能夠得到及時的處理,本文設計了一種基于Android智能手機和CC3200微控制器,并結合MMA7260加速度傳感器的老人跌倒檢測系統。
SimpleLink Wi-Fi CC3200是由TI公司研制的低功耗MCU平臺,集成了高性能的ARM Cortex-M4處理器核和Wi-Fi網絡處理器,網絡通信穩定可靠,并擁有完整的安全協議,其外接了多種設備,包括快速并行接口、SPI、UART串口、ADC模塊等。MMA7260是一款低功耗、低成本、高靈敏三軸加速度傳感器,其加速度以模擬電壓的形式輸出。通過CC3200的ADC模塊對MMA7260的加速度模擬電壓進行轉換,并通過其Wi-Fi模塊與Android智能設備連接,在Android強大的計算能力和OpenGL庫的支持下,可以將MMA7260的姿態顯示到手機界面,然后通過對數據進行分析,實現對老人跌倒的檢測。
1系統設計
1.1系統整體設計
系統主要由兩大模塊組成:CC3200下位機模塊和Android智能設備上位機模塊,其系統整體結構如圖1所示。

圖1 系統整體結構
下位機CC3200采用TI-RTOS操作系統作為平臺,利用RTOS的多線程能力,創建了兩個線程,分別用于對MMA7260的加速度模擬電壓值進行A/D轉換和將得到的加速度數據利用TCP/Socket發送到上位機。Android上位機創建了一個Wi-Fi熱點,下位機通過此熱點建立與上位機的通信。Android上位機接收到加速度電壓數據之后,首先計算芯片上3個坐標軸與重力方向的夾角,然后計算芯片3個坐標軸在地面坐標系中的坐標,并計算芯片四邊形4個頂點在地面坐標系中的坐標,最終通過OpenGL ES將坐標軸和芯片四邊形繪制到窗口中。
1.2上位機軟件設計
使用一臺Android智能終端設備作為上位機,建立與CC3200的連接,并循環接收加速度的電壓數據,經過一系列轉換得到芯片的姿態并顯示到界面上。
首先,需要建立一個SocketSever,等待CC3200的連接。為了使得手機和CC3200能夠連接在一起,需要讓手機和CC3200位于同一個局域網內,因此,需要使用該手機建立一個Wi-Fi熱點,讓CC3200能夠連接并發送數據。
然后,SocketServer接收到一個Socket,并獲得其IP地址,新建一個文件用于保存接收到的數據,其次獲取Socket的數據流,從中獲取加速度電壓數據。
接著根據電壓數據計算出芯片的3個坐標軸與重力方向的夾角,根據夾角計算芯片的3個坐標軸在地面坐標系中的坐標關系,從而計算芯片四邊形4個頂點的位置坐標,最后使用OpenGL ES將四邊形顯示在窗口中。
上位機程序流程圖如圖2所示。

圖2 上位機軟件設計流程圖
2上位機軟件實現
2.1連接網絡并獲得加速度數據
網絡連接使用TCP/Socket實現。首先,應用程序建立一個SocketServer,將端口設置為與CC3200中一致,即5001,然后使用SocketServer的Accept方法等待CC3200連接本服務器,并得到連接Socket。

2.2根據加速度計算角度
得到3個坐標軸加速度的值之后,可以計算3個坐標軸與重力方向的角度。重力分解示意圖如圖3所示。

圖3 重力分解示意
將重力G沿3個坐標軸方向分解,則:
Gcosθx=Gx
Gcosθy=Gy
Gcosθz=Gz
因此:
θx=arccos (Gx/G)
θy=arccos (Gy/G)
θz=arccos (Gz/G)
在實際計算中,由于采集到的加速度值并不只有重力加速度的分量,在運動狀態時還有比較大的運動加速度,因此,Gx、Gy、Gz的絕對值可能大于重力加速度g,此時無法計算arccos的值。在計算中,只需要求得角度值而并不需要加速度的具體數值,所以對Gx、Gy、Gz進行閾值處理:
Gx=Gx Gy=Gy Gz=Gz 使得角度均可計算。 2.3根據角度計算向量 在跌倒檢測系統中,存在兩個不同的坐標系:世界坐標系和模型坐標系。其中,世界坐標系即大地坐標系,其z坐標軸與重力方向相反,此坐標系相對于地面是靜止的。模型坐標系,即CC3200或者MMA7260芯片的坐標系,本文中所述的采集得到的3個加速度方向即為此坐標系的3個坐標軸方向,即2.2節中所述的Gx、Gy、Gz。 本文需要計算模型坐標系坐標軸的單位向量在世界坐標系中的坐標。 一般情況下,芯片位置姿態固定,世界坐標系中x、y方向可以任意選擇,如圖4所示,四邊形代表芯片位置,長坐標軸為地面坐標系,地面坐標系不同但芯片位置相同。因此,為了計算方便,將兩個坐標系的原點重合,并使得模型坐標系的x軸位于世界坐標系的yOz平面內。 圖4 芯片位置姿態固定示意圖 首先計算模型坐標系x軸單位向量的坐標。由于x軸單位向量在yOz平面內,設其單位向量X=(0,yx,zx),如圖5所示,在yOz平面內,X向量與z軸的夾角為θx,因此X=(0,sin θx,cos θx)。 圖5 芯片x軸在世界 坐標系中的位置 然后計算模型坐標系y軸單位向量Y=(xy,yy,zy)的坐標。對于此單位向量,其與世界坐標系z軸的夾角為θy,因此: 同時,y軸單位向量與x軸單位向量垂直,因此: 聯立上述方程組,可以得到: 得到x軸單位向量和y軸單位向量的坐標后,可以得到z軸單位向量: X·Z=0 Y·Z=0 |Z|=1 然而,在本系統中,根據x軸單位向量和y軸單位向量便可完全確定模型坐標系的xOy平面,即確定芯片在世界坐標系中的姿態,因z軸單位向量的表述比較復雜,因此不再計算z軸單位向量。 2.4顯示四邊形的頂點坐標計算 圖6 模型四邊形 在得到模型坐標系xOy平面的單位坐標之后,即可計算模型四邊形的頂點,即芯片四邊形在世界坐標系中的頂點。如圖6所示,顯然,四邊形的4個頂點的坐標分別為X+Y,-X+Y,-X-Y,X-Y。其中,X為模型坐標系中x軸單位向量坐標,Y為模型坐標系中y軸單位向量坐標。 2.5OpenGL軟件設計 在本系統中,需要將芯片模型的姿態以3D形式顯示出來,因此采用Android 3D 引擎OpenGL ES。 在Android中使用GLSurfaceView來顯示 OpenGL 視圖。它提供了一個專門用于渲染3D 的接口類,即Renderer類,使用setRenderer(new MyRenderer())將GLSurfaceView和渲染接口Renderer類連接起來。實現Renderer需要它的3個接口:onSurfaceCreated()、onSurfaceChanged()、onDrawFrame()。其中,onSurfaceCreated()接口在創建窗口時調用,通常在此接口中對 OpenGL 做一些初始化工作,例如設置背景等。onSurfaceChanged()接口在窗口大小發生改變時調用,可以重新設置場景大小等。onDrawFrame()接口即為最重要的接口,所有繪圖操作都在此函數中實現。 當OpenGL引擎啟動之后,將會循環調用onDrawFrame()進行繪圖。在onDrawFrame()中要完成清空屏幕、設置攝像機、繪圖任務。調用glClear()方法可以實現清空緩沖區任務,使用gluLookAt()方法可以設置攝像機位置。其繪圖流程圖如圖7所示。 圖7 上位機繪圖流程圖 在繪圖時,首先根據加速度計算得到的角度數據計算模型坐標系的單位向量,并計算模型四邊形頂點坐標,將得到的數據放入Buffer準備繪圖。繪圖主要代碼略——編者注。 首先申請一個ByteBuffer,并設置Buffer中點的繪圖順序,然后將坐標以及顏色數據轉換為float型Buffer,并將頂點坐標放入到floatbuffer中,其次使用glColor4f()設置繪圖時使用的顏色,也可使用顏色數組給每個頂點分別設置顏色,最后使用glVertexPointer()將數據放入繪圖緩沖區中,并使用glDrawArrays()進行圖像繪制。主要繪制的圖像有5個坐標軸,每個坐標軸有兩個頂點,是以GL_LINES的形式繪制;還有一個模型四邊形,4個頂點以GL_TRIANGLE_STRIP的形式繪制。 3實驗結果及分析 在跌倒檢測前首先將數據保存在文件中并分析,以確定設備正常工作并得到傳感器的各狀態數值。 根據MMA7260用戶手冊,對任意方向,V0=1.65 V,R=0.8 V/g。由于采用分壓電路,CC3200中的Vout是實際Vout的一半。同時,由于不同設備的差異性,V0并不嚴格等于1.65 V,R也不嚴格等于0.8 V/g,并且不同方向的數值并不嚴格相同。對于本系統,因使用了分壓電路,以上數值均應減少一半。將MMA7260穩定放在標準位置,即讓芯片的x軸、y軸、z軸分別處于與重力方向相同并固定,經過分壓電路的分壓處理,得到的數值如表1所列。當x軸上加速度為 -1g時,其電壓平均值為1.011 V;當加速度為0時,其電壓平均值為0.733 V,當加速度為1g時,其電壓平均值為0.42 V,并計算得到其分辨率為0.275 V/g,即加速度每變化1g,x軸電壓值變化0.275 V。同樣,與x軸類似,當y軸與z軸上加速度為0時,其電壓值分別為0.770 V和0.788 V,y軸和z軸上分辨率同樣為0.275 V。三軸加速度電壓如表1所列。 表1 三軸加速度電壓 實際加速度為0時,電壓值和分辨率都與用戶手冊誤差較大。因此,由2.1節可知,對于3個方向上的加速度值的計算公式為: 實現硬件連接、組網與程序之后,對其進行測試。當系統正常運行時,手機端軟件界面如圖8所示。界面中顯示了連接狀態、連接IP和端口,中間黑色框即為OpenGL的View窗口,顯示了芯片的姿態;同時,還顯示了3個軸方向得到的加速度電壓值,以及計算得到的模型坐標系3個軸與重力方向的角度值。 圖8 不同狀態時系統界面 當MMA7260處于不同姿態時,手機上顯示的姿態與MMA7260的姿態有較為一致的變化,MMA7260芯片處于不同姿態時的結果略——編者注。 從上述結果可以看到,手機界面中顯示的四邊形姿態與MMA7260芯片姿態基本一致,能夠較準確地識別姿態。 將MMA7260和CC3200固定在一起,并將CC3200板與人體平行,佩戴在身體腰部靠下位置(這一部位比較穩定,在一般的彎腰、行進、坐下等動作中對跌倒判斷影響比較小)。 結語 本文利用SimpleLink Wi-Fi CC3200微控制器、MMA7260和Android智能終端設備,設計了一種跌倒檢測系統,能夠較好地檢測到人體摔倒并進行警報。系統對CC3200發送的加速度數據進行處理,通過OpenGL將芯片的姿態顯示在窗口中。通過對加速度數據進行分析,可以有效判斷出人體所處狀態,當摔倒時能夠及時作出判斷并發出報警。 參考文獻 [1] TI.CC3200 SimpleLink Wi-Fi and Internet-of-Things Solution,a Single-Chip Wireless MCU[EB/OL].[2015-09].http://www.ti.com/lit/ds/symlink/cc3200.pdf. [2] 陳鈺琨.LM4F232pQD與MMA7260加速度傳感器的跌倒檢測[J].單片機與嵌入式系統應用,2013(6):49-52. [3] TI.TI-RTOS 2.14 User’s Guide[EB/OL].[2015-09].http://www.ti.com/lit/ug/spruhd4j/spruhd4j.pdf. [4] TI.CC3200 SimpleLink Wi-Fi and Internet-of-Things Solution,a Single Chip WirelessMCU Technical Reference Manual[EB/OL].[2015-09].http://www.ti.com/lit/ug/swru367b/swru367b.pdf. 趙旭強、高天星(碩士研究生),馬忠梅(副教授):主要研究方向為嵌入式系統和物聯網應用。 Upper Computer Design of Fall Detection System Based on CC3200 and Android※ Zhao Xuqiang,Gao Tianxing,Ma Zhongmei (School of Computer Science and Technology,Beijing Institute of Technology,Beijing 100081,China) Abstract:Using a standard interface of OpenGL,Android system can support 3D graphics.In this paper,the four vertex coordinates of the chip quadrilateral model are calculated by processing data received from the lower computer of CC3200.OpenGL ES is applied to display this quadrangle in the window of Android system.The chip status can be presented in 3D form exactly in the window.By analyzing the data,whether the human has falling down can be judged efficiently. Key words:CC3200;Android;OpenGL;fall detection 收稿日期:(責任編輯:薛士然2015-09-20) 中圖分類號:TP368 文獻標識碼:A







