你的位置:首頁 > 傳感技術(shù) > 正文

用加速度傳感器來進(jìn)行手勢識別器的設(shè)計(jì)

發(fā)布時(shí)間:2008-10-22 來源:中電網(wǎng)

中心論題:

  • 手勢識別的控制原理
  • 系統(tǒng)描述
  • 硬件描述
  • 軟件描述
  • 單片機(jī)硬件初始化、數(shù)據(jù)采集、動(dòng)作檢測
  • 演示終端

解決方案:

  • 利用三軸加速度的值來判定對物體運(yùn)動(dòng)預(yù)定義的六種姿勢
  • 系統(tǒng)由CT-298單片機(jī)、 MM-2860加速度傳感器、演示終端三個(gè)部分組成

  
引言
手機(jī)、MP3播放器、硬盤播放器、數(shù)碼相機(jī)、PDA等設(shè)備都是通過導(dǎo)航鍵對其進(jìn)行控制的。目前比較流行的導(dǎo)航鍵控制方式有四維鍵、搖桿,這是最常見的兩種導(dǎo)航鍵,此外還有一些手機(jī)上有很新穎的導(dǎo)航鍵設(shè)計(jì),例如:LG-KG70的滾軸鍵、LG-KE608的轉(zhuǎn)盤設(shè)計(jì)、索愛W830的觸摸式、多普達(dá)D802的飛梭滾輪等等。這里,我們用加速度傳感器設(shè)計(jì)一種看不見的導(dǎo)航鍵來代替四維鍵的功能,這種方案更能滿足消費(fèi)者的好奇心,滿足消費(fèi)者追逐時(shí)尚的需求。
  
手勢識別的控制原理
本系統(tǒng)利用三軸加速度的值來判定對物體運(yùn)動(dòng)預(yù)定義的六種姿勢。首先,分別對三個(gè)軸采樣,每個(gè)軸各獲得50個(gè)數(shù)據(jù);然后,分別對每個(gè)軸上的數(shù)據(jù)進(jìn)行處理來判定是否發(fā)生了預(yù)定義的動(dòng)作。動(dòng)作定義在下面的部分說明,這里僅用Y軸來說明判定的原理。
  
獲得Y軸上的50個(gè)數(shù)據(jù)存放到數(shù)組y_data[N]中,將這50個(gè)數(shù)求和取平均值。若y_data[N]中數(shù)據(jù)最大值與最小值之差在一個(gè)設(shè)定的閾值之內(nèi),則認(rèn)為物體在Y軸向上是沒有動(dòng)作的、靜止的,此時(shí)更新y_init值為y_data[N]求得的平均值;否則,y_data[N]中數(shù)據(jù)最大值與最小值之差超出一個(gè)設(shè)定的閾值,則認(rèn)為物體是運(yùn)動(dòng)的,y_init值不變,仍然為上一次靜止?fàn)顟B(tài)時(shí)的值。
  
圖1和圖2是Y軸分別向左、向右搖動(dòng)時(shí)采樣得到的加速度抽樣值y_data[N]。圖中紅線代表上一次靜止時(shí)的采樣值,藍(lán)線代表運(yùn)動(dòng)時(shí)的采樣值。圖1為向左搖動(dòng)時(shí)的值,可以明顯看出加速度的值較靜止時(shí)有明顯的變化,向著增大的方向變。 

      

  
  

   
從圖1和圖2中可以看出,兩條黑線之間的數(shù)據(jù)很難斷定是哪個(gè)動(dòng)作產(chǎn)生的,因?yàn)閮蓚€(gè)動(dòng)作都可能產(chǎn)生這樣的值。所以,利用黑線之外的數(shù)據(jù)來判定是向右還是向左搖。因?yàn)閷τ谶@兩個(gè)動(dòng)作,黑線之外的數(shù)據(jù)有明顯的差異,數(shù)據(jù)相差很多。對于圖1這些數(shù)據(jù)大于150,圖2中這些數(shù)據(jù)小于90。因此這些數(shù)據(jù)至少相差60,可以很容易地將向左、向右的兩個(gè)動(dòng)作區(qū)分開。
  
本系統(tǒng)就是根據(jù)這樣的原理來實(shí)現(xiàn)的,首先分別設(shè)定向左、向右搖時(shí)的閾值和兩個(gè)計(jì)數(shù)器;然后,將新采樣得到的50個(gè)值存放在y_data[N]中,將每個(gè)值與靜止時(shí)的值y_init比較,如果數(shù)據(jù)超出某個(gè)閾值,則在相應(yīng)的計(jì)數(shù)器上累加,直到所有50個(gè)數(shù)全部比較完畢;最后,根據(jù)計(jì)數(shù)器值的大小來判定執(zhí)行了某個(gè)動(dòng)作。
  
同理,利用Z軸的采樣值來判定向上、向下?lián)u,利用X、Y兩個(gè)軸來判定執(zhí)行圖片向左翻轉(zhuǎn)還是向右翻轉(zhuǎn),這里略去。
  
系統(tǒng)描述
a.系統(tǒng)組成及功能
系統(tǒng)由三個(gè)部分組成:CT-298單片機(jī)控制部分、 MM-2860加速度傳感器部分、演示終端,系統(tǒng)框圖如圖3所示。 

  
CT-298單片機(jī)控制部分主要負(fù)責(zé)傳感器數(shù)據(jù)的A/D變換、動(dòng)作檢測、與演示終端進(jìn)行數(shù)據(jù)通信。MM-2860加速度傳感器部分負(fù)責(zé)加速度值的測量并將其轉(zhuǎn)換為電壓值。演示終端負(fù)責(zé)處理從單片機(jī)傳來的動(dòng)作類型并執(zhí)行相應(yīng)的動(dòng)作,同時(shí)向單片機(jī)返回進(jìn)出二級菜單的指令。對于CT-298單片機(jī)系統(tǒng)更詳細(xì)的設(shè)計(jì)將在下面的部分介紹,這里首先介紹一下本系統(tǒng)設(shè)計(jì)的動(dòng)作姿勢及代碼,以及與演示系統(tǒng)交互的指令。
  
b.預(yù)定義的動(dòng)作
系統(tǒng)設(shè)計(jì)了六種動(dòng)作,他們分別是左搖、右搖、下?lián)u、上搖、圖片左轉(zhuǎn)、圖片右轉(zhuǎn)。圖4中的圖形象地說明了其中的兩個(gè)動(dòng)作,其它的動(dòng)作與此類似。 

    
 

系統(tǒng)還為每個(gè)動(dòng)作定義了相應(yīng)的動(dòng)作代碼,見表1。 

  
當(dāng)單片機(jī)檢測到某個(gè)動(dòng)作時(shí)會(huì)將相應(yīng)的值賦給變量type_action,之后通過SCI將type_action的值發(fā)送到演示終端。如果用戶執(zhí)行的動(dòng)作不在這六個(gè)動(dòng)作之中,則將NO_ACTION賦給type_action,表示演示終端不執(zhí)行任何動(dòng)作。
  
系統(tǒng)還定義了單片機(jī)與演示終端交互的指令,用于系統(tǒng)在主菜單和二級菜單之間的界面切換,指令從演示系統(tǒng)通過SCI傳給單片機(jī),單片機(jī)接收到之后進(jìn)入或退出二級菜單,見表2。

                                      
  
  
這里僅定義了一個(gè)二級菜單,即圖片菜單,系統(tǒng)還可以定義更多的二級菜單和三級菜單。此外,需要說明動(dòng)作MOVE_TURN_LEFT、MOVE_TURN_RIGHT用于圖片翻轉(zhuǎn),僅在圖片菜單中可用,在主菜單不可用。動(dòng)作下?lián)u執(zhí)行的是換下一幅圖片,動(dòng)作上搖執(zhí)行的是退出圖片菜單。
  
c.演示終端
本系統(tǒng)目標(biāo)定位在便攜式消費(fèi)類電子產(chǎn)品上,因此在軟件應(yīng)用程序上必須選擇具有廣泛基礎(chǔ)的應(yīng)用平臺(tái)。由于近年來J2ME在便攜式終端中的應(yīng)用非常廣泛,因此本系統(tǒng)也采用了J2ME平臺(tái)進(jìn)行開發(fā)。通過比較,選擇了J2ME的WTK開發(fā)包,它是專門針對移動(dòng)無線設(shè)備而設(shè)計(jì)的開發(fā)包,并提供了一個(gè)統(tǒng)一的平臺(tái)。在WTK的框架下開發(fā)出來的java程序可以被眾多的移動(dòng)設(shè)備所支持,所以能夠有效解決兼容性的問題。
  
在WTK下我們利用默認(rèn)的一個(gè)手機(jī)樣機(jī)的仿真器DefaultColorPhone進(jìn)行開發(fā),DefaultColorPhone的樣子如圖6。


仿真器的外觀和操作類似一部移動(dòng)電話,但是并不代表某個(gè)特定的設(shè)備,而是提供對其所支持的API 的正確實(shí)現(xiàn),每個(gè)命令按鈕對應(yīng)著相應(yīng)的API函數(shù)。從圖6中可以看到手機(jī)的導(dǎo)航鍵,我們更改了導(dǎo)航鍵的API函數(shù),使其從鼠標(biāo)單擊觸發(fā)的方式轉(zhuǎn)換為串口動(dòng)作代碼控制。首先,我們編寫了J2ME的串口接收程序,用于接收從單片機(jī)傳來的單字節(jié)的type_action值;然后將type_action以參數(shù)的形式傳給API,手機(jī)根據(jù)不同的type_action值執(zhí)行不同的動(dòng)作,包括菜單上下翻、進(jìn)出二級子菜單、圖片翻轉(zhuǎn)等。手機(jī)動(dòng)作與type_action的對應(yīng)關(guān)系如表3。

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

  
系統(tǒng)上電后,首先要對單片機(jī)的硬件系統(tǒng)進(jìn)行初始化、配置寄存器等操作,之后才可以進(jìn)行數(shù)據(jù)采集,將加速度的值進(jìn)行A/D轉(zhuǎn)換,得到量化的值。圖片菜單是二級菜單,如果沒有接到演示系統(tǒng)傳給單片機(jī)進(jìn)入二級菜單的指令,則單片機(jī)一直在主程序運(yùn)行,不斷地采集A/D值、進(jìn)行動(dòng)作判定,并向演示系統(tǒng)發(fā)送type_action的指令。演示系統(tǒng)可根據(jù)接收到的type_action的類型采取相應(yīng)的動(dòng)作。如果單片機(jī)接收到進(jìn)入二級菜單的命令,則進(jìn)入圖片菜單,同時(shí)也執(zhí)行類似于主程序的動(dòng)作判定程序,并不斷更新A/D采樣值,發(fā)送type_action,直到接收到退出二級菜單指令才退出。下面詳細(xì)介紹一下各個(gè)功能模塊的具體設(shè)置。
  
單片機(jī)硬件初始化
單片機(jī)系統(tǒng)主要的工作有:將加速度傳感器的模擬數(shù)據(jù)進(jìn)行A/D轉(zhuǎn)換、向演示系統(tǒng)發(fā)送type_action的動(dòng)作類型、接收演示系統(tǒng)發(fā)來的進(jìn)出二級菜單的指令、設(shè)置采樣值,除此之外還需要對系統(tǒng)時(shí)鐘、外部設(shè)備(燈,buzzer)進(jìn)行配置。根據(jù)單片機(jī)的主要工作內(nèi)容選擇單片機(jī)內(nèi)部的功能設(shè)備,包括A/D轉(zhuǎn)換器、模定時(shí)器、串行通信模塊(SCI)、內(nèi)部時(shí)鐘源模塊。
  
數(shù)據(jù)采集
系統(tǒng)設(shè)置的采樣頻率為200Hz,每秒鐘分別對X、Y、Z 三軸采樣200個(gè)數(shù)據(jù),因此定義了三個(gè)大小為N的數(shù)組對數(shù)據(jù)進(jìn)行緩存,他們是:
  
char x_data[N];
  
char y_data[N];
  
char z_data[N];
  
這里N取50,每0.25s存取一次,1s鐘可以存取4次,保證采樣率為200。函數(shù)void acce_meas(void) 負(fù)責(zé)將采樣的數(shù)據(jù)分別放到這三個(gè)數(shù)組中,下面是程序的具體實(shí)現(xiàn):
  
for(j=0;j<N;j++) //采集N個(gè)數(shù)據(jù)
{
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(); //延時(shí)函數(shù),用來設(shè)定采樣率
}
  
動(dòng)作檢測
動(dòng)作檢測主要是用獲得的三組數(shù)據(jù)值x_data[N]、y_data[N]、z_data[N]來判定當(dāng)前動(dòng)作是系統(tǒng)設(shè)定動(dòng)作中的哪一個(gè),如果符合,則發(fā)送這個(gè)動(dòng)作對應(yīng)的預(yù)定義值給演示終端,否則發(fā)送NO_ACTION。type_dectction()用來實(shí)現(xiàn)動(dòng)作檢測,其中type_move為函數(shù)內(nèi)部變量,用于記錄動(dòng)作代碼。type_dectction()進(jìn)行動(dòng)作檢測的流程如圖8所示。

  
演示終端
a.J2ME平臺(tái)開發(fā)環(huán)境配置
進(jìn)行J2ME的開發(fā)需要從網(wǎng)絡(luò)上下載免費(fèi)的開發(fā)環(huán)境。運(yùn)行Eclipse后進(jìn)行最后的配置:Window->preferences->J2ME->Platform Component然后右鍵選擇 Wireless Toolkil,再選擇彈出菜單中的 Add Wireless Toolkil,選擇剛剛安裝的J2ME Toolkit的安裝路徑: C:\WTK22,這樣基本配置就完成了。

J2ME的WTK開發(fā)包是專門針對移動(dòng)無線設(shè)備而設(shè)計(jì)的開發(fā)包,并提供了一個(gè)統(tǒng)一的平臺(tái)。在WTK的框架下開發(fā)出來的java程序可以被眾多的移動(dòng)設(shè)備所支持,能夠有效解決兼容性的問題。
  
b.軟件應(yīng)用程序
程序分為主進(jìn)程、串口監(jiān)視模塊和定制化用戶界面三大部分,分別基于J2ME不同的類庫派生而成,三部分之間通過消息機(jī)制相互聯(lián)系,共同構(gòu)成整個(gè)程序的運(yùn)行周期。具體每個(gè)模塊所實(shí)現(xiàn)的功能參考下節(jié)內(nèi)容。
  
c.軟件應(yīng)用程序的組織結(jié)構(gòu)
本軟件應(yīng)用程序在WTK的手機(jī)仿真器下進(jìn)行設(shè)計(jì),分為Base和display兩個(gè)package。在Base Package中包含MainRoutine.java和RS232Port.java兩個(gè)java文件;在display Package中的文件較多,主要實(shí)現(xiàn)了UI和基本的key響應(yīng)。下面介紹軟件部分的實(shí)現(xiàn)方法:

MainRoutine類:MainRoutine為程序的入口類,它整合了程序中的所有的對象。MainRoutine派生于MIDlet類,重載實(shí)現(xiàn)了MIDlet中的startApp、pauseApp、destroyApp等方法,并且在constructor中加入了exitCommand命令,從而實(shí)現(xiàn)了手機(jī)的關(guān)機(jī)功能。
  
可以看出MainRoutine實(shí)現(xiàn)了程序的入口和退出,并同時(shí)標(biāo)志了程序的基本框架,給具體的功能應(yīng)用打下了堅(jiān)實(shí)的基礎(chǔ)。

vCanvas類:vCanvas繼承了Canvas類,并增加了externalMsg方法。之所以在其中增加externalMsg方法,是因?yàn)槠涑怌anvas不能動(dòng)態(tài)地響應(yīng)key,而我們對Canvas的要求是能夠通過對串口導(dǎo)入的數(shù)據(jù)(或按鍵)得到的keyCode做出相應(yīng)的動(dòng)作,比如圖片的翻轉(zhuǎn)、文本的滾動(dòng)等等。于是,我們可以通過vCanvas派生出一系列的子類,實(shí)現(xiàn)我們的具體要求,為將來的開發(fā)提供了方便。

DisplayItem類:DisplayItem是基礎(chǔ)類,提供了通用的string數(shù)據(jù)組合。該類的構(gòu)造方法中需要輸入shortText、longText和extra三個(gè)string參數(shù),這樣就保證了每個(gè)DisplayItem都可以返回三個(gè)不同長度的文本信息,在不同的場合使用。其中shortText用于UI中的標(biāo)題顯示,longText為Item的主體內(nèi)容,extra為Item的附加信息。 DisplayItem類在本系統(tǒng)中會(huì)被例化來描述菜單和子功能的內(nèi)容,是應(yīng)用廣泛的一個(gè)基礎(chǔ)類。
 
ImageCanvas類:ImageCanvas同樣繼承于基礎(chǔ)類vCanvas,它的主要功能是實(shí)現(xiàn)了對圖片的瀏覽及旋轉(zhuǎn)、鏡像等基本操作。
  
考慮到目前使用手機(jī)瀏覽圖片、拍攝圖片的多方向性,如果能夠通過加速度傳感器自動(dòng)校正圖片的方向,使它自動(dòng)滿足我們想要的方向,那么我們就免除了很多不必要的麻煩。于是我們對圖片的瀏覽功能模塊增加了向左或者向右旋轉(zhuǎn)90°的功能。這樣用戶就會(huì)驚喜地發(fā)現(xiàn)無論他的手機(jī)怎樣擺放,顯示的圖片將永遠(yuǎn)保持與地面垂直。

ListCanvas類:ListCanvas提供了主畫面的顯示能力,并將用戶操作派生到內(nèi)部聚合成員上面去。具體功能的Item將包含在ListCanvas之中,每一個(gè)Item擁有顯示在屏幕上的ShortItem,顯示在detail screen中的LongText,還有不被顯示的ExtraText,當(dāng)然其信息我們也是可以得到的。在ListCanvas中,我們可以用“右鍵”顯示Item的詳細(xì)信息,也可以用SELECT鍵來標(biāo)記每個(gè)Item。

ItemListCanvas類:ItemListCanvas同樣繼承了vCanvas類,實(shí)現(xiàn)了多條目文本瀏覽的功能,構(gòu)造方法的輸入依次為Display、Displayable、Font、Title和ItemVector。將多條String構(gòu)造為一個(gè)Vector傳遞給ItemListCanvas后,該類能夠提供一個(gè)多條目文本實(shí)現(xiàn)的用戶界面。本系統(tǒng)的“關(guān)于本系統(tǒng)”子功能就是通過實(shí)例化該類得到的。
  
結(jié)論
本系統(tǒng)采用Freescale的單片機(jī)MC9S08QG和加速度傳感器MMA7260Q實(shí)現(xiàn)了便攜式手持設(shè)備的手勢控制,并采用了開放的J2ME平臺(tái)實(shí)現(xiàn)了終端應(yīng)用程序。系統(tǒng)完整,實(shí)用性強(qiáng),成本低廉,在滿足用戶基本操作需要的同時(shí),增加了移動(dòng)設(shè)備操作的趣味性和靈活性。同時(shí),加速度傳感器MMA7260Q較小的體積和獨(dú)特的節(jié)電模式更使其在移動(dòng)設(shè)備的應(yīng)用中有著極大的優(yōu)勢。可以預(yù)見,在未來的手持設(shè)備系統(tǒng)中會(huì)大量采用類似的手勢識別功能,因此具有廣闊的市場應(yīng)用前景。


 

要采購傳感器么,點(diǎn)這里了解一下價(jià)格!
特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
壓控振蕩器 壓力傳感器 壓力開關(guān) 壓敏電阻 揚(yáng)聲器 遙控開關(guān) 醫(yī)療電子 醫(yī)用成像 移動(dòng)電源 音頻IC 音頻SoC 音頻變壓器 引線電感 語音控制 元件符號 元器件選型 云電視 云計(jì)算 云母電容 真空三極管 振蕩器 振蕩線圈 振動(dòng)器 振動(dòng)設(shè)備 震動(dòng)馬達(dá) 整流變壓器 整流二極管 整流濾波 直流電機(jī) 智能抄表
?

關(guān)閉

?

關(guān)閉