JPY | USD

短期間で設計できる独自の低コスト3Dジェスチャコントローラ

著者 Jacob Beningo

Digi-Keyの北米担当編集者 の提供

ノブ、ボタン、レバー、そしてタッチスクリーンは、人がマシンや組み込みデバイスを対話的に操作するために一般的に利用するものです。一方で最近のセンサ技術の進歩により、今では3次元(3D)ジェスチャコントロールを製品に加えることができつつあります。

使用する技術によっては、ジェスチャコントローラの購入、統合の費用が高額になることも考えられます。しかし、ジェスチャセンサ技術には幅広い種類があり、赤外線LEDやフォトダイオードで動きを検出する安価なセンサから高価なジェスチャ認識カメラまでさまざまです。赤外線式ジェスチャセンサは低価格で、低コストのマイクロコントローラにデジタル接続できます。また、ソフトウェアを少し使うだけで、多くのアプリケーションで十分に正確な機能を発揮します。

この記事ではBroadcomAPDS-9960を使用したジェスチャコントロールについて説明します。APDS-9960は、ほぼあらゆる組み込みシステムに簡単に統合できる赤外線(IR)式ジェスチャコントロールセンサです。

IR式ジェスチャセンサ

IR式ジェスチャセンサの土台となる理論は比較的単純です。手のジェスチャを検出する場合、開発者が検出しそうな手の動きは数種類あります。

  • 上下
  • 左右
  • 前方/後方

それぞれの動きに対して、センサは動きの方向を検出できる必要があります。この検出は、センサが備える2種類の主な部品、発光ダイオード(LED)と複数の指向性フォトダイオードを使用して行います。指向性フォトダイオードは、IR LEDから所定の距離に配置された4つ以上のフォトダイオードで構成されるにすぎません。たとえば、BroadcomのAPDS-9960周囲光、近接、およびジェスチャセンサでは、フォトダイオードが菱形パターンに配置されており、各ダイオードには上下左右などの指向性が与えられています(図1)。

BroadcomのAPDS-9960の図図1:Broadcom APDS-9960は、IR LEDと4つの指向性フォトダイオードを統合しており、フォトダイオードは反射IRエネルギーを検出し、反射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.35mmです。パッケージは、通常の電源ピンとグランドピン、およびマイクロコントローラへのデジタル接続用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)

別の方法として、もう1つのオールインワンソリューションであるAdafruitAPDS-9960ブレイクアウトボードを使用することもできます(図5)。Adafruitのブレイクアウトボードは、単に小型なだけでなく、オンボード3Vレギュレータも備えており、パワーLEDや低電力マイクロコントローラなどの付加回路への給電に使用できるという、興味深い製品です。さらにAdafruitは、Adafruit APDS9960ブレイクアウト全般のユーザーガイドや、Pythonを実行するArduinoボードまたは開発ボードへの接続用に数種類のソフトウェアライブラリも開発者に提供しています。これにより、APDS-9960を使うと開発にすぐに着手でき、センサ開発の準備に費やす時間を大幅に節約できます。

AdafruitのAPDS-9960ブレイクアウトボードの画像図5:AdafruitのAPDS-9960ブレイクアウトボードはAPDS-9960とともにオンボードの3VレギュレータとI2C電圧変換回路を備え、3Vまたは5Vバスをサポートします。(画像提供:Digi-Key Electronics)

これらのブレイクアウトボードのいずれかをインターフェース接続する最も簡単な方法は、Molex22-28-4255ブレイクアウェイヘッダを基板にはんだ付けすることです。これを行うにはヘッダを下向きにするのがベストで、この方法にはいくつかの利点があります。その1つは、Digilent340-002-1無はんだブレッドボードキットなどのブレッドボードに基板を差し込むことができることです(図6)。もう1つの利点は、基板の上面を空けて、ヘッダから宙に出ているワイヤに誤って引っ掛けずにジェスチャを行う十分なスペースを確保できることです。

AdafruitのAPDS-9960ブレイクアウトボードの画像図6:AdafruitのAPDS-9960ブレイクアウトボードがDigilentの無はんだブレッドボードにはんだ付けされ使用できる状態。(画像提供:Adafruit)

この時点で、電源とグランドを配線する必要があり、I2Cラインを目的のマイクロコントローラ開発ボードに配線する必要があります。その際、マイクロコントローラを搭載した開発ボードならどれでも使用できます。なお、おすすめは、STMicroelectronicsB-L475E-IOT01A2、IoTノード用STM32L475 IoTディスカバリキットです(図7)。この開発ボードはArduinoヘッダを備えており、さらにMicroPythonでもサポートされます。MicroPythonはそれほど苦労なくプログラミングを基板に実装できます。その作業が完了したら、Pythonスクリプトを使用してジェスチャセンサとインターフェース接続すると、スクリプトによってジェスチャコントロールが可能になり、しかも簡単に実行できます。

STMicroelectronicsのIoTノード用STM32L475ディスカバリキットの画像図7:IoTノード用の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:CircuitPythonのインポートとライブラリ初期化コード。APDS-9960ジェスチャコントローラとインターフェース接続します。(画像提供:Adafruit)

センサオブジェクトはAPDS-9960ライブラリの1つのインスタンスです。それを非常に簡単に使えることが、後ほどお分かりいただけます。ジェスチャを有効にするには、以下のコードを使用してジェスチャ機能を有効にするだけです。

コピー
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氏は組み込みソフトウェアコンサルタントで、現在、製品の品質、コスト、市場投入までの時間を改善することで、ビジネスを劇的に変革するために数十か国以上のお客様と作業しています。同氏は、組み込みソフトウェア開発技術に関する200以上の記事を発表しており、引っ張りだこのスピーカーでありテクニカルトレーナです。ミシガン大学のエンジニアリングマスターを含む3つの学位を取得しています。気楽にjacob@beningo.comにメールするか、彼のウェブサイトwww.beningo.comから連絡してみてください。そして毎月のEmbedded Bytes Newsletterにサインアップしましょう。

出版者について

Digi-Keyの北米担当編集者