手勢識別器終端的設(shè)計(jì)
引言
本文引用地址:http://m.butianyuan.cn/article/271880.htm手機(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)者追逐時尚的需求。
手勢識別的控制原理
本系統(tǒng)利用三軸加速度的值來判定對物體運(yùn)動預(yù)定義的六種姿勢。首先,分別對三個軸采樣,每個軸各獲得50個數(shù)據(jù);然后,分別對每個軸上的數(shù)據(jù)進(jìn)行處理來判定是否發(fā)生了預(yù)定義的動作。動作定義在下面的部分說明,這里僅用Y軸來說明判定的原理。
獲得Y軸上的50個數(shù)據(jù)存放到數(shù)組y_data[N]中,將這50個數(shù)求和取平均值。若y_data[N]中數(shù)據(jù)最大值與最小值之差在一個設(shè)定的閾值之內(nèi),則認(rèn)為物體在Y軸向上是沒有動作的、靜止的,此時更新y_init值為y_data[N]求得的平均值;否則,y_data[N]中數(shù)據(jù)最大值與最小值之差超出一個設(shè)定的閾值,則認(rèn)為物體是運(yùn)動的,y_init值不變,仍然為上一次靜止?fàn)顟B(tài)時的值。
圖1和圖2是Y軸分別向左、向右搖動時采樣得到的加速度抽樣值y_data[N]。圖中紅線代表上一次靜止時的采樣值,藍(lán)線代表運(yùn)動時的采樣值。圖1為向左搖動時的值,可以明顯看出加速度的值較靜止時有明顯的變化,向著增大的方向變。
從圖1和圖2中可以看出,兩條黑線之間的數(shù)據(jù)很難斷定是哪個動作產(chǎn)生的,因?yàn)閮蓚€動作都可能產(chǎn)生這樣的值。所以,利用黑線之外的數(shù)據(jù)來判定是向右還是向左搖。因?yàn)閷τ谶@兩個動作,黑線之外的數(shù)據(jù)有明顯的差異,數(shù)據(jù)相差很多。對于圖1這些數(shù)據(jù)大于150,圖2中這些數(shù)據(jù)小于90。因此這些數(shù)據(jù)至少相差60,可以很容易地將向左、向右的兩個動作區(qū)分開。
本系統(tǒng)就是根據(jù)這樣的原理來實(shí)現(xiàn)的,首先分別設(shè)定向左、向右搖時的閾值和兩個計(jì)數(shù)器;然后,將新采樣得到的50個值存放在y_data[N]中,將每個值與靜止時的值y_init比較,如果數(shù)據(jù)超出某個閾值,則在相應(yīng)的計(jì)數(shù)器上累加,直到所有50個數(shù)全部比較完畢;最后,根據(jù)計(jì)數(shù)器值的大小來判定執(zhí)行了某個動作。
同理,利用Z軸的采樣值來判定向上、向下?lián)u,利用X、Y兩個軸來判定執(zhí)行圖片向左翻轉(zhuǎn)還是向右翻轉(zhuǎn),這里略去。
系統(tǒng)描述
系統(tǒng)組成及功能
系統(tǒng)由三個部分組成:CT-298單片機(jī)控制部分、 MM-2860加速度傳感器部分、演示終端,系統(tǒng)框圖如圖3所示。
CT-298單片機(jī)控制部分主要負(fù)責(zé)傳感器數(shù)據(jù)的A/D變換、動作檢測、與演示終端進(jìn)行數(shù)據(jù)通信。MM-2860加速度傳感器部分負(fù)責(zé)加速度值的測量并將其轉(zhuǎn)換為電壓值。演示終端負(fù)責(zé)處理從單片機(jī)傳來的動作類型并執(zhí)行相應(yīng)的動作,同時向單片機(jī)返回進(jìn)出二級菜單的指令。對于CT-298單片機(jī)系統(tǒng)更詳細(xì)的設(shè)計(jì)將在下面的部分介紹,這里首先介紹一下本系統(tǒng)設(shè)計(jì)的動作姿勢及代碼,以及與演示系統(tǒng)交互的指令。
預(yù)定義的動作
系統(tǒng)設(shè)計(jì)了六種動作,他們分別是左搖、右搖、下?lián)u、上搖、圖片左轉(zhuǎn)、圖片右轉(zhuǎn)。圖4中的圖形象地說明了其中的兩個動作,其它的動作與此類似。
系統(tǒng)還為每個動作定義了相應(yīng)的動作代碼,見表1。
當(dāng)單片機(jī)檢測到某個動作時會將相應(yīng)的值賦給變量type_action,之后通過SCI將type_action的值發(fā)送到演示終端。如果用戶執(zhí)行的動作不在這六個動作之中,則將NO_ACTION賦給type_action,表示演示終端不執(zhí)行任何動作。
系統(tǒng)還定義了單片機(jī)與演示終端交互的指令,用于系統(tǒng)在主菜單和二級菜單之間的界面切換,指令從演示系統(tǒng)通過SCI傳給單片機(jī),單片機(jī)接收到之后進(jìn)入或退出二級菜單,見表2。
這里僅定義了一個二級菜單,即圖片菜單,系統(tǒng)還可以定義更多的二級菜單和三級菜單。此外,需要說明動作MOVE_TURN_LEFT、MOVE_TURN_RIGHT用于圖片翻轉(zhuǎn),僅在圖片菜單中可用,在主菜單不可用。動作下?lián)u執(zhí)行的是換下一幅圖片,動作上搖執(zhí)行的是退出圖片菜單。
演示終端
本系統(tǒng)目標(biāo)定位在便攜式消費(fèi)類電子產(chǎn)品上,因此在軟件應(yīng)用程序上必須選擇具有廣泛基礎(chǔ)的應(yīng)用平臺。由于近年來J2ME在便攜式終端中的應(yīng)用非常廣泛,因此本系統(tǒng)也采用了J2ME平臺進(jìn)行開發(fā)。通過比較,選擇了J2ME的WTK開發(fā)包,它是專門針對移動無線設(shè)備而設(shè)計(jì)的開發(fā)包,并提供了一個統(tǒng)一的平臺。在WTK的框架下開發(fā)出來的java程序可以被眾多的移動設(shè)備所支持,所以能夠有效解決兼容性的問題。
在WTK下我們利用默認(rèn)的一個手機(jī)樣機(jī)的仿真器DefaultColorPhone進(jìn)行開發(fā),DefaultColorPhone的樣子如圖6。
仿真器的外觀和操作類似一部移動電話,但是并不代表某個特定的設(shè)備,而是提供對其所支持的API 的正確實(shí)現(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。
萬能遙控器相關(guān)文章:萬能遙控器代碼
塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
加速度計(jì)相關(guān)文章:加速度計(jì)原理
評論