Grove Smart IR Gesture Sensor (PAJ7660)
この文書は 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スイッチを使用して希望のモードを選択する方法を示しています。

1 | 2 | 3 | 4 | |
---|---|---|---|---|
I2Cモード | ON | OFF | ON | ON |
SPIモード | ON | ON | ON | ON |
USBモード | OFF | OFF | OFF | OFF |
異なるパターンを使用する場合、配線やコードが若干異なる場合があります。これについては、以下の例で詳しく説明します。
上位コンピュータソフトウェアの使用
Grove Gesture SensorをUSBケーブルでコンピュータに接続し、リアルタイムで認識結果を確認したい場合は、上位コンピュータソフトウェアを使用するのが最適です。
ステップ1. ソフトウェアをダウンロードして開く
まず、こちら をクリックしてソフトウェアをzipファイルとしてダウンロードしてください。その後、ダウンロードしたzipファイルを解凍し、解凍されたGestureDemo_220620_Customerフォルダを開き、GestureDemo_220620_Customer.exeファイルをダブルクリックして実行します。
この時点で、ジェスチャーセンサーが見つからないというエラーメッセージが表示される場合がありますが、エラーメッセージを閉じるだけで問題ありません。
ステップ2. Grove Gesture SensorをPCに接続する
次に、4ポジションDIPスイッチをすべてOFFにして、Grove Gesture SensorがUSBモードになっていることを確認してください。

その後、高品質のデータケーブルを使用して、Grove Gesture SensorのUSB-CポートをコンピュータのUSBポートに接続します。
ステップ3. ソフトウェアで結果を確認する

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

ジェスチャーの種類とその説明については、前のセクション を参照してください。
Arduinoライブラリ概要
Arduinoを初めて使用する場合は、Arduinoの始め方を参照することを強くお勧めします。
機能
スケッチを開発する前に、ライブラリで利用可能な関数を確認しましょう。
bool init()
—— この関数はGrove Gesture Sensorを初期化し、初期化が成功した場合はTrueを、失敗した場合はFalseを返します。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 に直接ジェスチャーを行うと、シリアルモニターに結果が出力されます。

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 に直接ジェスチャーを行うと、シリアルモニターに結果が出力されます。

Grove Gesture Sensor には3つの異なるモードがあります。2つの自己完結型モードのプログラム開発を完了し、ここで利用可能にしています。異なるモードの違いについては、Gesture Operation Mode を参照してください。
リソース
- [ZIP] Grove ジェスチャーセンサー SCH&PCB
- [PDF] Grove ジェスチャーセンサー SCH
- [データシート] PAG7661QN_FW-DS_V0.8_05072022_Confidential.pdf
技術サポートと製品ディスカッション
弊社製品をお選びいただきありがとうございます!お客様が弊社製品をスムーズにご利用いただけるよう、さまざまなサポートを提供しております。異なる好みやニーズに対応するため、いくつかのコミュニケーションチャネルをご用意しています。