Skip to main content

Grove Smart IR Gesture Sensor (PAJ7660)

note

この文書は AI によって翻訳されています。内容に不正確な点や改善すべき点がございましたら、文書下部のコメント欄または以下の Issue ページにてご報告ください。
https://github.com/Seeed-Studio/wiki-documents/issues

Grove Smart IR Gesture Sensor (PAJ7660)

概要

Grove Smart IR Gesture Sensorは、赤外線カメラセンサーを搭載し、AIアルゴリズムを適用したインテリジェントなジェスチャー認識モジュールです。15種類以上のジェスチャーを広範囲で検出でき、IICおよびSPI通信の両方をサポートします。このモジュールは、Grove、Type-C、およびSeeed Studio XIAOとの直接接続も可能です。

特徴

  • コンパクトなAIジェスチャーセンサー: 赤外線カメラセンサーを搭載し、AIアルゴリズムを適用してジェスチャー検出を実現。サイズは4.3cm x 2.1cmのコンパクトな基板。
  • 15種類以上のジェスチャーを広範囲で検出: Nフィンガープッシュ、ピンチ、タップ、グラブ、回転、親指の上下、静的など、さまざまなジェスチャーをサポート。検出範囲は5〜40cm。
  • 高い互換性: XIAOシリーズインターフェースおよびGroveコネクタとI2C通信を介して互換性があり、SPI通信を介してPC上で画像表示をサポート。
  • 柔軟な電圧選択: Groveインターフェースは3.3Vおよび5Vシステムに対応。

ハードウェア概要

始め方

操作平面

ジェスチャー操作距離は15〜30cmで、最大距離は35cmを超えることはできません。センサーのFOVは水平78.3°、垂直62.9°で、操作エリアは30cmで48 x 36cm²です。

センサーまでの距離に加えて、センサーの配置場所にも注意が必要です。センサーの前面、左上隅に小さな人型の形があります。この図が直立している場合は、正しい位置に配置されています。逆さまの場合は、正確な認識結果が得られない可能性があります。

背景干渉

背景ノイズがジェスチャー認識の精度に影響を与える可能性があるため、手のひらの後ろに反射率の高い背景物体を避けることを推奨します。通常のジェスチャー認識条件では、手のひらと背景の間に少なくとも35cmの距離を確保することを推奨します。

ジェスチャータイプ

サポートされているすべてのジェスチャータイプは以下のセクションで説明されています。

ジェスチャー定義

ジェスチャー説明備考
Nフィンガー (N=0~5)拳の上に0〜5本の指
操作距離 15〜30cm
静的
Nフィンガープッシュ (N=1~5)N本の指がセンサーに向かって前進
操作距離 15〜30cm
プログラム可能な閾値
ピンチ2本の指を閉じてピンチ、開いてリリース
操作距離 15〜30cm
手のひらの中心座標をカーソルとして使用可能、ピンチ結果を報告
回転 CW/CCW手首を円形パターンで動かす
操作距離 15〜30cm
検出されたジェスチャー角度を設定可能、角度値を報告可能
手のスワイプ右または左両手を互いに離して一定の距離を移動
操作距離 15〜30cm
プログラム可能な閾値
タップ1本指でクリック(指が消える)
操作距離 15〜30cm
手のひらの中心座標をカーソルとして使用可能
グラブ5本指から0本指へ
操作距離 15〜30cm
手のひらの中心座標をカーソルとして使用可能
グラブ結果を報告
親指アップ拳の上に親指
操作距離 15〜25cm
親指ダウン拳の下に親指
操作距離 15〜25cm

ジェスチャー操作モード

ジェスチャーモードには、サムモード、カーソルモード、ジェスチャーモードの3種類があります。それぞれ特定のユーザーシナリオやアプリケーションに適したジェスチャータイプを定義しています。デフォルトの組み合わせモードには、サムモードを除くすべてのジェスチャーが含まれます。

モードデフォルト接続ジェスチャータイプ
2サムモード親指の上下
4カーソルモード静止指
プッシュ
回転
タップ
ピンチ
グラブ
5ジェスチャーモード(デフォルト)静止指
プッシュ
スワイプ
回転
タップ (IS_SELECT フラグ = 1)
ピンチ (IS_SELECT フラグ = 1)
グラブ (IS_SELECT フラグ = 1)

ハードウェアタイプ

Grove Smart IR Gesture Sensorは、IIC、SPI、USBの幅広い通信プロトコルをサポートしています。異なるモードは、背面の4ポジションDIPスイッチで直接選択できます。


以下の図と表は、4ポジションDIPスイッチを使用して希望のモードを選択する方法を示しています。

1234
I2CモードONOFFONON
SPIモードONONONON
USBモードOFFOFFOFFOFF
note

異なるパターンを使用する場合、配線やコードが若干異なる場合があります。これについては、以下の例で詳しく説明します。

上位コンピュータソフトウェアの使用

Grove Gesture SensorをUSBケーブルでコンピュータに接続し、リアルタイムで認識結果を確認したい場合は、上位コンピュータソフトウェアを使用するのが最適です。

ステップ1. ソフトウェアをダウンロードして開く

まず、こちら をクリックしてソフトウェアをzipファイルとしてダウンロードしてください。その後、ダウンロードしたzipファイルを解凍し、解凍されたGestureDemo_220620_Customerフォルダを開き、GestureDemo_220620_Customer.exeファイルをダブルクリックして実行します。

tip

この時点で、ジェスチャーセンサーが見つからないというエラーメッセージが表示される場合がありますが、エラーメッセージを閉じるだけで問題ありません。

ステップ2. Grove Gesture SensorをPCに接続する

次に、4ポジションDIPスイッチをすべてOFFにして、Grove Gesture SensorがUSBモードになっていることを確認してください。

その後、高品質のデータケーブルを使用して、Grove Gesture SensorのUSB-CポートをコンピュータのUSBポートに接続します。

ステップ3. ソフトウェアで結果を確認する

コンピュータに接続したら、ソフトウェアの左上にあるRunボタンをクリックし、その後Gestureモードを選択してリアルタイムで結果を確認します。

ジェスチャーの種類とその説明については、前のセクション を参照してください。

Arduinoライブラリ概要

tip

Arduinoを初めて使用する場合は、Arduinoの始め方を参照することを強くお勧めします。

機能

スケッチを開発する前に、ライブラリで利用可能な関数を確認しましょう。

  1. bool init() —— この関数はGrove Gesture Sensorを初期化し、初期化が成功した場合はTrueを、失敗した場合はFalseを返します。

  2. bool getResult(paj7620_gesture_t& res) —— この関数は、センサーが認識したジェスチャーの結果を取得するために使用されます。

インストール

ZIP形式のライブラリをダウンロードした後、Arduino IDEを開き、スケッチ > ライブラリをインクルード > .ZIPライブラリを追加をクリックします。ダウンロードしたZIPファイルを選択し、ライブラリが正しくインストールされると、通知ウィンドウにライブラリがライブラリに追加されましたと表示されます。これでライブラリのインストールは成功です。


デモ1: IICでセンサーをMCUに接続

ステップ1. 4ポジションDIPスイッチをIIC位置に切り替えます。

左から右への2番目のギアをOFFに設定し、他はすべてONにします。

ステップ2. MCUをGrove Gesture SensorにGroveケーブルで接続します。

IICインターフェースはXIAOシリーズおよびArduino/Seeeduinoシリーズと互換性があります。Arduino/Seeeduinoを使用している場合は、Groveケーブルを使用してIICインターフェースに接続する必要があるかもしれません。

XIAOを使用している場合は、すべてが簡単です。Grove Gesture Sensorのメスコネクタに直接差し込むだけで使用できます。USB-Cポートが常に外側を向いていることに注意してください。

ステップ3. プログラムをアップロード

以下のプログラムをArduino IDEにコピーし、使用しているXIAO開発ボードを選択して、プログラムをコンパイルしてアップロードします。

コード1: ジェスチャーモード(デフォルト)

#include "Gesture.h"

pag7660 Gesture; // デフォルトで複合モードを使用

void setup() {
Serial.begin(9600);
while(!Serial) {
delay(100);
}
Serial.println("\nPAG7660 TEST DEMO: ジェスチャー複合モード。");

if(Gesture.init()) {
Serial.println("PAG7660 初期化成功");
} else {
Serial.println("PAG7660 初期化失敗");
}
Serial.println("ジェスチャーを入力してください:\n");
}

void loop() {
pag7660_gesture_t result;
if (Gesture.getResult(result)) {
printResultCombinedMode(result);
}
delay(100);
}

void printResultCombinedMode(const pag7660_gesture_t& result) {
const char *cursor_str[] = {
NULL,
"タップ",
"グラブ",
"ピンチ",
};
switch (result.type) {
case 0:
switch (result.cursor.type) {
case 1:
case 2:
case 3:
if (result.cursor.select)
Serial.println(cursor_str[result.cursor.type]);
break;
default:
break;
}
break;
case 1:
case 2:
case 3:
case 4:
case 5:
Serial.print(result.type);
Serial.println("-フィンガー");
break;
case 6:
Serial.print("右回転 ");
Serial.println(result.rotate);
break;
case 7:
Serial.print("左回転 ");
Serial.println(result.rotate);
break;
case 8:
Serial.println("左スワイプ");
break;
case 9:
Serial.println("右スワイプ");
break;
case 19:
case 20:
case 21:
case 22:
case 23:
Serial.print(result.type - 19 + 1);
Serial.println("-フィンガープッシュ");
break;
default:
break;
}
}

すべてが正常に動作すれば、Grove Gesture Sensorに直接ジェスチャーを行うと、シリアルモニターに結果が出力されます。

コード2: サムモード

#include "Gesture.h"

pag7660 Gesture(GESTURE_THUMB_MODE); // サムモードを使用

void setup() {
Serial.begin(9600);
while(!Serial) {
delay(100);
}
Serial.println("\nPAG7660 TEST DEMO: ジェスチャーサムモード。");

// SPIを使用するためにSPIチップセレクトピン番号で初期化
if(Gesture.init()) {
Serial.println("PAG7660 初期化成功");
} else {
Serial.println("PAG7660 初期化失敗");
}
Serial.println("ジェスチャーを入力してください:\n");
}

void loop() {
pag7660_gesture_t result;
if (Gesture.getResult(result)) {
if (result.thumb.up)
Serial.println("サムアップ");
else if (result.thumb.down)
Serial.println("サムダウン");
}
delay(100);
}

もしすべてが正常に動作していれば、Grove Gesture Sensor に直接ジェスチャーを行うと、シリアルモニターに結果が出力されます。

tip

Grove Gesture Sensor には3つの異なるモードがあります。2つの自己完結型モードのプログラム開発を完了し、ここで利用可能にしています。異なるモードの違いについては、Gesture Operation Mode を参照してください。

デモ 2: センサーを SPI で XIAO に接続する

IIC の代わりに SPI アプローチを使用したい場合は、以下の手順を参照してプロジェクトを完成させてください。

ステップ 1. 4ポジション DIP スイッチを SPI の位置に切り替える

すべてのスイッチを ON の位置に切り替える必要があります。

ステップ 2. XIAO を Grove Gesture Sensor に接続する

XIAO を Grove Gesture Sensor のメスコネクタに直接差し込み、使用します。USB-C ポートが常に外側を向いていることに注意してください。

ステップ 3. プログラムをアップロードする

以下のプログラムを Arduino IDE にコピーし、使用している XIAO 開発ボードを選択して、プログラムをコンパイルしてアップロードしてください。

コード 1: ジェスチャーモード(デフォルト)

#include "Gesture.h"

#define PAG7660_CS D3
pag7660 Gesture; // デフォルトで結合モードが使用されます

void setup() {
Serial.begin(9600);
while(!Serial) {
delay(100);
}
Serial.println("\nPAG7660 TEST DEMO: Gesture combined mode.");

if(Gesture.init(PAG7660_CS)) {
Serial.println("PAG7660 initialization success");
} else {
Serial.println("PAG7660 initialization failed");
}
Serial.println("Please input your gestures:\n");
}

void loop() {
pag7660_gesture_t result;
if (Gesture.getResult(result)) {
printResultCombinedMode(result);
}
delay(100);
}

void printResultCombinedMode(const pag7660_gesture_t& result) {
const char *cursor_str[] = {
NULL,
"Tap", // タップ
"Grab", // グラブ
"Pinch", // ピンチ
};
switch (result.type) {
case 0:
switch (result.cursor.type) {
case 1:
case 2:
case 3:
if (result.cursor.select)
Serial.println(cursor_str[result.cursor.type]);
break;
default:
break;
}
break;
case 1:
case 2:
case 3:
case 4:
case 5:
Serial.print(result.type);
Serial.println("-finger"); // 指
break;
case 6:
Serial.print("Rotate Right "); // 右回転
Serial.println(result.rotate);
break;
case 7:
Serial.print("Rotate Left "); // 左回転
Serial.println(result.rotate);
break;
case 8:
Serial.println("Swipe Left"); // 左スワイプ
break;
case 9:
Serial.println("Swipe Right"); // 右スワイプ
break;
case 19:
case 20:
case 21:
case 22:
case 23:
Serial.print(result.type - 19 + 1);
Serial.println("-finger push"); // 指プッシュ
break;
default:
break;
}
}

もしすべてが正常に動作していれば、Grove Gesture Sensor に直接ジェスチャーを行うと、シリアルモニターに結果が出力されます。

コード 2: サムモード

#include "Gesture.h"

#define PAG7660_CS D3
pag7660 Gesture(GESTURE_THUMB_MODE); // サムモードが使用されます

void setup() {
Serial.begin(9600);
while(!Serial) {
delay(100);
}
Serial.println("\nPAG7660 TEST DEMO: Gesture thumb mode.");

// SPI を使用するために SPI チップセレクトピン番号で初期化
if(Gesture.init(PAG7660_CS)) {
Serial.println("PAG7660 initialization success");
} else {
Serial.println("PAG7660 initialization failed");
}
Serial.println("Please input your gestures:\n");
}

void loop() {
pag7660_gesture_t result;
if (Gesture.getResult(result)) {
if (result.thumb.up)
Serial.println("Thumb Up"); // 親指を上げる
else if (result.thumb.down)
Serial.println("Thumb Down"); // 親指を下げる
}
delay(100);
}

もしすべてが正常に動作していれば、Grove Gesture Sensor に直接ジェスチャーを行うと、シリアルモニターに結果が出力されます。

tip

Grove Gesture Sensor には3つの異なるモードがあります。2つの自己完結型モードのプログラム開発を完了し、ここで利用可能にしています。異なるモードの違いについては、Gesture Operation Mode を参照してください。

リソース

技術サポートと製品ディスカッション

弊社製品をお選びいただきありがとうございます!お客様が弊社製品をスムーズにご利用いただけるよう、さまざまなサポートを提供しております。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルをご用意しています。

Loading Comments...