電容式接近傳感器普遍用于檢測傳感器近距離處是否存在用戶。通過檢測,當感應到有用戶存在后,我們即可選擇背光發光來凸顯特定按鈕,或者將系統從低功耗運行模式下喚醒。具體就汽車應用而言,當電容式接近傳感器感應到用戶在車內時會打開車廂燈光,或激活無鑰匙車門解鎖系統。除了感應傳感器附近是否存在用戶之外,我們還能通過適當放置的多個接近傳感器來識別空中的簡單手勢。所有傳感器的數據能夠結合在一起,從而映射出傳感器鄰近區域中用戶的手勢操作。這些手勢可用來給系統提供輸入信息,包括控制媒體播放機、進行地圖導航或者瀏覽播放列表等。 我們可適當放置多個接近傳感器,使其相互之間留出適當的距離。當手劃過傳感器時,每個傳感器檢測到手部動作的時間瞬間都不相同。不同傳感器的相對檢測順序和檢測時長可用來分析手部移動的方向和速度。手勢可以很簡單,例如在這些傳感器上方從左到右畫一條直線;也可以很復雜,包括用手在空中畫圓圈之類的圖案。在本文中,我們將分析如何使用多個傳感器的不同模式進行簡單的手勢識別以及如何實現更加復雜的手勢操作。 下面我們分析一下如圖1所示的汽車信息娛樂系統四周放置的四個電容式接近傳感器。 圖1. 右圖為汽車信息娛樂系統四周放置的電容式接近傳感器,左圖標注出其位置。 傳感器的放置應恰到好處,要確保在傳感器面板上方做手勢時能按順序觸發傳感器進行識別(不同順序會產生不同效果)。我們會對傳感器的觸發順序進行確認。如果順序與某個預設序列相匹配,就會發出這個手勢對應的操作指令。我們將采用圖1所示的傳感器放置模式作為參考,向您介紹本文中討論的手勢操作。 設想一下手從左到右在傳感器上方畫一條直線的簡單手勢操作,如圖2(a)所示。手從左到右掠過傳感器時,當手一靠近系統,左側傳感器就會首先被觸發。“觸發”這個詞在這里是指傳感器檢測到有物體存在,而不能誤解為啟用接近傳感器。因為系統一旦打開,接近傳感器就已經在啟用了,而且會對鄰近區域的物體保持掃描感應。 圖2. (a手在空中從左到右畫一條直線;(b)手畫直線時,每個傳感器的信號圖 手在控制臺上方劃過時,頂部、底部的兩個傳感器被觸發,同時左側傳感器仍保持觸發。當手繼續向右劃動時,右側傳感器被觸發。而左側傳感器則在手離開其檢測范圍后停止感應。當手劃過右側傳感器,頂部、底部的傳感器則不會再檢測到手的存在。手進一步遠離后,右側傳感器也會停止感應。傳感器觸發的順序將是以下其中一種,具體取決于手的位置和各個傳感器的靈敏度: 右→頂→底→左 右→底→頂→左 右→底→左 右→頂→左 以上所有傳感器激活序列都對應于(左→右)的手勢。本例采用PSoC實現電容式接近傳感器。PSoC中的電容至數字轉換器(也就是Capsense Sigma Delta)可用來測量電容。CSD模塊的輸出為原始計數,原始計數越大,傳感器感應到的電容也就越高。手離接近傳感器越近,傳感器的電容就越大。 當傳感器的原始計數超過基礎值的某個特定閾值時,傳感器就會因為在其鄰近區域檢測到物體的存在而被觸發。手從左到右畫直線(如圖2(a)所示)時,四個傳感器的原始計數圖則如圖2(b)所示。該圖確認了上述傳感器的激活順序。如果手反方向移動,也就是(右→左)的手勢操作,那么傳感器觸發序列與上述左右兩側傳感器的激活序列相反。也就是說,這時(右→左)手勢對應的傳感器激活序列為以下其中一種: 右→頂→底→左 右→底→頂→左 右→底→左 右→頂→左 以上所述的兩種手勢都是手在水平方向的移動。同樣,手還可以垂直方向上畫直線,也就是(頂→底)或(底→頂)的手勢,具體取決于手移動的方向。 (上→下)或(下→上)的手勢可關聯于上下滾動菜單或曲目列表等簡單操作,如圖3所示。 圖3.用手垂直方向上畫直線的接近手勢來滾動菜單 (左→右)和(右→左)的手勢可關聯于音樂播放器應用的換歌或換碟操作。通過放置接近傳感器(如圖4所示),同樣的手勢也可用來替代按壓按鈕來開關車艙內部的照明燈。 圖4. 通過手畫直線來控制車艙頂燈 (頂→底)手勢類似于向上/下按鈕按壓動作。不過,在按住向上(向下)按鈕不放時,屏幕會不斷向上(下)滾動,直到松開按鈕為止。換言之,只要按下按鈕,這個動作就有“黏性”。要讓手勢操作徹底取代按鈕操作,那么手勢操作也應該能夠支持這種“黏性”功能。我們將對手勢進行如下修改來滿足這一要求。手從頂部傳感器向底部傳感器移動時,只要手劃過底部傳感器,系統就將此解碼為(頂→底)手勢。我們更改一下手勢,當手按手勢順序到達最后的傳感器(這里指底部傳感器)時,就發出向下滾動的命令。并且只要手保持在底部傳感器上方不動,就會一直反復發出向下滾動的命令。等滾動到需要找的菜單項,手再繼續向下移動并離開底部傳感器感應范圍,這時就會停止發出向下滾動的命令。也就是說,要讓手勢操作也有“黏性”,手不能一下子完成從上到下的劃動,而是要在最后的傳感器處先停頓一下,找到需要的項目之后再離開該傳感器的感應范圍。只要手停在傳感器感應范圍內不動,就會一直發出命令。 圖5顯示了(頂→底)黏性手勢的頂、底部傳感器的原始計數圖。頂部傳感器停止感應手勢操作之后,底部傳感器會保持更長時間的觸發狀態,這說明手在底部傳感器的感應范圍停下來了,而不是不停地直接劃下。在發送黏性命令時,我們要檢查頂部傳感器是否先被觸發,而后是否觸發了底部傳感器。這時頂部傳感器已經不再感應到手勢操作,而底部傳感器仍能夠持續感應到手在附近。當手在底部傳感器范圍內停留超過一定的時間閾值后,只要底部傳感器感應到手在附近,就會一直發出黏性命令。同樣,我們也能對其它手勢操作進行修改,從而實現“黏性”特性,這就能讓手勢操作完全取代上下按鈕功能了。 圖5. (頂→底)黏性手勢的頂、底部傳感器信號圖。底部傳感器的信號持續停留,這說明在采取“黏性”手勢操作。 下面,我們再看一個稍微復雜一點的手勢。設想一下用手在傳感器面板上方的空中畫圈的情景,如圖6所示。 圖6. 畫圈的手勢操作 手可從任一傳感器的感應位置開始在其它傳感器上方畫圈,既可以是順時針方向,也可以是逆時針方向。手畫圈回到起點傳感器上時就完成了這個圓圈,手移開后即退出畫圈過程。舉例來說,手可以在右側傳感器上方開始順時針畫圈,順序經過底部、左側和頂部傳感器,最后回到右側傳感器,然后退出畫圈過程。圖7同樣給出了傳感器的原始計數圖。同理,手的移動方向反過來則能完成逆時針方向畫圈。此外,傳感器激發順序也能對多次畫圈操作進行計數。 圖7. 順時針畫圈手勢操作的傳感器原始計數圖 畫圈手勢類似于轉動旋鈕的動作,可關聯于音樂播放器音量調節或者地圖瀏覽縮放等操作命令。 在本文中,我們討論了如何使用電容式接近傳感器進行簡單的接近手勢操作檢測。采用相同的原理,我們能構建出更復雜的手勢操作,包括雙手一起在空中畫圖案。不過,這種手勢操作能否成功檢測,仍要取決于我們選擇的傳感器模式布局夠不夠好。選擇合適的模式布局非常重要,不僅要給各種手勢操作的手部移動提供適當的容差,同時又要判斷清楚傳感器的觸發順序。 |