用加速度傳感器來進(jìn)行手勢識別器的設(shè)計
仿真器的外觀和操作類似一部移動電話,但是并不代表某個特定的設(shè)備,而是提供對其所支持的API 的正確實現(xiàn),每個命令按鈕對應(yīng)著相應(yīng)的API函數(shù)。從圖6中可以看到手機(jī)的導(dǎo)航鍵,我們更改了導(dǎo)航鍵的API函數(shù),使其從鼠標(biāo)單擊觸發(fā)的方式轉(zhuǎn)換為串口動作代碼控制。首先,我們編寫了J2ME的串口接收程序,用于接收從單片機(jī)傳來的單字節(jié)的type_action值;然后將type_action以參數(shù)的形式傳給API,手機(jī)根據(jù)不同的type_action值執(zhí)行不同的動作,包括菜單上下翻、進(jìn)出二級子菜單、圖片翻轉(zhuǎn)等。手機(jī)動作與type_action的對應(yīng)關(guān)系如表3。
根據(jù)type_action的值,在手機(jī)界面上產(chǎn)生相應(yīng)的動作,手機(jī)界面發(fā)送不同的變化。演示終端的具體實現(xiàn)在下面的內(nèi)容詳細(xì)介紹。
硬件描述
系統(tǒng)硬件分為兩個部分:CT-298和MM-2860。
CT-298是由MC9S08QG單片機(jī)構(gòu)成、由USB總線電源供電的小型評估板。CT-298上安裝有按鈕開關(guān)、LED燈、蜂鳴器等作為開發(fā)的輸入輸出器件。同時,USB-COM轉(zhuǎn)換電路采用了FTDI公司制造的FT232R,容許單片機(jī)與電腦之間通過USB接口進(jìn)行串行通信。BDM用于代碼的燒寫及系統(tǒng)的調(diào)試。
MM-2860是含有Freescale公司制造的MMA7260Q型三軸小量程加速度傳感器的模塊,它可以直接安裝在CT-298為其設(shè)計的插口上。MM-2860的電源是由CT-298上的MC9S08QG8單片機(jī)的PTB5端口來控制的,當(dāng)PTB5端口為L時電源接通。此外,g-SELECT開關(guān)是選擇傳感器靈敏度的開關(guān),使用時將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)行動作判定,并向演示系統(tǒng)發(fā)送type_action的指令。演示系統(tǒng)可根據(jù)接收到的type_action的類型采取相應(yīng)的動作。如果單片機(jī)接收到進(jìn)入二級菜單的命令,則進(jìn)入圖片菜單,同時也執(zhí)行類似于主程序的動作判定程序,并不斷更新A/D采樣值,發(fā)送type_action,直到接收到退出二級菜單指令才退出。下面詳細(xì)介紹一下各個功能模塊的具體設(shè)置。
單片機(jī)硬件初始化
單片機(jī)系統(tǒng)主要的工作有:將加速度傳感器的模擬數(shù)據(jù)進(jìn)行A/D轉(zhuǎn)換、向演示系統(tǒng)發(fā)送type_action的動作類型、接收演示系統(tǒng)發(fā)來的進(jìn)出二級菜單的指令、設(shè)置采樣值,除此之外還需要對系統(tǒng)時鐘、外部設(shè)備(燈,buzzer)進(jìn)行配置。根據(jù)單片機(jī)的主要工作內(nèi)容選擇單片機(jī)內(nèi)部的功能設(shè)備,包括A/D轉(zhuǎn)換器、模定時器、串行通信模塊(SCI)、內(nèi)部時鐘源模塊。
數(shù)據(jù)采集
系統(tǒng)設(shè)置的采樣頻率為200Hz,每秒鐘分別對X、Y、Z 三軸采樣200個數(shù)據(jù),因此定義了三個大小為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ù)分別放到這三個數(shù)組中,下面是程序的具體實現(xiàn):
for(j=0;j
{
for(i=0;i3;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è)定采樣率
}
傳感器相關(guān)文章:傳感器工作原理
風(fēng)速傳感器相關(guān)文章:風(fēng)速傳感器原理 蜂鳴器相關(guān)文章:蜂鳴器原理 加速度計相關(guān)文章:加速度計原理
評論