用加速度傳感器來進行手勢識別器的設計
發布時間:2008-10-22 來源:中電網
中心論題:
- 手勢識別的控製原理
- 係統描述
- 硬件描述
- 軟件描述
- 單片機硬件初始化、數據采集、動作檢測
- 演示終端
解決方案:
- 利用三軸加速度的值來判定對物體運動預定義的六種姿勢
- 係統由CT-298單片機、 MM-2860加速度傳感器、演示終端三個部分組成
引言
手機、MP3播放器、硬盤播放器、數碼相機、PDA等設備都是通過導航鍵對其進行控製的。目前比較流行的導航鍵控製方式有四維鍵、搖杆,這是最常見的兩種導航鍵,此外還有一些手機上有很新穎的導航鍵設計,例如:LG-KG70的滾軸鍵、LG-KE608的轉盤設計、索愛W830的觸摸式、多普達D802的de飛fei梭suo滾gun輪lun等deng等deng。這zhe裏li,我wo們men用yong加jia速su度du傳chuan感gan器qi設she計ji一yi種zhong看kan不bu見jian的de導dao航hang鍵jian來lai代dai替ti四si維wei鍵jian的de功gong能neng,這zhe種zhong方fang案an更geng能neng滿man足zu消xiao費fei者zhe的de好hao奇qi心xin,滿man足zu消xiao費fei者zhe追zhui逐zhu時shi尚shang的de需xu求qiu。
手勢識別的控製原理
本係統利用三軸加速度的值來判定對物體運動預定義的六種姿勢。首先,分別對三個軸采樣,每個軸各獲得50個數據;然後,分別對每個軸上的數據進行處理來判定是否發生了預定義的動作。動作定義在下麵的部分說明,這裏僅用Y軸來說明判定的原理。
獲得Y軸上的50個數據存放到數組y_data[N]中,將這50個數求和取平均值。若y_data[N]中數據最大值與最小值之差在一個設定的閾值之內,則認為物體在Y軸向上是沒有動作的、靜止的,此時更新y_init值為y_data[N]求得的平均值;否則,y_data[N]中數據最大值與最小值之差超出一個設定的閾值,則認為物體是運動的,y_init值不變,仍然為上一次靜止狀態時的值。
圖1和圖2是Y軸分別向左、向右搖動時采樣得到的加速度抽樣值y_data[N]。圖中紅線代表上一次靜止時的采樣值,藍線代表運動時的采樣值。圖1為向左搖動時的值,可以明顯看出加速度的值較靜止時有明顯的變化,向著增大的方向變。


從圖1和圖2中(zhong)可(ke)以(yi)看(kan)出(chu),兩(liang)條(tiao)黑(hei)線(xian)之(zhi)間(jian)的(de)數(shu)據(ju)很(hen)難(nan)斷(duan)定(ding)是(shi)哪(na)個(ge)動(dong)作(zuo)產(chan)生(sheng)的(de),因(yin)為(wei)兩(liang)個(ge)動(dong)作(zuo)都(dou)可(ke)能(neng)產(chan)生(sheng)這(zhe)樣(yang)的(de)值(zhi)。所(suo)以(yi),利(li)用(yong)黑(hei)線(xian)之(zhi)外(wai)的(de)數(shu)據(ju)來(lai)判(pan)定(ding)是(shi)向(xiang)右(you)還(hai)是(shi)向(xiang)左(zuo)搖(yao)。因(yin)為(wei)對(dui)於(yu)這(zhe)兩(liang)個(ge)動(dong)作(zuo),黑(hei)線(xian)之(zhi)外(wai)的(de)數(shu)據(ju)有(you)明(ming)顯(xian)的(de)差(cha)異(yi),數(shu)據(ju)相(xiang)差(cha)很(hen)多(duo)。對(dui)於(yu)圖(tu)1這些數據大於150,圖2中這些數據小於90。因此這些數據至少相差60,可以很容易地將向左、向右的兩個動作區分開。
本係統就是根據這樣的原理來實現的,首先分別設定向左、向右搖時的閾值和兩個計數器;然後,將新采樣得到的50個值存放在y_data[N]中,將每個值與靜止時的值y_init比較,如果數據超出某個閾值,則在相應的計數器上累加,直到所有50個數全部比較完畢;最後,根據計數器值的大小來判定執行了某個動作。
同理,利用Z軸的采樣值來判定向上、向下搖,利用X、Y兩個軸來判定執行圖片向左翻轉還是向右翻轉,這裏略去。
係統描述
a.係統組成及功能
係統由三個部分組成:CT-298單片機控製部分、 MM-2860加速度傳感器部分、演示終端,係統框圖如圖3所示。

CT-298單片機控製部分主要負責傳感器數據的A/D變換、動作檢測、與演示終端進行數據通信。MM-2860加(jia)速(su)度(du)傳(chuan)感(gan)器(qi)部(bu)分(fen)負(fu)責(ze)加(jia)速(su)度(du)值(zhi)的(de)測(ce)量(liang)並(bing)將(jiang)其(qi)轉(zhuan)換(huan)為(wei)電(dian)壓(ya)值(zhi)。演(yan)示(shi)終(zhong)端(duan)負(fu)責(ze)處(chu)理(li)從(cong)單(dan)片(pian)機(ji)傳(chuan)來(lai)的(de)動(dong)作(zuo)類(lei)型(xing)並(bing)執(zhi)行(xing)相(xiang)應(ying)的(de)動(dong)作(zuo),同(tong)時(shi)向(xiang)單(dan)片(pian)機(ji)返(fan)回(hui)進(jin)出(chu)二(er)級(ji)菜(cai)單(dan)的(de)指(zhi)令(ling)。對(dui)於(yu)CT-298單片機係統更詳細的設計將在下麵的部分介紹,這裏首先介紹一下本係統設計的動作姿勢及代碼,以及與演示係統交互的指令。
b.預定義的動作
係統設計了六種動作,他們分別是左搖、右搖、下搖、上搖、圖片左轉、圖片右轉。圖4中的圖形象地說明了其中的兩個動作,其它的動作與此類似。

係統還為每個動作定義了相應的動作代碼,見表1。

當單片機檢測到某個動作時會將相應的值賦給變量type_action,之後通過SCI將type_action的值發送到演示終端。如果用戶執行的動作不在這六個動作之中,則將NO_ACTION賦給type_action,表示演示終端不執行任何動作。
係統還定義了單片機與演示終端交互的指令,用於係統在主菜單和二級菜單之間的界麵切換,指令從演示係統通過SCI傳給單片機,單片機接收到之後進入或退出二級菜單,見表2。

這裏僅定義了一個二級菜單,即圖片菜單,係統還可以定義更多的二級菜單和三級菜單。此外,需要說明動作MOVE_TURN_LEFT、MOVE_TURN_RIGHT用於圖片翻轉,僅在圖片菜單中可用,在主菜單不可用。動作下搖執行的是換下一幅圖片,動作上搖執行的是退出圖片菜單。
c.演示終端
本係統目標定位在便攜式消費類電子產品上,因此在軟件應用程序上必須選擇具有廣泛基礎的應用平台。由於近年來J2ME在便攜式終端中的應用非常廣泛,因此本係統也采用了J2ME平台進行開發。通過比較,選擇了J2ME的WTK開發包,它是專門針對移動無線設備而設計的開發包,並提供了一個統一的平台。在WTK的框架下開發出來的java程序可以被眾多的移動設備所支持,所以能夠有效解決兼容性的問題。
在WTK下我們利用默認的一個手機樣機的仿真器DefaultColorPhone進行開發,DefaultColorPhone的樣子如圖6。

仿真器的外觀和操作類似一部移動電話,但是並不代表某個特定的設備,而是提供對其所支持的API 的正確實現,每個命令按鈕對應著相應的API函數。從圖6中可以看到手機的導航鍵,我們更改了導航鍵的API函數,使其從鼠標單擊觸發的方式轉換為串口動作代碼控製。首先,我們編寫了J2ME的串口接收程序,用於接收從單片機傳來的單字節的type_action值;然後將type_action以參數的形式傳給API,手機根據不同的type_action值執行不同的動作,包括菜單上下翻、進出二級子菜單、圖片翻轉等。手機動作與type_action的對應關係如表3。

根據type_action的值,在手機界麵上產生相應的動作,手機界麵發送不同的變化。演示終端的具體實現在下麵的內容詳細介紹。
硬件描述
係統硬件分為兩個部分:CT-298和MM-2860。
CT-298是由MC9S08QG單片機構成、由USB總線電源供電的小型評估板。CT-298上安裝有按鈕開關、LED燈、蜂鳴器等作為開發的輸入輸出器件。同時,USB-COM轉換電路采用了FTDI公司製造的FT232R,容許單片機與電腦之間通過USB接口進行串行通信。BDM用於代碼的燒寫及係統的調試。
MM-2860是含有Freescale公司製造的MMA7260Q型三軸小量程加速度傳感器的模塊,它可以直接安裝在CT-298為其設計的插口上。MM-2860的電源是由CT-298上的MC9S08QG8單片機的PTB5端口來控製的,當PTB5端口為L時電源接通。此外,g-SELECT開關是選擇傳感器靈敏度的開關,使用時將MM-2860插入到CT-298的接口中即可。本係統采用加速度傳感器的靈敏度選擇為800 mV/g。
軟件描述
單片機主程序的流程如圖7所示。

係統上電後,首先要對單片機的硬件係統進行初始化、配置寄存器等操作,之後才可以進行數據采集,將加速度的值進行A/Dzhuanhuan,dedaolianghuadezhi。tupiancaidanshierjicaidan,ruguomeiyoujiedaoyanshixitongchuangeidanpianjijinruerjicaidandezhiling,zedanpianjiyizhizaizhuchengxuyunxing,buduandicaijiA/D值、進行動作判定,並向演示係統發送type_action的指令。演示係統可根據接收到的type_action的de類lei型xing采cai取qu相xiang應ying的de動dong作zuo。如ru果guo單dan片pian機ji接jie收shou到dao進jin入ru二er級ji菜cai單dan的de命ming令ling,則ze進jin入ru圖tu片pian菜cai單dan,同tong時shi也ye執zhi行xing類lei似si於yu主zhu程cheng序xu的de動dong作zuo判pan定ding程cheng序xu,並bing不bu斷duan更geng新xinA/D采樣值,發送type_action,直到接收到退出二級菜單指令才退出。下麵詳細介紹一下各個功能模塊的具體設置。
單片機硬件初始化
單片機係統主要的工作有:將加速度傳感器的模擬數據進行A/D轉換、向演示係統發送type_action的動作類型、接收演示係統發來的進出二級菜單的指令、設置采樣值,除此之外還需要對係統時鍾、外部設備(燈,buzzer)進行配置。根據單片機的主要工作內容選擇單片機內部的功能設備,包括A/D轉換器、模定時器、串行通信模塊(SCI)、內部時鍾源模塊。
數據采集
係統設置的采樣頻率為200Hz,每秒鍾分別對X、Y、Z 三軸采樣200個數據,因此定義了三個大小為N的數組對數據進行緩存,他們是:
char x_data[N];
char y_data[N];
char z_data[N];
這裏N取50,每0.25s存取一次,1s鍾可以存取4次,保證采樣率為200。函數void acce_meas(void) 負責將采樣的數據分別放到這三個數組中,下麵是程序的具體實現:
for(j=0;j<N;j++) //采集N個數據
{
for(i=0;i<3;i++)
{
if(i==0)
{
adc_go(0); //選擇A/D信道0
x_data[j]= ADC_val_L; //X軸
}
else if(i==1 )
{
adc_go(6); //選擇A/D信道6
y_data[j]= ADC_val_L; //Y軸
}
else
{
adc_go(7); //選擇A/D信道7
z_data[j]= ADC_val_L; //Z軸
}
}
delay(); //延時函數,用來設定采樣率
}
動作檢測
動作檢測主要是用獲得的三組數據值x_data[N]、y_data[N]、z_data[N]來判定當前動作是係統設定動作中的哪一個,如果符合,則發送這個動作對應的預定義值給演示終端,否則發送NO_ACTION。type_dectction()用來實現動作檢測,其中type_move為函數內部變量,用於記錄動作代碼。type_dectction()進行動作檢測的流程如圖8所示。

演示終端
a.J2ME平台開發環境配置
進行J2ME的開發需要從網絡上下載免費的開發環境。運行Eclipse後進行最後的配置:Window->preferences->J2ME->Platform Component然後右鍵選擇 Wireless Toolkil,再選擇彈出菜單中的 Add Wireless Toolkil,選擇剛剛安裝的J2ME Toolkit的安裝路徑: C:\WTK22,這樣基本配置就完成了。
J2ME的WTK開發包是專門針對移動無線設備而設計的開發包,並提供了一個統一的平台。在WTK的框架下開發出來的java程序可以被眾多的移動設備所支持,能夠有效解決兼容性的問題。
b.軟件應用程序
程序分為主進程、串口監視模塊和定製化用戶界麵三大部分,分別基於J2ME不同的類庫派生而成,三部分之間通過消息機製相互聯係,共同構成整個程序的運行周期。具體每個模塊所實現的功能參考下節內容。
c.軟件應用程序的組織結構
本軟件應用程序在WTK的手機仿真器下進行設計,分為Base和display兩個package。在Base Package中包含MainRoutine.java和RS232Port.java兩個java文件;在display Package中的文件較多,主要實現了UI和基本的key響應。下麵介紹軟件部分的實現方法:
MainRoutine類:MainRoutine為程序的入口類,它整合了程序中的所有的對象。MainRoutine派生於MIDlet類,重載實現了MIDlet中的startApp、pauseApp、destroyApp等方法,並且在constructor中加入了exitCommand命令,從而實現了手機的關機功能。
可以看出MainRoutine實現了程序的入口和退出,並同時標誌了程序的基本框架,給具體的功能應用打下了堅實的基礎。
vCanvas類:vCanvas繼承了Canvas類,並增加了externalMsg方法。之所以在其中增加externalMsg方法,是因為其超類Canvas不能動態地響應key,而我們對Canvas的要求是能夠通過對串口導入的數據(或按鍵)得到的keyCode做出相應的動作,比如圖片的翻轉、文本的滾動等等。於是,我們可以通過vCanvas派生出一係列的子類,實現我們的具體要求,為將來的開發提供了方便。
DisplayItem類:DisplayItem是基礎類,提供了通用的string數據組合。該類的構造方法中需要輸入shortText、longText和extra三個string參數,這樣就保證了每個DisplayItem都可以返回三個不同長度的文本信息,在不同的場合使用。其中shortText用於UI中的標題顯示,longText為Item的主體內容,extra為Item的附加信息。 DisplayItem類在本係統中會被例化來描述菜單和子功能的內容,是應用廣泛的一個基礎類。
ImageCanvas類:ImageCanvas同樣繼承於基礎類vCanvas,它的主要功能是實現了對圖片的瀏覽及旋轉、鏡像等基本操作。
考慮到目前使用手機瀏覽圖片、paishetupiandeduofangxiangxing,ruguonenggoutongguojiasuduchuanganqizidongxiaozhengtupiandefangxiang,shitazidongmanzuwomenxiangyaodefangxiang,namewomenjiumianchulehenduobubiyaodemafan。yushiwomenduitupiandeliulangongnengmokuaizengjialexiangzuohuozhexiangyouxuanzhuan90°的功能。這樣用戶就會驚喜地發現無論他的手機怎樣擺放,顯示的圖片將永遠保持與地麵垂直。
ListCanvas類:ListCanvas提供了主畫麵的顯示能力,並將用戶操作派生到內部聚合成員上麵去。具體功能的Item將包含在ListCanvas之中,每一個Item擁有顯示在屏幕上的ShortItem,顯示在detail screen中的LongText,還有不被顯示的ExtraText,當然其信息我們也是可以得到的。在ListCanvas中,我們可以用“右鍵”顯示Item的詳細信息,也可以用SELECT鍵來標記每個Item。
ItemListCanvas類:ItemListCanvas同樣繼承了vCanvas類,實現了多條目文本瀏覽的功能,構造方法的輸入依次為Display、Displayable、Font、Title和ItemVector。將多條String構造為一個Vector傳遞給ItemListCanvas後,該類能夠提供一個多條目文本實現的用戶界麵。本係統的“關於本係統”子功能就是通過實例化該類得到的。
結論
本係統采用Freescale的單片機MC9S08QG和加速度傳感器MMA7260Q實現了便攜式手持設備的手勢控製,並采用了開放的J2ME平(ping)台(tai)實(shi)現(xian)了(le)終(zhong)端(duan)應(ying)用(yong)程(cheng)序(xu)。係(xi)統(tong)完(wan)整(zheng),實(shi)用(yong)性(xing)強(qiang),成(cheng)本(ben)低(di)廉(lian),在(zai)滿(man)足(zu)用(yong)戶(hu)基(ji)本(ben)操(cao)作(zuo)需(xu)要(yao)的(de)同(tong)時(shi),增(zeng)加(jia)了(le)移(yi)動(dong)設(she)備(bei)操(cao)作(zuo)的(de)趣(qu)味(wei)性(xing)和(he)靈(ling)活(huo)性(xing)。同(tong)時(shi),加(jia)速(su)度(du)傳(chuan)感(gan)器(qi)MMA7260Qjiaoxiaodetijihedutedejiedianmoshigengshiqizaiyidongshebeideyingyongzhongyouzhejidadeyoushi。keyiyujian,zaiweilaideshouchishebeixitongzhonghuidaliangcaiyongleisideshoushishibiegongneng,yincijuyouguangkuodeshichangyingyongqianjing。
- 噪聲中提取真值!瑞盟科技推出MSA2240電流檢測芯片賦能多元高端測量場景
- 10MHz高頻運行!氮矽科技發布集成驅動GaN芯片,助力電源能效再攀新高
- 失真度僅0.002%!力芯微推出超低內阻、超低失真4PST模擬開關
- 一“芯”雙電!聖邦微電子發布雙輸出電源芯片,簡化AFE與音頻設計
- 一機適配萬端:金升陽推出1200W可編程電源,賦能高端裝備製造
- 貿澤EIT係列新一期,探索AI如何重塑日常科技與用戶體驗
- 算力爆發遇上電源革新,大聯大世平集團攜手晶豐明源線上研討會解鎖應用落地
- 創新不止,創芯不已:第六屆ICDIA創芯展8月南京盛大啟幕!
- AI時代,為什麼存儲基礎設施的可靠性決定數據中心的經濟效益
- 矽典微ONELAB開發係列:為毫米波算法開發者打造的全棧工具鏈
- 車規與基於V2X的車輛協同主動避撞技術展望
- 數字隔離助力新能源汽車安全隔離的新挑戰
- 汽車模塊拋負載的解決方案
- 車用連接器的安全創新應用
- Melexis Actuators Business Unit
- Position / Current Sensors - Triaxis Hall




