パーツ解説

PICでジェスチャーセンサーを使ってみる[APDS-9960]

投稿日:2020-04-04 更新日:

今回は以前から気になっていた秋月電子で販売されているこちらのジェスチャーセンサー APDS-9960 を使ってみました。ネットの情報も少なく、Arduinoのライブラリを使うだけしか書いてなかったりしたので、自分でデータシートを頼りに実験してみました。

まず商品ページを見たらデータシートが無いじゃないか!と思ったら説明書に地味にリンクが書いてありました。そこに書くんだったら商品ページにもリンク貼っておいてくれよ秋月さんと思いつつデータシートを入手。データシートはこちら

当然英語ですがこれ位の量なら頑張って読もうと思える範囲で助かりました。

とは言いつつ1からデータシートを基にプログラムを書くのは難しいので秋月のサンプルプログラムも入手。Arduino用ですが、C言語みたいなものなので参考にはなるでしょう。

まずこのセンサーの仕組みを説明すると、このように赤外線LEDと U,D,L,R の4つのフォトダイオードが搭載されていて

その上を物体が通過するとこのような信号が得られます。

この立ち上がりのタイミングで方向を検知するという仕組みです。

ではサンプルプログラムを読み解いていきましょう。これがメインループですね。

ノイズというのは物体が検知されていないときのことですね。PHASE_COUNTERという変数で検知からの時間を計っているようです。

続いてデータ処理。

同じ処理が何度も出てきてまとめたくなりますね。内容としては、ピークを見つけてそのタイミングを記録し、最もタイミングの遅かった方向を判断するという感じです。

さて、大体内容が分かったので、このサンプルをベースにプログラムを書いていきましょう。

まず最初に手を加えたのはノイズの処理です。サンプルではノイズ状態のとき毎回 RESET_VARIABLE() を呼び出していますが、これは無駄です。これを改善する方法がデータシートにありました。

During operation, the Gesture engine is entered when its enable bit, GEN, and the operating mode bit, GMODE, are both set. GMODE can be set/reset manually, via I²C, or becomes set when proximity results, PDATA, is greater or equal to the gesture proximity entry threshold, GPENTH.

ジェスチャーエンジンの ON/OFF を近接センサーの値で制御できるようです。物体が近づいたときに GMODE = 1 とする閾値の GPENTH と、離れたときに GMODE = 0 とする閾値の GEXTH を設定します。閾値は適当に 10 としておきました。

次に見直したのは 赤外線LED の設定です。サンプルでは駆動電流 100 mA、ブースト 300 % となっていますが、これでテストしてみると、各方向の受信データが頭打ちしてしまいました。

使用条件にもよるでしょうが、今回はセンサーから 2 cm ぐらいでの使用を想定しているので、それに合わせて調整した結果、駆動電流 25 mA 、ブースト 100 % としました。

続いて遅延時間がサンプルでは 14 ms となっているのですが、サンプリング周期が短いほどピークのズレも検出しやすくなると思いますので、遅延を 2.8 ms としました。

このとき、マイコンのクロックが遅いと処理が追い付かなかったりしたので、FIFO が一杯になっていないか確認した方が良いと思います。

あとは各方向のデータを配列にして繰り返し処理にしたり、ピーク検出後物体が離れるまで処理をスキップするようにしてプログラムが完成しました。

ジェスチャーの方向を読み取って LED を点灯させるプログラムです。少々誤作動もありますが、今回は許容範囲内とします。

以下テスト動画とソースコード、回路図です。

I2Cライブラリ

次回はこのセンサーの他の機能である近接センサーやカラーセンサーを試してみたいと思います。

次回↓

APDS-9960の近接センサーを使ってみる

-パーツ解説

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

aitendoのI2CキャラクタLCDが安くて便利

ブレッドボード上で情報を表示したり簡易的なデバッグをしたりするのに便利なのがキャラクタLCD です。 今回は aitendo で販売されているこちらの LCD を使ってみました。 ちなみに以前秋月電子 …

APDS-9960のRGBセンサーを使ってみる

前々回のジェスチャーセンサー、前回の近接センサーに引き続き、APDS-9960 の最後の機能である照度・RGBセンサーを使ってみました。 最初に言っておきますが、今回は動作確認程度のかなり適当な内容に …

【PIC】aitendo の 122×32 グラフィックLCDを使ってみた

今回は aitendo で 122×32 のグラフィックLCD が 299円(税抜)とかなり安かったので買ってみました。商品ページはこちらです。 グラフィックLCD については以前に記事を書 …

PICで128×64グラフィックLCDを使ってみる

今回は AliExpress で買った 128×64 のグラフィックLCD を使ってみました。使用した PIC は PIC16F18857 です。 400円ぐらいで安かったのはいいですが、デ …

圧電素子とPICマイコンで振動センサー

この記事では圧電素子(ピエゾ素子)を使用してPICマイコンで振動を検出する方法を解説します。   目次1 使用するもの2 圧電素子とは3 圧電効果を見てみる4 PICマイコンで振動検出5 応 …