旋鈕、按鈕、手柄和觸摸屏是人類與機(jī)器和嵌入式設(shè)備的常用交互方式。不過,傳感器技術(shù)的最新進(jìn)展開辟了一條全新的道路,使開發(fā)人員可為產(chǎn)品添加三維 (3D) 手勢(shì)控制。
由于所采用的技術(shù)各不相同,購買和集成手勢(shì)控制器可能成本高昂。然而,市面上手勢(shì)傳感器技術(shù)種類繁多,從使用紅外 LED 和光電二極管來檢測(cè)動(dòng)作的經(jīng)濟(jì)型傳感器,到昂貴的手勢(shì)識(shí)別相機(jī)。紅外手勢(shì)傳感器經(jīng)濟(jì)實(shí)惠,可以通過數(shù)字接口與低成本微控制器連接,只需輔以簡(jiǎn)單的軟件,精度足以應(yīng)對(duì)許多應(yīng)用。
本文探討了使用Broadcom的APDS-9960進(jìn)行手勢(shì)控制的方法。幾乎所有嵌入式系統(tǒng)都可輕松集成這款紅外 (IR) 手勢(shì)控制傳感器。
基于 IR 的手勢(shì)傳感器
基于 IR 的手勢(shì)傳感器原理十分簡(jiǎn)單。用于檢測(cè)手勢(shì)時(shí),開發(fā)人員可能需要檢測(cè)以下幾種不同手勢(shì):
向上/向下
向左/向右
向前/向后
在上述每種情況下,傳感器都需要檢測(cè)運(yùn)動(dòng)方向,而這主要通過傳感器的兩大組件來實(shí)現(xiàn):一個(gè)發(fā)光二極管 (LED) 和多個(gè)定向光電二極管。定向光電二極管由至少四個(gè)光電二極管組成,分別置于距 IR LED 預(yù)定義距離處。例如,Broadcom 的 APDS-9960 環(huán)境光、接近度和手勢(shì)傳感器將四個(gè)光電二極管布置為菱形,每個(gè)二極管用于指示一個(gè)方向,分別為上、下、左和右(圖 1)。
圖 1:Broadcom 的 APDS-9960 具有一個(gè)集成 IR LED 和四個(gè)定向光電二極管,可檢測(cè)反射的 IR 能量以分析手勢(shì)。(圖片來源:Broadcom)
當(dāng) LED 發(fā)射紅外能量時(shí),除非遇到手等物體發(fā)生反射,否則能量就會(huì)發(fā)射至空氣中。光電二極管將檢測(cè)到不同強(qiáng)度的反射能量,具體取決于物體的位置。例如,相比位于手勢(shì)后邊緣的光電二極管,前邊緣光電二極管最初接收的反射能量較少,從而導(dǎo)致一個(gè)光電二極管的計(jì)數(shù)值比另一個(gè)高。在手勢(shì)動(dòng)作過程中,連續(xù)測(cè)量將導(dǎo)致不同位置的光電二極管檢測(cè)的反射能量強(qiáng)度不同,而分析該方向信息流即可確定手勢(shì)。
例如,若用戶用手從傳感器的頂部輕掃至底部,則在手勢(shì)動(dòng)作之初,下方光電二極管檢測(cè)的入射光比上方光電二極管更強(qiáng);在手勢(shì)動(dòng)作期間,手逐漸移動(dòng)到兩個(gè)二極管接收能量相等的點(diǎn);而在手勢(shì)動(dòng)作完成時(shí),下方光電二極管接收的反射光較弱,而上方光電二極管接收的更強(qiáng),此時(shí)兩光電二極管的曲線和相位完全反轉(zhuǎn)(圖 2)。
圖 2:Broadcom 的 APDS-9960 檢測(cè)到向下手勢(shì)將生成以上光電二極管曲線,其中主導(dǎo)曲線指示手勢(shì)方向。(圖片來源:Broadcom)
了解手勢(shì)數(shù)據(jù)的生成原理后,下一步就來看看如何連接到 APDS-9960。
連接 Broadcom 的 APDS-9960 手勢(shì)控制器
APDS-9960 采用 8 引腳表面貼裝 (SMD-8) 封裝,占用印刷電路板空間極?。▓D 3)。傳感器尺寸僅為 3.94 × 2.36 × 1.35 mm。該封裝包含正常電源和接地引腳、用于連接微控制器的 I2C 數(shù)字接口,以及用于定制 LED 驅(qū)動(dòng)電路的引腳。此外,該封裝還包含中斷引腳,可用于通知微控制器處理可用的手勢(shì)數(shù)據(jù)。
圖 3:APDS-9960 采用緊湊型表面貼裝 SMD-8 封裝,可最大限度減少電路板空間。(圖片來源:Broadcom)
構(gòu)建原型并連接 APDS-9960 有幾種不同選項(xiàng)可供選擇。例如,SparkFun的APDS-9960 評(píng)估板提供了包括 LED 驅(qū)動(dòng)電路在內(nèi)的小型分線板,以便實(shí)現(xiàn)開箱即用(圖 4)。開發(fā)人員只需焊接針座以通過旁路繞過電源和接地,并將 I2C 總線和可選的中斷引腳連接至微控制器,即可著手開發(fā)嵌入式軟件了。此外,SparkFun 評(píng)估板還包含安裝孔,若現(xiàn)有電路板有助于實(shí)現(xiàn)應(yīng)用,則可直接運(yùn)用到設(shè)計(jì)中。
圖 4:SparkFun 的 APDS-9960 評(píng)估板包含著手開發(fā)手勢(shì)控制所需的所有板載電路。(圖片來源:Digi-Key Electronics)
或者,開發(fā)人員也可使用Adafruit的APDS-9960 分線板,這也是一款一體化解決方案(圖 5)。Adafruit 分線板很有意思,盡管外形小巧,卻還包含 3 V 板載穩(wěn)壓器,可用于為電源 LED 甚至低功耗微控制器等附加電路供電。最重要的是,Adafruit 為開發(fā)人員提供了完善的 Adafruit APDS9960 分線板用戶指南,以及若干軟件庫可用于連接 Arduino 板或運(yùn)行 Python 的開發(fā)板。因此,使用 APDS-9960 可輕松實(shí)現(xiàn)開箱即用,從而大幅縮短開發(fā)人員著手使用手勢(shì)傳感器所花費(fèi)的時(shí)間。
圖 5:Adafruit 的 APDS-9960 分線板包括 APDS-9960、3 V 板載穩(wěn)壓器和 I2C 電壓轉(zhuǎn)換電路以支持 3 V 或 5 V 總線。(圖片來源:Digi-Key Electronics)
連接上述分線板的最簡(jiǎn)單方法是將Molex22-28-4255分離式針座焊接至電路板上。最好將針座朝下焊接,可實(shí)現(xiàn)多種優(yōu)勢(shì):首先,可將電路板直接插入某個(gè)試驗(yàn)板,如Digilent的340-002-1無焊試驗(yàn)板套件(圖 6)。其次,不要在該電路板上表面接線,以免手勢(shì)動(dòng)作時(shí)意外觸及掛在針座上的電線。
圖 6:Digilent 無焊試驗(yàn)板上焊接好的 Adafruit APDS-9960 分線板。(圖片來源:Adafruit)
此時(shí),需要連接電源和接地,并將 I2C 總線連接至所需的微控制器開發(fā)板。任何帶微控制器的開發(fā)板都可使用。但最好選擇STMicroelectronics用于物聯(lián)網(wǎng)節(jié)點(diǎn)的B-L475E-IOT01A2STM32L475 開發(fā)套件(圖 7)。該開發(fā)板具有 Arduino 針座,并且由 MicroPython 提供支持,可在該開發(fā)板上輕松編程。完成此操作后,即可使用 Python 腳本連接手勢(shì)傳感器,從而使手勢(shì)控制不僅可行,而且輕而易舉。
圖 7:STM32L475 物聯(lián)網(wǎng)節(jié)點(diǎn)開發(fā)套件包含 Arduino 針座,可輕松連接到 APDS-9960 分線板。(圖片來源:STMicroelectronics)
使用 Python 檢測(cè)手勢(shì)
從 APDS-9960 獲取手勢(shì)數(shù)據(jù)雖不復(fù)雜,卻要求開發(fā)人員仔細(xì)閱讀規(guī)格書。APDS-9960 具有多種不同功能,其中包括:
手勢(shì)感應(yīng)
環(huán)境光感應(yīng)
RGB 顏色感應(yīng)
接近感應(yīng)
上述功能均由狀態(tài)機(jī)控制,而狀態(tài)機(jī)的執(zhí)行則基于應(yīng)用的寄存器設(shè)置。例如,防止手勢(shì)引擎一直執(zhí)行的妙招是使用接近感應(yīng)引擎來檢測(cè)手的存在。一旦 IR 反射能量達(dá)到預(yù)設(shè)計(jì)數(shù),則由接近引擎轉(zhuǎn)換為手勢(shì)引擎,手勢(shì)引擎測(cè)量定向光電二極管并將測(cè)量值放入先進(jìn)先出 (FIFO) 緩沖器。為了啟用該功能,需要設(shè)置控制寄存器啟用接近感應(yīng),并設(shè)置計(jì)數(shù)閾值。
開發(fā)人員可能需要編寫算法以檢測(cè)特定的手勢(shì),具體取決于應(yīng)用所需的手勢(shì)。然而,對(duì)于向上/向下和向左/向右等常見手勢(shì),開發(fā)人員可以使用 Adafruit 的 APDS-9960CircuitPython 庫。將該庫復(fù)制到 Python 設(shè)備后,即可使用清單 1 所示代碼導(dǎo)入。該代碼可導(dǎo)入 APDS-9960 庫以及支持 I2C 總線的多個(gè)庫。
副本 import board import busio import adafruit_apds9960.apds9960 i2c = busio.I2C(board.SCL, board.SDA) sensor = adafruit_apds9960.apds9960.APDS9960(i2c)
清單 1:用于連接 APDS-9960 手勢(shì)控制器的 CircuitPython 導(dǎo)入和庫初始化代碼。(圖片來源:Adafruit)
傳感器對(duì)象是 APDS-9960 庫中一個(gè)實(shí)例。稍后,我們將看到其易用性。為了啟用手勢(shì),開發(fā)人員只需使用以下代碼啟用手勢(shì)功能:
副本 sensor.enable_gesture = True The main program loop setup to read the gesture is itself just a few lines of code (Listing 2).gesture = sensor.gesture() while gesture == 0: gesture = sensor.gesture() print('Saw gesture: {0}'.format(gesture))
清單 2:只需簡(jiǎn)單重復(fù)調(diào)用單個(gè)庫即可檢測(cè)手勢(shì)。(圖片來源:Adafruit)
閱讀該代碼后,您定會(huì)發(fā)現(xiàn)若感測(cè)到手勢(shì),則將在屏幕上打印檢測(cè)的手勢(shì)(圖 8)。
圖 8:Adafruit 的 APDS-9960 CircuitPython 庫手勢(shì)輸出結(jié)果示例。(圖片來源:Adafruit)
手勢(shì)可以數(shù)字形式輸出,使用以下鍵值即可輕松轉(zhuǎn)換:
0 = 未檢測(cè)到手勢(shì)
1 = 檢測(cè)到向上手勢(shì)
2 = 檢測(cè)到向下手勢(shì)
3 = 檢測(cè)到向左手勢(shì)
4 = 檢測(cè)到向右手勢(shì)
如圖所示,借助預(yù)先導(dǎo)入的庫,只需幾行代碼即可輕松實(shí)現(xiàn)基本手勢(shì)識(shí)別。識(shí)別更為復(fù)雜的手勢(shì)則需要修改庫以分析原始手勢(shì)數(shù)據(jù)。
構(gòu)建手勢(shì)控制器的技巧與訣竅
構(gòu)建手勢(shì)控制傳感器并將其集成于產(chǎn)品著實(shí)具有一定挑戰(zhàn)性。使用基于紅外線的手勢(shì)控制器時(shí),開發(fā)人員需要考慮使用以下幾個(gè)“技巧與訣竅”:
使用手勢(shì)傳感器的內(nèi)部接近檢測(cè)器來觸發(fā)手勢(shì)控制引擎,從而最大限度地減少無效手勢(shì)啟動(dòng)。
從現(xiàn)有手勢(shì)庫開始,在現(xiàn)有功能的基礎(chǔ)上構(gòu)建其他手勢(shì)。
將光電二極管增益調(diào)整為適合最終手勢(shì)應(yīng)用的最佳值。
將 LED 輸出驅(qū)動(dòng)強(qiáng)度調(diào)整為適合應(yīng)用的最佳值,或許需要稍作調(diào)整才能獲得可重復(fù)使用的數(shù)值。
無論開發(fā)何種手勢(shì)應(yīng)用,開發(fā)人員都應(yīng)從高級(jí)軟件開發(fā)入手,待充分熟悉該傳感器后再轉(zhuǎn)而使用較低級(jí)別的代碼。
遵循上述技巧有助于確保開發(fā)人員花費(fèi)最短的時(shí)間來啟動(dòng)和運(yùn)行 IR 手勢(shì)控制器。
總結(jié)
人們不斷追求以更自然、更直觀的方式進(jìn)行人機(jī)交互,而其中一種重要方式就是使用手勢(shì)控制技術(shù)。盡管市面上手勢(shì)控制技術(shù)種類繁多,但論及成本最低、使用最便捷的技術(shù)還屬基于紅外線的手勢(shì)傳感器。如上所述,如果開發(fā)人員利用現(xiàn)有的硬件和軟件技術(shù),則將手勢(shì)傳感器與微控制器集成在一起,亦可省時(shí)省力,簡(jiǎn)單易用。
-
傳感器
+關(guān)注
關(guān)注
2551文章
51097瀏覽量
753527 -
3D
+關(guān)注
關(guān)注
9文章
2878瀏覽量
107534 -
Broadcom
+關(guān)注
關(guān)注
3文章
737瀏覽量
43798
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論