<del id="oczw2"></del><object id="oczw2"><nobr id="oczw2"></nobr></object>
<object id="oczw2"><nobr id="oczw2"></nobr></object>

    <code id="oczw2"><nobr id="oczw2"><track id="oczw2"></track></nobr></code>

    1. <th id="oczw2"></th>
      <code id="oczw2"></code>
        <object id="oczw2"></object>
        RMB | USD

        快速設計您自己的低成本 3D 手勢控制器

        作者:Jacob Beningo

        投稿人:Digi-Key 北美編輯

        旋鈕、按鈕、手柄和觸摸屏是人類與機器和嵌入式設備的常用交互方式。不過,傳感器技術的最新進展開辟了一條全新的道路,使開發人員可為產品添加三維 (3D) 手勢控制。

        由于所采用的技術各不相同,購買和集成手勢控制器可能成本高昂。然而,市面上手勢傳感器技術種類繁多,從使用紅外 LED 和光電二極管來檢測動作的經濟型傳感器,到昂貴的手勢識別相機。紅外手勢傳感器經濟實惠,可以通過數字接口與低成本微控制器連接,只需輔以簡單的軟件,精度足以應對許多應用。

        本文探討了使用 BroadcomAPDS-9960 進行手勢控制的方法。幾乎所有嵌入式系統都可輕松集成這款紅外 (IR) 手勢控制傳感器。

        基于 IR 的手勢傳感器

        基于 IR 的手勢傳感器原理十分簡單。用于檢測手勢時,開發人員可能需要檢測以下幾種不同手勢:

        • 向上/向下
        • 向左/向右
        • 向前/向后

        在上述每種情況下,傳感器都需要檢測運動方向,而這主要通過傳感器的兩大組件來實現:一個發光二極管 (LED) 和多個定向光電二極管。定向光電二極管由至少四個光電二極管組成,分別置于距 IR LED 預定義距離處。例如,Broadcom 的 APDS-9960 環境光、接近度和手勢傳感器將四個光電二極管布置為菱形,每個二極管用于指示一個方向,分別為上、下、左和右(圖 1)。

        Broadcom 的 APDS-9960 示意圖圖 1:Broadcom 的 APDS-9960 具有一個集成 IR LED 和四個定向光電二極管,可檢測反射的 IR 能量以分析手勢。(圖片來源:Broadcom)

        當 LED 發射紅外能量時,除非遇到手等物體發生反射,否則能量就會發射至空氣中。光電二極管將檢測到不同強度的反射能量,具體取決于物體的位置。例如,相比位于手勢后邊緣的光電二極管,前邊緣光電二極管最初接收的反射能量較少,從而導致一個光電二極管的計數值比另一個高。在手勢動作過程中,連續測量將導致不同位置的光電二極管檢測的反射能量強度不同,而分析該方向信息流即可確定手勢。

        例如,若用戶用手從傳感器的頂部輕掃至底部,則在手勢動作之初,下方光電二極管檢測的入射光比上方光電二極管更強;在手勢動作期間,手逐漸移動到兩個二極管接收能量相等的點;而在手勢動作完成時,下方光電二極管接收的反射光較弱,而上方光電二極管接收的更強,此時兩光電二極管的曲線和相位完全反轉(圖 2)。

        Broadcom 的 APDS-9960 光電二極管曲線圖圖 2:Broadcom 的 APDS-9960 檢測到向下手勢將生成以上光電二極管曲線,其中主導曲線指示手勢方向。(圖片來源:Broadcom)

        了解手勢數據的生成原理后,下一步就來看看如何連接到 APDS-9960。

        連接 Broadcom 的 APDS-9960 手勢控制器

        APDS-9960 采用 8 引腳表面貼裝 (SMD-8) 封裝,占用印刷電路板空間極小(圖 3)。傳感器尺寸僅為 3.94 × 2.36 × 1.35 mm。該封裝包含正常電源和接地引腳、用于連接微控制器的 I2C 數字接口,以及用于定制 LED 驅動電路的引腳。此外,該封裝還包含中斷引腳,可用于通知微控制器處理可用的手勢數據。

        Broadcom 的 APDS-9960 采用緊湊型表面貼裝 SMD-8 封裝圖片圖 3:APDS-9960 采用緊湊型表面貼裝 SMD-8 封裝,可最大限度減少電路板空間。 (圖片來源:Broadcom)

        構建原型并連接 APDS-9960 有幾種不同選項可供選擇。例如,SparkFunAPDS-9960 評估板提供了包括 LED 驅動電路在內的小型分線板,以便實現開箱即用(圖 4)。開發人員只需焊接針座以通過旁路繞過電源和接地,并將 I2C 總線和可選的中斷引腳連接至微控制器,即可著手開發嵌入式軟件了。此外,SparkFun 評估板還包含安裝孔,若現有電路板有助于實現應用,則可直接運用到設計中。

        SparkFun 的 APDS-9960 評估板圖片圖 4:SparkFun 的 APDS-9960 評估板包含著手開發手勢控制所需的所有板載電路。(圖片來源:Digi-Key Electronics)

        或者,開發人員也可使用 AdafruitAPDS-9960 分線板,這也是一款一體化解決方案(圖 5)。Adafruit 分線板很有意思,盡管外形小巧,卻還包含 3 V 板載穩壓器,可用于為電源 LED 甚至低功耗微控制器等附加電路供電。最重要的是,Adafruit 為開發人員提供了完善的 Adafruit APDS9960 分線板用戶指南,以及若干軟件庫可用于連接 Arduino 板或運行 Python 的開發板。因此,使用 APDS-9960 可輕松實現開箱即用,從而大幅縮短開發人員著手使用手勢傳感器所花費的時間。

        Adafruit 的 APDS-9960 分線板圖片圖 5:Adafruit 的 APDS-9960 分線板包括 APDS-9960、3 V 板載穩壓器和 I2C 電壓轉換電路以支持 3 V 或 5 V 總線。(圖片來源:Digi-Key Electronics)

        連接上述分線板的最簡單方法是將 Molex 22-28-4255 分離式針座焊接至電路板上。最好將針座朝下焊接,可實現多種優勢:首先,可將電路板直接插入某個試驗板,如 Digilent340-002-1 無焊試驗板套件(圖 6)。其次,不要在該電路板上表面接線,以免手勢動作時意外觸及掛在針座上的電線。

        Adafruit 的 APDS-9960 分線板圖片圖 6:Digilent 無焊試驗板上焊接好的 Adafruit APDS-9960 分線板。(圖片來源:Adafruit)

        此時,需要連接電源和接地,并將 I2C 總線連接至所需的微控制器開發板。任何帶微控制器的開發板都可使用。但最好選擇 STMicroelectronics 用于物聯網節點的 B-L475E-IOT01A2 STM32L475 開發套件(圖 7)。該開發板具有 Arduino 針座,并且由 MicroPython 提供支持,可在該開發板上輕松編程。完成此操作后,即可使用 Python 腳本連接手勢傳感器,從而使手勢控制不僅可行,而且輕而易舉。

        STMicroelectronics 的 STM32L475 物聯網節點開發套件圖片圖 7:STM32L475 物聯網節點開發套件包含 Arduino 針座,可輕松連接到 APDS-9960 分線板。(圖片來源:STMicroelectronics)

        使用 Python 檢測手勢

        從 APDS-9960 獲取手勢數據雖不復雜,卻要求開發人員仔細閱讀規格書。APDS-9960 具有多種不同功能,其中包括:

        • 手勢感應
        • 環境光感應
        • RGB 顏色感應
        • 接近感應

        上述功能均由狀態機控制,而狀態機的執行則基于應用的寄存器設置。例如,防止手勢引擎一直執行的妙招是使用接近感應引擎來檢測手的存在。一旦 IR 反射能量達到預設計數,則由接近引擎轉換為手勢引擎,手勢引擎測量定向光電二極管并將測量值放入先進先出 (FIFO) 緩沖器。為了啟用該功能,需要設置控制寄存器啟用接近感應,并設置計數閾值。

        開發人員可能需要編寫算法以檢測特定的手勢,具體取決于應用所需的手勢。然而,對于向上/向下和向左/向右等常見手勢,開發人員可以使用 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 庫中一個實例。稍后,我們將看到其易用性。為了啟用手勢,開發人員只需使用以下代碼啟用手勢功能:

        副本 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)

        閱讀該代碼后,您定會發現若感測到手勢,則將在屏幕上打印檢測的手勢(圖 8)。

        Adafruit 的 APDS-9960 CircuitPython 庫手勢輸出結果示例圖圖 8:Adafruit 的 APDS-9960 CircuitPython 庫手勢輸出結果示例。(圖片來源:Adafruit)

        手勢可以數字形式輸出,使用以下鍵值即可輕松轉換:

        0 = 未檢測到手勢

        1 = 檢測到向上手勢

        2 = 檢測到向下手勢

        3 = 檢測到向左手勢

        4 = 檢測到向右手勢

        如圖所示,借助預先導入的庫,只需幾行代碼即可輕松實現基本手勢識別。識別更為復雜的手勢則需要修改庫以分析原始手勢數據。

        構建手勢控制器的技巧與訣竅

        構建手勢控制傳感器并將其集成于產品著實具有一定挑戰性。使用基于紅外線的手勢控制器時,開發人員需要考慮使用以下幾個“技巧與訣竅”:

        • 使用手勢傳感器的內部接近檢測器來觸發手勢控制引擎,從而最大限度地減少無效手勢啟動。
        • 從現有手勢庫開始,在現有功能的基礎上構建其他手勢。
        • 將光電二極管增益調整為適合最終手勢應用的最佳值。
        • 將 LED 輸出驅動強度調整為適合應用的最佳值,或許需要稍作調整才能獲得可重復使用的數值。
        • 無論開發何種手勢應用,開發人員都應從高級軟件開發入手,待充分熟悉該傳感器后再轉而使用較低級別的代碼。

        遵循上述技巧有助于確保開發人員花費最短的時間來啟動和運行 IR 手勢控制器。

        總結

        人們不斷追求以更自然、更直觀的方式進行人機交互,而其中一種重要方式就是使用手勢控制技術。盡管市面上手勢控制技術種類繁多,但論及成本最低、使用最便捷的技術還屬基于紅外線的手勢傳感器。如上所述,如果開發人員利用現有的硬件和軟件技術,則將手勢傳感器與微控制器集成在一起,亦可省時省力,簡單易用。

        免責聲明:各個作者和/或論壇參與者在本網站發表的觀點、看法和意見不代表 Digi-Key Electronics 的觀點、看法和意見,也不代表 Digi-Key Electronics 官方政策。

        關于此作者

        Jacob Beningo

        Jacob Beningo 是一位嵌入式軟件顧問,目前與十幾個國家的客戶保持合作,通過幫助客戶改善產品質量、降低成本和加快上市時間來大幅改變他們的業務。Jacob?先后發表了 200 多篇關于嵌入式軟件開發技術的文章,是一位廣受歡迎的演講者和技術培訓師。他擁有三個學位,其中包括密歇根大學的工程碩士學位。如有需要,歡迎隨時通過 jacob@beningo.com 與其聯系,也可訪問其網站 www.beningo.com,并訂閱其月度 Embedded Bytes Newsletter

        關于此出版商

        Digi-Key 北美編輯

        欧美美女大阴口