梁梓廷 葉軍 鄭樹?!£愌┧?/p>
摘要:人機交互技術(shù)逐步從以計算機為中心轉(zhuǎn)移到以人為中心,其中手勢識別技術(shù)已廣泛應用于電腦、手機等電子設(shè)備。該文介紹了一種基于Arduino的手勢識別控制裝置,傳感器通過12C總線與Arduino通信,然后將處理的結(jié)果傳輸給電腦對電腦加以控制。通過優(yōu)化手勢識別算法,提高手勢識別效率。設(shè)備具有接線簡單、操作簡便的特點。
關(guān)鍵詞:手勢識別;人機交互;Arduino單片機;九軸手勢傳感器
中圖分類號:TP393 文獻標識碼:A 文章編號:1009-3044(2017)18-0184-02
1概述
手勢識別是人機進行交互的一種方式,它在人民的生活中逐漸運用與流行起來,計算機的發(fā)展給手勢識別提供了強大的計算平臺,使得人與計算機的交互活動越來越頻繁。其目的是運用計算機通過某種手段分析出每個手勢的具體含義,進而獲知手勢發(fā)起者的整個表達,以達到實現(xiàn)人機交互的目的。常用的是通過傳感器采集數(shù)據(jù),然后進行數(shù)據(jù)的處理,再做出相應的操作。傳感器其方便與專用的特點使得操作起來較為方便。
2系統(tǒng)總體設(shè)計
手勢識別控制裝置如圖1所示,其由九軸手勢傳感器(PAJ7620U2)與Arduino Leonardo組成,Leonardo可以模擬為鼠標或者鍵盤連接到其他的微控制器并進行通信。手勢傳感器可以識別9個手勢,包括向上移動,向下移動,向左移動,向右移動,向前移動,向后移動,圓周順時針,圓周逆時針和波動。系統(tǒng)的其工作原理是:手勢信息通過簡單的訪問12C總線并與Arduino進行數(shù)據(jù)的交換,最后通過USB數(shù)據(jù)線來傳輸數(shù)據(jù)控制電腦。
3詳細設(shè)計方案
要通過Arduino Leonardo來實現(xiàn)對電腦等設(shè)備的控制,可以將Arduino模擬為一個虛擬的鼠標和鍵盤。通過USB通信功能可以直接通過USB接口來與電腦進行通信,本文的思路是借鑒鍵盤的特點,通過算法控制Arduino來輸出想要功能的ASCII碼從而來模擬鍵盤。在不同的系統(tǒng)下輸入鍵的ASCII碼值是一樣的,因此這就使得此控制系統(tǒng)具有了跨平臺的特性。目前常見的系統(tǒng)Windows、Linux、Unix、Mac 0S、Android等都可以進行支持,這使得該裝置的通用性與實用性進一步的提高,因此它可以應用在汽車或者助殘裝置等領(lǐng)域。
3.1主程序
首先要定義識別時間、進入時間與退出時間,其單位均為ms。識別時間與進人時間越短,識別的速度越快,但是同樣會使得識別的準確率降低。并且進入時間要小于識別時間,否則會出現(xiàn)識別不準確的現(xiàn)象。因此通過大量實驗結(jié)合實際情況,在綜合考慮識別的速度與準確性下,我們設(shè)定識別時間為500ms,進入時間為800ms,退出時間為1000ms,在實際的測試中發(fā)現(xiàn)有不錯的體現(xiàn)。
程序首先進入Setupf)函數(shù),目的是初始化鍵盤庫、初始化串口并且將波特率設(shè)定為9600。Arduino與電腦之間的通信通過串口通信來進行的。Arduino IDE里面自帶串口監(jiān)視器,通過串口檢測器我們可以清楚的看到傳感器所識別到的手勢。通過分析可以去除干擾的手勢來提高控制端輸出的準確率。
以上程序為loopO函數(shù)內(nèi)的一部分,即初始化之后loop()讓編寫的程序循環(huán)地被執(zhí)行,使用它來運轉(zhuǎn)Arduino。Loop與set-up()函數(shù)也是Arduino編寫的時候必須要有的函數(shù),否則程序無法編譯通過提示錯誤,Arduino自帶循環(huán)函數(shù)。9軸的手勢傳感器必定會有九種輸出,那么選擇switch()選擇語句是非常合適的。通過paj7620ReadReg函數(shù)來讀取傳感器返回來的值,paj7620ReadReg是在傳感器頭文件里面已經(jīng)定義好的函數(shù)。
傳感器庫文件內(nèi)部已經(jīng)定義了相應的函數(shù),其中最主要的為WriteReg函數(shù)與ReadReg函數(shù)其分別為讀取與寫入函數(shù)。在識別到“右”信號的時候,先進行進入延時,在800ms的延時之后,再次的檢測傳感器的數(shù)值如果是“靠近”信號那說明此時用戶想輸出的是“靠近”指令下的控制命令,如果是“遠離”信號,則輸出的“遠離”指令下的控制命令。因為通過測試發(fā)現(xiàn)在執(zhí)行“遠離”與“靠近”的指令的時候用戶可能會從傳感器的右側(cè)、左側(cè)、上側(cè)或者下側(cè)進入來輸入“遠離”或者“靠近”的手勢,因此需要去除一開始的錯誤信號。同樣“左”、“上”、“下”手勢都是如此,和“右”手勢一樣的思路。
3.2相關(guān)子程序
當Arduino通過分析后確認用戶輸人的順時針手勢后,會進入以下的子程序,在子程序里面就進行鍵盤的模擬。它既可以完成組合間的設(shè)計也可以進行,單獨鍵盤的模擬。對于組合鍵,程序依次的輸入相應的按鍵的ASCII值后,延時一段時間。延時的目的是讓其能在一個時間段內(nèi)穩(wěn)定的同時輸出,在完成一次操作后通過Keyboard.releaseAll()函數(shù)來釋放所有的鍵盤值,即停止輸出此組合鍵的ASCII碼,單鍵盤的模擬就可以使用Keyboard.press()函數(shù)直接實現(xiàn)。延時一段時間后就可以進行鍵盤的釋放,來實現(xiàn)相應的功能。
表1是本文通過模擬鍵盤的功能實現(xiàn)的對電腦的控制,對于手勢設(shè)定的功能基本上符合日常生活中的使用情況。通過模擬可以實現(xiàn)對電腦鍵盤的模擬能夠?qū)崿F(xiàn)圖片的切換與放大縮小、網(wǎng)頁的瀏覽與方法縮小、視頻的快進快退、退出確認等功能。
4總結(jié)
本文運用Arduino單片機與PAJ7620U2九軸手勢傳感器,編程實現(xiàn)了對電腦的控制。可以實現(xiàn)對應的圖片的切換、網(wǎng)頁的瀏覽、視頻的快進快退、退出確認、放大縮小等功能。通過由于ASCII碼的通用性,使得其在其他的平臺上都可以使用,因此使得其通用性與實用性大大的提高。在兼顧識別速度的同時也保證了識別的準確率。但是反應速度不迅速,在要求不高的場合可以使用。endprint