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