當前位置:首頁 > 工業(yè)控制 > 工業(yè)控制
[導讀]本文討論如何喚醒平板電腦等觸控裝置,無需接觸設備,而是采用基本的手勢識別及新穎的接近檢測傳感器。本文討論了相關設計的物理布局、速度限制、檢測門限、系統(tǒng)集成,以及人為因素的影響;給出了軟件實時的例程?!?

本文討論如何喚醒平板電腦等觸控裝置,無需接觸設備,而是采用基本的手勢識別及新穎的接近檢測傳感器。本文討論了相關設計的物理布局、速度限制、檢測門限、系統(tǒng)集成,以及人為因素的影響;給出了軟件實時的例程。

  廚房里的突發(fā)奇想

  如果做飯時使用觸控設備,您可能會注意到按照設備列出的食譜烹飪并非想象得那么簡單。技術達人(例如鄙人)走進廚房時,喜歡看著平板電腦或智能手機上的菜譜做飯。您可能會說:“好吧,這有什么難度?”由于屏幕始終開啟會消耗很大電量,通常手持裝置在1、2分鐘后沒有操作時將自動進入休眠狀態(tài)。那么,當您需要參照食譜時,設備已進入休眠狀態(tài)。此事,您面臨兩個選擇:要么強制屏幕保持永久開啟;要么用沾滿食物的手開啟裝置,而在屏幕上留下斑斑油漬。當然,您可以在每次查看時把手清洗干凈,但不斷重復洗手、擦干即繁瑣,又費水。

  我時常問自己:“怎樣才能既不讓屏幕始終開啟,又不會弄臟裝置?”實際上,有一種辦法一舉兩得,即通過一個手勢(不用接觸屏幕)開啟顯示屏。聽起來似乎很復雜,是嗎?幸運的是,做起來可能比聽起來容易一些。

  接近檢測傳感器

  許多觸摸屏裝置,尤其是智能手機,內部已經安裝了紅外(IR)接近檢測傳感器。這些傳感器一般在通話期間自動打開/關閉屏幕,以避免意外操作手機的輸入界面。這種傳感器,加上精明的軟件設計,就能實現(xiàn)利用一個手勢喚醒裝置的功能。

  基本的設計思路是:設備進入休眠狀態(tài)時,觸摸屏關閉,應用處理器處于低功耗模式,依靠接近檢測傳感器“觀察”背景的變化,當接收到的信號足夠大時,做出適當反應。這與接近檢測傳感器在通話期間關閉屏幕的功能幾乎完全相同。只是,我們的應用對數(shù)據(jù)有了不同的解釋。

  首先記錄傳感器在“正常”背景下的計數(shù)值,此時得到的數(shù)值可能為零,但實際設計中需要考慮系統(tǒng)失調(例如:散射或串擾)。然后將得到的數(shù)值設置為檢測門限,當接收信號超過門限時觸發(fā)中斷或向應用處理器發(fā)送信號,以喚醒系統(tǒng)并打開屏幕??傮w而言,這種方法非常簡單、直觀,可利用環(huán)境光檢測器和IR接近檢測傳感器實現(xiàn)。

  本文介紹的方案采用MAX44000,接近檢測的數(shù)據(jù)讀取時間間隔可以設置在1.56ms至100ms (與環(huán)境光檢測傳感器輪流讀取數(shù)據(jù))。假設最大檢測距離為10cm,LED的輻射角為±15°,那么,可以覆蓋的面積大約為22cm2或跨距大約為5.35cm,只有該區(qū)域內的移動目標才能捕捉到。由此,能夠以最慢(即最低功耗)的采樣速度可靠檢測的最快手勢動作大約為0.53mps。在此,我們還假設傳感器只需要采集到一次高于門限的信號,即可識別經過覆蓋區(qū)域的目標。

  舉手之勞...

  理論上講,該方案的實施非常簡單。當裝置進入休眠模式時,將接近檢測傳感器置為環(huán)境掃描模式,并在檢測到目標時發(fā)出中斷信號,指示捕捉到超過預設門限的信號??赏ㄟ^I2C接口輪詢傳感器的狀態(tài)。不幸的是,這種方式會消耗過大功率,超出了大多數(shù)用戶的預期。

  這也是接近檢測傳感器的設計重點,MAX44000傳感器能夠在許多方面擺脫應用處理器的干預,減輕處理器負荷(降低功耗)。 使能MAX44000的內部接近檢測中斷(寄存器0x01的第1位),可將喚醒門限寫入內部寄存器(0x0B和0x0C)。當接近檢測傳感器的讀數(shù)超過該門限時,觸發(fā)中斷標識置位,將MAX44000的/INT引腳置為低電平。當應用處理器檢測到該引腳驅動為低電平時,可喚醒裝置退出低功耗模式,并打開屏幕,或完成其它需要的動作。

  ...但不容忽視

  實際應用往往不如理論那么容易,非接觸喚醒的具體實施并非只是簡單地檢測高于門限的信號。實際上,具體的設計需要考慮諸多因素。

  信號電平與電路布局

  最關鍵的考慮應該是觸發(fā)喚醒條件的信號電平,需要在系統(tǒng)響應靈敏度與誤報概率之間進行權衡。如果門限過低,則很容易檢測到輸入(手勢工作),但會增大瞬態(tài)噪聲或突發(fā)條件產生誤報的概率。反之,過高的檢測門限能夠把誤報概率降至幾乎為零,但卻只能檢測到非常接近的目標,甚至對任何輸入(即使您瘋狂晃動手臂)都反應遲鈍。

  解決這一問題的最佳方式是:首先降低系統(tǒng)噪聲,可以通過光學方法或嚴謹?shù)碾娐凡季謱崿F(xiàn),降低的噪底有助于降低誤報概率;其次,選擇“平均”檢測距離(例如:4cm至5cm)并利用參考目標測量信號,18%的灰板比較理想,但如果觸摸屏上方安裝了黑色玻璃,測量時也應該使用這樣的玻璃,所測得的信號電平可以作為設置門限的最佳參考。通??梢宰裱@樣的原則:即將電平設置在滿幅的8%至15%,即使電平發(fā)生變化。

  可以按照上述經驗數(shù)據(jù)設置MAX44000傳感器的接近檢測門限寄存器,圖1所示為信號強度隨距離變化的關系曲線,采用18%灰板,驅動電流為100mA,傳感器上方沒有玻璃罩。藍線為可以選擇的喚醒門限。

  

  圖1. MAX44000接近檢測傳感器信號強度隨距離變化的關系曲線,采用18%灰板,100mA驅動電流,沒有玻璃罩。
噪聲和低通濾波

  需要考慮噪聲問題時,可利用低通濾波器處理信號;另外,MAX44000還有幾個控制位可以用作觸發(fā)中斷標識之前的屏蔽,采用這種設置時,需要檢測到一定數(shù)量超出門限的采樣值時才會觸發(fā)中斷標示,能夠在一定程度上降低噪聲的影響。

  一種稍微復雜的方法是將傳感器的讀數(shù)儲存在數(shù)據(jù)隊列中,然后利用定制的FIR軟件對其進行濾波處理。但這種方法需要提高接近檢測傳感器的采樣速率,否則則會降低能夠捕捉到的傳感器可視范圍內的手勢動作速率,特別是把采樣速率設置在100ms時。利用器件的控制位屏蔽檢測時,速率可最多降低16倍(通常選擇4x屏蔽即可)。

  手勢速度

  手勢動作的快慢是我們需要考慮的另一因素。最大速度取決于:1. 傳感器的可視范圍;2. 手與傳感器之間的距離;3. 采樣率;4. 檢測門限。前兩項很容易確定:傳感器的檢測角度,結合傳感器與目標之間的距離,利用基本的三角形即可計算出傳感器可視范圍內目標的移動距離。例如,如果傳感器的視角為30度,最大有效檢測距離10cm,那么,傳感器可視范圍內允許的目標移動距離為5.35cm,覆蓋面積大約為78cm2。直線距離結合采樣率,即可決定速度限值。 具體地說,如果采樣率為T,那么目標跨越可視區(qū)域的時間不得小于T。例如,如果T為100ms (MAX44000的最低采樣速率),那么按照上例,理論上最大允許的速率為1mps (這實際上已經相當快了)。您可能希望捕獲到多個采樣值來確認觸發(fā)喚醒,這樣的話,會降低允許的速率下限。

  檢測門限也影響最大允許速率。一般來說,門限越低,能夠捕捉到的手勢動作就越快。如上所述,應謹慎選擇門限,以免產生誤報。

      人為因素

  這種應用還會受到人手以及揮手動作等人為因素的影響。應通過一些案例確定一般大多數(shù)人的習慣,包括他們在屏幕前揮動手掌的速度以及與屏幕之間的距離,另外,是否戴手套也會產生一定的影響。不同的應用場合(不同裝置)也會影響到設計需求,例如智能手機、平板電腦或汽車儀表盤,對存在具體的設計考慮。當然,設計過程中還應考慮用戶界面和經驗參數(shù)。

  最后,還要對真假手勢做出判斷,即裝置需要判斷接收到的信號是來自于一個手勢動作,還是簡單的裝置移動(例如:放置在外套、口袋或背包中,或者是屏幕朝下放置)。單純依靠上述檢測原理,很難做出正確的“真?zhèn)?rdquo;鑒別,除非在裝置內提供更多的背景信息。關于這一問題的討論超出了本文范圍。

  設計中可以選擇只有裝置進入特定的應用程序時啟動喚醒方案,也可以由用戶手動操作使能。此外,許多此類裝置都有一個加速度傳感器,能夠檢測到屏幕是否背面朝下放置。如果用戶手動將裝置置于休眠模式,則可禁用該功能(例如關機狀態(tài))。

  設計實例

  為方便起見,本文附帶了三段演示程序代碼。第一段代碼用于手動操作MAX44000的接近檢測數(shù)據(jù)讀取,概念上簡單實現(xiàn)喚醒功能;第二段代碼在第一段的基礎上進行了擴展,增加了之前討論的濾波功能;最后一段代碼演示利用MAX44000中斷喚醒觸控裝置。 示例代碼1

  __interrupt void TimedInterrupt( void )

  {

  uint8 proximity_counts;

  ....

  ....

  if ( device_status == SLEEP_MODE )

  {

  // read one byte from register 0x16

  proximity_counts = read_i2c_register(MAX44000_ADDR,0x16,1);

  if (proximity_counts 》 WAKEUP_THRESHOLD)

  {

  device_status = WAKE_MODE;

  ...

  }

  else

  {

  // do whatever it is you need to in sleep mode

  ...

  ...

  }

  }

  ...

  ...

  }
示例代碼2

  // example interrupt function where this might be implemented

  __interrupt void TimedInterrupt( void )

  {

  uint8 proximity_counts;

  uint8 filtered_counts;

  ....

  ....

  if ( device_status == SLEEP_MODE )

  {

  // read one byte from register 0x16

  proximity_counts = read_i2c_register(MAX44000_ADDR,0x16,1);

  // weights[QUEUE_SIZE] contains the filter weights for the FIR filter

  // data_queue[QUEUE_SIZE] is a FIFO queue meant to be the input to the filter

  filtered_counts = fir_filter(proximity_counts,weights,data_queue);

  if (filtered_counts 》 WAKEUP_THRESHOLD)

  {

  device_status = WAKE_MODE;

  ...

  }

  else

  {

  // do whatever it is you need to in sleep mode

  ...

  ...

  }

  }

  ...

  ...

  }

  /**

  * fir_filter()

  *

  * Implements an FIR filter in the form

  * y = w[0]*x[0] + w[1]*x[1] + 。。.+ w[QUEUE_SIZE]*x[QUEUE_SIZE]

  *

  * Arguments:

  * uint8 input - newest datapoint taken (that is, x[0])

  * uint8 *weights - w[0]。。.w[QUEUE_SIZE]

  * uint8 *queue - the discrete sequence x[0]。。.x[QUEUE_SIZE]

  *

  * Returns:

  * The FIR-filtered output, y

  */

  uint8 fir_filter(uint8 input, uint8 *weights, uint8 *queue)

  {

  uint8 i;

  int sum = 0;

  // pop first entry in the queue, then

  // push new data into the last position

  push_into_queue(queue,input);

  // input is now x[0]

  for (i=0; i {

  sum += weights[i]*queue[i];

  }

  return (sum/QUEUE_SIZE);

  }示例代碼3

  // this handles hardware-level interrupts on the micro

  __interrupt void irq_handler( void )

  {

  ...

  // if the hardware interrupt came from the MAX44000 sensor

  // pulling its INT pin low

  if ( irq_source == MAX44000 )

  {

  // if the device is in sleep mode

  if (device_status == SLEEP_MODE)

  {

  device_status = WAKE_MODE; // wake up the device

  ...

  // reconfigure whatever else you need here as the system wakes up

  }

  // otherwise, handle it however it is you wish

  else

  {

  ...

  }

  }

  ...

  }

  /**

  * configure_max44000_for_sleep_mode()

  *

  * Sets up the MAX44000 to trigger a hardware interrupt when the proximity

  * counts go above some set threshold.

  *

  * Arguments:

  * uint8 upper_threshold - the set threshold (8-bit mode)

  *

  * Returns:

  * n/a

  */

  void configure_max44000_for_sleep_mode(uint8 upper_threshold)

  {

  uint8 max44000_thresh_registers[] = {0x0B,0x0C};

  uint8 max44000_upper_thresh[] = {0x40,0};

  max44000_upper_thresh[1] = upper_threshold;

  // do a consecutive write of 0 followed by upper_threshold to

  // registers 0xB and 0xC, respectively

  // MAX44000_ADDR is usually 0x94

  // interrupt will trigger only if proximity value is above the threshold

  write_i2c_register(MAX44000_ADDR,max44000_thresh_registers,

  max44000_upper_thresh,2);

  // write to bits 2 and 3 of register 0x0A here if you wish to set the

  // persist time to anything other than one sample

  // writes to register 0x01 to enable interrupts on the MAX44000

  max44000_enable_interrupt();

  return;

  }

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉