Skip to main content

Grove 智能红外手势传感器 (PAJ7660)

简介

Grove 智能红外手势传感器是一款智能手势识别模块,配备红外摄像头传感器并应用 AI 算法。它可以检测超过 15 种手势,具有广泛的检测范围,同时支持 IIC 和 SPI 通信。该模块还支持 Grove、Type-C 和 Seeed Studio XIAO 直接连接。

特性

  • 紧凑型 AI 手势传感器:配备红外摄像头传感器并应用 AI 算法实现手势检测,尺寸紧凑,仅为 4.3cm x 2.1cm
  • 超过 15 种手势,检测范围广:支持多种手势,如 N 指推、捏合、点击、抓取、旋转、大拇指上下、静态等,检测范围为 5-40cm
  • 高兼容性:通过 I2C 通信兼容 XIAO 系列接口和 Grove 连接器,同时支持通过 SPI 通信在 PC 上显示图像
  • 灵活的电压选择:Grove 接口兼容 3.3V 和 5V 系统

硬件概览

入门指南

操作平面

手势操作距离为 15 至 30 cm,最远不能超过 35 cm。基于传感器 FOV 78.3°(水平)和 62.9°(垂直),操作区域在 30 cm 处为 48 x 36 cm²。

除了传感器的距离外,还需要注意传感器的放置位置。在传感器的正面左上角有一个小人形标志。如果看到人形直立,则表示放置正确。如果是倒置的,则可能无法获得准确的识别结果。

背景干扰

由于背景噪声可能影响手势识别的准确性,建议避免手掌后方存在反射较高的背景物体。在正常手势识别条件下,建议手掌与背景之间至少保持 35cm 的距离。

手势类型

以下部分描述了所有支持的手势类型。

手势定义

手势描述备注
N 指 (N=0~5)拳头顶部的 0 ~ 5 根手指
操作距离 15 至 30 cm
静态
N 指推 (N=1~5)N 根手指向传感器方向移动
操作距离 15 至 30 cm
可编程阈值
捏合两指靠近捏合,打开释放
操作距离 15 至 30 cm
可使用手掌中心坐标作为光标并报告捏合结果
顺时针/逆时针旋转手腕以圆形模式移动
操作距离 15 至 30 cm
可设置手势检测角度,可报告角度值
手向右或向左滑动双手向相反方向滑动一段距离
操作距离 15 至 30 cm
可编程阈值
点击单指点击(手指消失)
操作距离 15 至 30 cm
可使用手掌中心坐标作为光标
抓取5 指变为 0 指
操作距离 15 至 30 cm
可使用手掌中心坐标作为光标
报告抓取结果
大拇指向上拳头顶部的大拇指
操作距离 15 至 25cm
大拇指向下拳头底部的大拇指
操作距离 15 至 25cm

手势操作模式

共有 3 种手势模式:拇指模式、光标模式和手势模式。每种模式定义了特定的手势类型,以适应某些用户场景或应用。默认的组合模式包含除拇指手势外的所有手势。

模式默认连接手势类型
2拇指模式拇指向上/向下
4光标模式静态手指
推动
旋转
点击
捏合
抓取
5手势模式(默认)静态手指
推动
滑动
旋转
点击(IS_SELECT 标志 = 1)
捏合(IS_SELECT 标志 = 1)
抓取(IS_SELECT 标志 = 1)

硬件类型

Grove 智能红外手势传感器支持多种通信协议,包括 IIC、SPI 和 USB。不同模式可通过背面的 4 位 DIP 开关直接选择。


下图和表格将展示如何使用 4 位 DIP 开关选择您希望使用的模式。

1234
I2C 模式ONOFFONON
SPI 模式ONONONON
USB 模式OFFOFFOFFOFF
note

使用不同模式时,接线和代码可能会略有不同。我们将在后续示例中详细说明。

使用上位机软件

如果您希望通过 USB 数据线将 Grove 手势传感器连接到计算机,并实时查看识别结果,那么使用上位机软件是您的最佳选择。

步骤 1. 下载并打开软件

您可以通过点击 这里 下载软件的 zip 文件。然后,请解压下载的 zip 文件,打开解压后的 GestureDemo_220620_Customer 文件夹,并双击运行 GestureDemo_220620_Customer.exe 文件。

tip

此时可能会弹出一个错误窗口,提示未找到手势传感器。我们可以直接关闭错误消息。

步骤 2. 将 Grove 手势传感器连接到 PC

接下来,请确保 Grove 手势传感器处于 USB 模式,将 4 位 DIP 开关全部调至 OFF。

然后使用高质量的数据线,将 Grove 手势传感器的 USB-C 接口连接到计算机的 USB 接口。

步骤 3. 在软件中查看结果

连接到计算机后,我们点击软件左上角的 Run 按钮,然后选择 Gesture 模式以实时查看结果。

手势类型及其介绍可以在 前面的部分 中找到。

Arduino 库概述

tip

如果这是您第一次使用 Arduino,我们强烈建议您参考 Arduino 入门指南

功能

在开始开发代码之前,让我们先了解一下该库的可用功能。

  1. bool init() —— 此函数用于初始化 Grove 手势传感器。如果初始化成功,返回 True;如果失败,返回 False

  2. bool getResult(paj7620_gesture_t& res) —— 此函数用于获取传感器识别手势的结果。

安装

下载 ZIP 库文件后,打开 Arduino IDE,点击 Sketch > Include Library > Add .ZIP Library。选择刚刚下载的 ZIP 文件,如果库安装成功,您会在通知窗口中看到 Library added to your libraries,这表示库已成功安装。


示例 1:通过 IIC 连接传感器到 MCU

第 1 步:将 4 位 DIP 开关拨到 IIC 位置

从左到右的第二个开关需要设置为 OFF,其他开关设置为 ON。

第 2 步:通过 Grove 电缆将 MCU 连接到 Grove 手势传感器

IIC 接口兼容 XIAO 系列和 Arduino/Seeeduino 系列。如果您使用的是 Arduino/Seeeduino,则可能需要使用 Grove 电缆连接到它们的 IIC 接口。

如果您使用的是 XIAO,那么操作非常简单,您只需直接将其插入 Grove 手势传感器的母接口即可使用。请注意,USB-C 接口始终朝外。

第 3 步:上传程序

将以下程序复制到 Arduino IDE 中,选择您使用的 XIAO 开发板,编译并上传程序。

代码 1:手势模式(默认)

#include "Gesture.h"

pag7660 Gesture; // 默认使用组合模式

void setup() {
Serial.begin(9600);
while(!Serial) {
delay(100);
}
Serial.println("\nPAG7660 测试示例:手势组合模式。");

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 手势传感器做手势,它将在串口监视器中输出结果。

代码 2:拇指模式

#include "Gesture.h"

pag7660 Gesture(GESTURE_THUMB_MODE); // 使用拇指模式

void setup() {
Serial.begin(9600);
while(!Serial) {
delay(100);
}
Serial.println("\nPAG7660 测试示例:手势拇指模式。");

// 使用 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 手势传感器做手势,它将在串行监视器中输出结果。

:::提示 Grove 手势传感器有三种不同的模式。我们已经完成了两种独立模式的程序开发,并在此提供,请参考 手势操作模式 了解不同模式之间的差异。 :::

演示 2:通过 SPI 将传感器连接到 XIAO

如果您希望使用 SPI 方法而不是 IIC,可以参考以下步骤完成您的项目。

步骤 1. 将 4 位 DIP 开关切换到 SPI 位置。

所有开关都需要切换到 ON 位置。

步骤 2. 将 XIAO 连接到 Grove 手势传感器。

将 XIAO 直接插入 Grove 手势传感器的母连接器并使用它。请注意,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 测试演示:手势组合模式。");

if(Gesture.init(PAG7660_CS)) {
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 手势传感器做手势,它将在串行监视器中输出结果。

代码 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 测试演示:手势拇指模式。");

// 使用 SPI 初始化,传入芯片选择引脚号
if(Gesture.init(PAG7660_CS)) {
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 手势传感器做手势,它将在串行监视器中输出结果。

:::提示 Grove 手势传感器有三种不同的模式。我们已经完成了两种独立模式的程序开发,并在此提供,请参考 手势操作模式 了解不同模式之间的差异。 :::

资源

技术支持与产品讨论

感谢您选择我们的产品!我们致力于为您提供各种支持,确保您使用我们的产品时拥有流畅的体验。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...