产品简介
这是一款支持人脸检测(含人体肩部以上区域)和 5 种手势识别的 AI 视觉传感器,最远可在 3 米距离内稳定工作。
在需要非接触操作的场景中,它能精准适配不同需求:
- 客厅追剧时,躺在沙发上比手势切换电视频道、调节音量大小,不用找遥控器,操作更随心;
- 养老院房间里,行动不便的老人坐在沙发上,比手势呼叫护理员、关闭床头灯,不用弯腰按按钮或找呼叫器,降低意外风险。
它的人脸检测(范围覆盖人体肩部以上区域)核心价值在于 “智能判断与跟踪”:社区宣传屏检测到围观人群时自动开启音视频,人群离开后关闭以减少噪声;空调或风扇能实时跟踪人脸位置精准送风,人走到哪吹到哪,避免能源浪费。
而 5 种手势识别则聚焦 “无媒介远程控制”:不用找遥控器,不用接触设备,对着目标比 “👍” 就能开灯、比 “👌” 就能调温 —— 无论是在家居生活还是公共场景,一个简单手势就能完成操作,既便捷又充满科技感。
产品特性
- AI 识别性能:离线方案,3 米内高速识别 5 种手势,识别准确
- 人脸检测:支持肩部以上区域检测,输出数量、位置坐标及识别得分
- 通讯方式:I2C 和 UART 两种数据通讯方式
- 电压兼容:兼容 3.3V/5V 电平和供电电压
- 开发支持:支持 MakeCode 和 Mind + 图形化编程
应用场景
- 无接触公共区域信息屏幕控制
- 舞台表演
- 家电控制
- 音乐播放控制
尺寸图
物理尺寸
- PCB尺寸:42mm*32mm
- 安装孔间距:25mm*35mm
- 安装孔直径:3.1mm
规格参数
参数类别 | 具体参数 |
---|---|
电源参数 | 供电电压:3.3V-5V 电平电压:3.3V 工作电流:100mA |
接口参数 | 通讯接口:PH2.0-4P/2.54mm 排针孔 通讯方式:I2C/UART I2C/UART 默认地址:0x72 串口默认波特率:9600 串口通讯协议:modbus 中断接口:2.54mm 排针孔 |
识别参数 | 手势识别类型:5 种 - 点赞👍 - 好的👌 - 数字 5🤚 - 耶✌️ - 666🤙 识别距离(手势 / 人脸):0.5-3 米 人脸识别范围:人体肩部以上区域 最大识别人脸数量:10 个以内 人脸识别得分:0-100 人脸位置坐标范围:0-640 中断输出:识别到手势时输出低电平 摄像头视场角:D=85° 摄像头焦距:1.56mm |
显示参数 | 手势指示灯:RGB 灯 - 蓝色👍 - 绿色👌 - 红色🤚 - 黄色✌️ - 紫色🤙 人脸指示灯:单颗 LED(亮灯 = 有人,灭灯 = 无人) |
功能示意图
标号 | 名称 | 功能描述 |
---|---|---|
① | D/T | I2C数据线SDA或串口UART发送端TXD(3.3V电平) |
② | C/R | I2C时钟线SCL或串口UART接收端RXD(3.3V电平) |
③ | GND | 电源负极 |
④ | VCC | 电源正极(3.3~5.5V) |
⑤ | INT | 中断输出,识别到任何手势输出低电平 |
⑥ | I2C/UART | I2C/UART通信模式选择开关 |
⑦ | 头肩指示灯 | 当摄像头检测到人脸时常亮,当人员离开时熄灭 |
⑧ | 手势指示灯 | 点亮5种固定的手势对应的颜色 |
核心功能详解
1. 手势识别功能
支持的手势及对应信息
动作示例 | 通俗名称 | 手势图示 | 指示灯颜色 | 程序对应数值 |
---|---|---|---|---|
竖大拇指 | 点赞 | 👍 | 蓝色 | 1 |
伸出中指、无名指、小指,并用食指和拇指尖互碰(OK手势) | 好的(OK) | 👌 | 绿色 | 2 |
手掌展开向外 | 数字5(手掌) | 🤚 | 红色 | 3 |
伸出食指和中指 | 耶(剪刀手) | ✌️ | 黄色 | 4 |
伸出大拇指和小指 | 666 | 🤙 | 紫色 | 5 |
核心能力
- 可实时检测 5 种手势(👍、👌、🤚、✌️、🤙),3 米内稳定识别;识别后通过对应颜色的指示灯实时反馈(如竖大拇指亮蓝色),同时输出手势类型及识别得分。
常见问题解答
问:手势得分代表什么意思,多少分算有效识别?
答:手势识别结果输出 0 - 100 分数值,程序默认≥60 分判定为有效手势(才会触发功能 )。得分越高,传感器判定当前动作与标准手势的 “相似度” 越高,比如 80 分及以上时,基本可确认是目标手势;若得分<30 分,多因识别条件不佳导致(如手势动作不标准、距离过远超出有效范围、环境光线干扰等 ),此时大概率无法精准识别手势。
问:手势识别的距离范围是怎样的,不同距离使用有什么需要注意的?
答:
- 识别范围:支持 0.5 - 3 米识别,在识别手势之前需保证人体肩部以上区域完整进入摄像头视场并被识别(人脸指示灯亮),若距离过近(<0.5 米 ),肩部以上易超出镜头捕捉范围,导致无法识别;
- 最佳距离(1 - 2 米):此区间内摄像头能平衡 “画面覆盖完整度” 与 “特征细节清晰度” ,手势动作能精准捕捉,识别准确率、响应速度最优;
- 最远距离(≤3 米):受环境干扰影响较大 ,若存在遮挡物(如人群、家具阻隔 )、光线复杂(强光直射 / 弱光昏暗 ),会降低识别效果。建议在空旷、光线均匀的场景使用 3 米极限距离,优先保障镜头无遮挡、画面清晰。
2. 人脸检测功能(含人体肩部以上区域)
核心能力
- 能检测 “人脸范围”,通过人脸指示灯反馈(亮灯 = 有人,灭灯 = 无人)。
- 能检测人脸数量(最多 10 张),实时输出人脸数量、得分最高的人脸坐标及对应的识别得分。
常见问题解答
问:人脸坐标范围怎么理解,有什么特殊含义?
答:人脸 X/Y 坐标范围为 0 - 640 ,对应摄像头视野内的物理位置坐标,数值大小与实际位置直接关联,X 值越大,代表人脸在摄像头视野中越靠右;Y 值越大,代表越靠下(坐标原点在视野左上角)。例如 (320,320) 对应视野正中心,可直观定位人脸在画面中的具体方位,方便实现舵机跟踪等基于位置的功能。
问:人脸得分代表什么,多少分能确认是人脸?
答:人脸识别结果输出 0 - 100 分数值,程序默认为 60 分作为参考阈值,得分越高表示该区域 “为人脸” 的可能性越大,如得分 90 表示极可能是人脸。
问:多人脸同时出现时,坐标返回有什么规则?
答:暂不支持同时返回多张人脸坐标,只会返回识别得分最高的那 1 张人脸的坐标(得分最高 = 看得最清楚、最像人脸 )。
问:同时检测到多张人脸和手势时,得分对应规则是什么?
答:当检测到多张人脸及手势时,得分默认对应手势得分最高的目标(即手势最清晰的目标 )。
问:手势和人脸检测的先后逻辑及使用需要注意什么?
答:摄像头先检测人脸是否被识别,再检测是否有 5 种手势,请确保人脸及手势都位于摄像头检测范围(即人脸指示灯亮起时再做对应的手势 )。
Arduino IDE 使用教程
通过以下教程,你将掌握 SEN0626 AI 视觉手势 / 人脸跟踪传感器在 Arduino IDE 环境下的基础使用方法与进阶应用,具体包括:分别通过 I2C 和 UART 两种通讯方式读取传感器数据,了解手势识别与人脸检测的实际效果;并通过炫彩灯环、人体跟踪风扇两个实例,学习如何将传感器与其他设备结合实现复杂功能(以下教程以 FireBeetle 2 ESP32-E、DFRduino UNO R3 等控制器与 SEN0626 传感器搭配为例)。
基础教程
- 硬件准备
- 软件准备
- Arduino IDE 点击下载Arduino IDE
- 下载并安装DFRobot_GestureFaceDetection
- 下载并安装DFRobot_RTU
- 请点击此处查看如何安装库?
使用I2C读取数据
我们可以按照下图进行接线:
- 接线图
- 样例代码
- 第一步:将传感器与ESP32-E控制器按照上方的连线图相连,并将传感器上的通信模式选择开关拨到I2C一侧。
- 第二步:打开Arduino IDE,复制以下代码并上传至 ESP32-E。
- 第三步:打开Arduino IDE的串口监控视器,将波特率调至115200,观察串口打印结果。
#include "DFRobot_GestureFaceDetection.h"
#define DEVICE_ID 0x72
DFRobot_GestureFaceDetection_I2C gfd(DEVICE_ID);
char str[100];
void setup(){
gfd.begin(&Wire);
Serial.begin(115200);
gfd.setFaceDetectThres(60);
gfd.setGestureDetectThres(60);
gfd.setDetectThres(100);
}
void loop(){
if(gfd.getFaceNumber() > 0){
uint16_t faceScore = gfd.getFaceScore();
uint16_t faceX = gfd.getFaceLocationX();
uint16_t faceY = gfd.getFaceLocationY();
sprintf(str, "detect face at (x = %d, y = %d, score = %d)\n", faceX, faceY, faceScore);
Serial.print(str);
uint16_t gestureType = gfd.getGestureType();
uint16_t gestureScore = gfd.getGestureScore();
sprintf(str, "detect gesture %d, score = %d\n", gestureType, gestureScore);
Serial.print(str);
}
delay(1500);
}
结果
串口监视器输出内容:
解读:
- 第一行:人脸检测数据
x = 291, y = 330
:表示检测到的人脸(肩部以上区域)在摄像头视野中的位置坐标(范围 0-640,数值越大越靠近视野右侧 / 下方);score = 74
:人脸识别得分(0-100),分数越高表示识别越精准(≥60 分为有效识别)。
- 第二行:手势检测数据
gesture 2
:表示识别到的手势类型为 “好的”(对应程序数值 2,可参考 “核心功能详解” 中的手势对照表);score = 91
:手势识别得分(0-100),分数越高表示手势越标准(≥60 分为有效识别),此时手势指示灯会同步亮起绿色(对应 “好的” 手势)。
注意:
仅当传感器同时检测到人脸(肩部以上区域)和手势时,才会输出上述两行信息;若未检测到人脸,串口无输出。
使用UART读取数据
我们可以按照下图进行接线
- 接线图
- 样例代码
- 第一步:将传感器与ESP32-E控制器按照上方的连线图相连,并将传感器上的通信模式选择开关拨到UART一侧。
- 第二步:打开Arduino IDE,复制以下代码并上传至 ESP32-E。
- 第三步:打开Arduino IDE的串口监控视器,将波特率调至115200,观察串口打印结果。
#include "DFRobot_GestureFaceDetection.h"
#define DEVICE_ID 0x72
DFRobot_GestureFaceDetection_UART gfd(&Serial1, DEVICE_ID);
void setup(){
Serial1.begin(9600,SERIAL_8N1, D2, D3);
Serial.begin(115200);
delay(1500);
Serial.print("Product ID: ");
Serial.println(gfd.getPid());
Serial.print("Vendor ID: ");
Serial.println(gfd.getVid());
}
void loop(){
Serial.print("Faces detected: ");
Serial.println(gfd.getFaceNumber());
delay(1500);
}
结果
串口监视器输出内容:
解读:
- 前两行:设备身份信息
Product ID: 626
:传感器的产品编号(十六进制对应 0x3343);Vendor ID: 13123
:供应商编号(十六进制对应 0x0272)。
- 第三行:人脸检测结果
Faces detected: 1
:表示当前检测到 1 个人脸(肩部以上区域),此时人脸指示灯常亮;- 若无人,会显示
Faces detected: 0
,指示灯同步熄灭。
人脸检测信息每 1.5 秒刷新一次,直观反馈检测结果。
进阶教程
炫彩灯环
通过本教程,你将学会如何将 AI 视觉手势 / 人脸跟踪传感器 与 WS2812B RGB 灯环 结合,利用传感器实现灯环颜色的非接触控制,打造一个随手势变换色彩的炫彩灯环装置。
硬件准备
软件准备
- Arduino IDE 点击下载Arduino IDE
- 下载并安装DFRobot_GestureFaceDetection
- 下载并安装DFRobot_RTU
- 下载并安装FastLED
- 如何安装库
接线图
我们可以按照下图进行接线
样例代码
- 第一步:将传感器、WS2812B 灯环与 ESP32-C3 控制器按照接线图连接,传感器通讯模式开关拨至 I2C 侧。
- 第二步:打开Arduino IDE,复制以下代码并上传至 ESP32-C3。
#include <Wire.h>
#include <FastLED.h>
#include "DFRobot_GestureFaceDetection.h"
#define LED_PIN 4
#define NUM_LEDS 93
#define DEVICE_ID 0x72
CRGB leds[NUM_LEDS];
DFRobot_GestureFaceDetection_I2C gfd(DEVICE_ID);
void setup() {
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
Wire.begin(8, 9); // SDA, SCL
gfd.begin(&Wire);
Serial.begin(115200);
gfd.setFaceDetectThres(60);
gfd.setGestureDetectThres(60);
gfd.setDetectThres(100);
}
void loop() {
if(gfd.getFaceNumber() > 0) {
uint16_t gestureType = gfd.getGestureType();
switch(gestureType) {
case 1:
setAllLEDs(CRGB::Blue);
break;
case 2:
setAllLEDs(CRGB::Green);
break;
case 3:
setAllLEDs(CRGB::Red);
break;
case 4:
setAllLEDs(CRGB::Yellow);
break;
case 5:
setAllLEDs(CRGB::Purple);
break;
default:
setAllLEDs(CRGB::Black);
break;
}
}
else {
setAllLEDs(CRGB::Black);
}
delay(1500);
}
void setAllLEDs(CRGB color) {
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = color;
}
FastLED.show();
}
结果
传感器检测到人脸(肩部以上区域)时,灯环会根据你做出的手势同步变换颜色:
- 手势 1(点赞)→ 蓝色;
- 手势 2(好的)→ 绿色;
- 手势 3(数字 5)→ 红色;
- 手势 4(耶)→ 黄色;
- 手势 5(666)→ 紫色。
未检测到人脸时,灯环自动熄灭,实现 “人在灯亮、手势控色” 的智能效果。
人脸跟踪风扇
通过本教程,你将学会如何将 AI 视觉手势 / 人脸跟踪传感器 与 直流电机风扇、舵机 结合,实现两大核心功能:用手势控制风扇启停,同时让风扇自动跟踪人脸位置转动,打造 “人到风到、手势可控” 的智能风扇装置。
硬件准备
- DFR0216 DFRduino UNO R3 ×1
- DFR0265 Gravity: IO 传感器扩展板 V7.1 ×1
- DFR0411 Gravity: 130 直流电机风扇 ×1
- SER0056 2Kg 300°离合舵机 ×1
- SEN0626 AI视觉手势/人脸跟踪传感器 ×1
软件准备
- Arduino IDE 点击下载Arduino IDE
- 下载并安装DFRobot_GestureFaceDetection
- 下载并安装DFRobot_RTU
- 如何安装库
接线图
可按照下图进行接线:
样例代码
- 第一步:将传感器、DFRduino UNO R3控制器、IO 传感器扩展板、风扇与舵机按照接线图连接,传感器通讯模式开关拨至 I2C 侧。
- 第二步:打开Arduino IDE,复制以下代码并上传至 DFRduino UNO R3。
#include <Wire.h>
#include <Servo.h>
#include "DFRobot_GestureFaceDetection.h"
#define DEVICE_ID 0x72
#define FAN_PIN 3
#define SERVO_PIN 5
Servo myservo;
DFRobot_GestureFaceDetection_I2C gfd(DEVICE_ID);
void setup(){
myservo.attach(SERVO_PIN);
myservo.write(0);
gfd.begin(&Wire);
Serial.begin(115200);
gfd.setFaceDetectThres(60);
gfd.setGestureDetectThres(60);
gfd.setDetectThres(100);
pinMode(FAN_PIN, OUTPUT);
}
void loop(){
//Serial.println(gfd.getGestureType());
if(gfd.getFaceNumber() > 0){
uint16_t gestureType = gfd.getGestureType();
if(gestureType == 2){
analogWrite(FAN_PIN, 255);
}
else if(gestureType == 3){
analogWrite(FAN_PIN, 0);
}
uint16_t x = gfd.getFaceLocationX();
Serial.println(x);
myservo.write(map(x,0,620,10,170));
Serial.println(gfd.getGestureType());
}
}
结果
当传感器检测到人脸(肩部以上区域)时,系统启动以下联动效果:
- 手势控风扇
- 做出 “好的(OK)” 手势(对应手势类型 2):风扇立即以最大功率开启,无需接触开关;
- 做出 “数字 5” 手势(对应手势类型 3):风扇自动关闭,实现非接触式启停控制。
- 人脸位置实时跟踪 舵机会带动风扇,根据人脸在摄像头视野中的 X 坐标(0-620 范围)实时调节角度:
- 人脸向左移动(X 值减小),舵机角度同步减小(10°-170° 范围),风扇向左转向;
- 人脸向右移动(X 值增大),舵机角度同步增大,风扇向右转向; 整个过程平滑连续,实现 “人走到哪,风扇就转向哪” 的精准跟随效果。
- 调试反馈 串口监视器实时输出人脸 X 坐标值和当前识别到的手势类型(如 “300”“2”),方便观察设备运行状态与调试优化。
注:追踪风扇结构文件请在更多下载里查看
API函数
/**
* @fn getPid
* @brief 获取设备的PID。
* @return 设备的PID。
*/
uint16_t getPid();
/**
* @fn getVid
* @brief 获取设备的VID。
* @return 设备的VID。
*/
uint16_t getVid();
/**
* @fn setDeviceAddr
* @brief 设置设备地址。
* @param addr 设备地址。
* @return 如果成功设置地址,则返回真;否则返回假。
*/
bool setDeviceAddr(uint16_t addr);
/**
* @fn configUart
* @brief 配置UART设置。
*
* 此方法用于设置设备的UART通信参数,包括波特率、校验位和停止位。
* 用户可以根据需求选择适当的参数,以确保与设备的稳定有效通信。
*
* @param baud 波特率配置,类型为`eBaudConfig_t`,可能的值包括:
* - `eBaud_1200` - 1200波特
* - `eBaud_2400` - 2400波特
* - `eBaud_4800` - 4800波特
* - `eBaud_9600` - 9600波特
* - `eBaud_14400` - 14400波特
* - `eBaud_19200` - 19200波特
* - `eBaud_38400` - 38400波特
* - `eBaud_57600` - 57600波特
* - `eBaud_115200`- 115200波特
* - `eBaud_230400`- 230400波特
* - `eBaud_460800`- 460800波特
* - `eBaud_921600`- 921600波特
*
* @param parity 校验位配置,类型为`eParityConfig_t`,可能的值包括:
* - `UART_CFG_PARITY_NONE` - 无校验
* - `UART_CFG_PARITY_ODD` - 奇校验
* - `UART_CFG_PARITY_EVEN` - 偶校验
* - `UART_CFG_PARITY_MARK` - 标记校验
* - `UART_CFG_PARITY_SPACE` - 空格校验
*
* @param stopBit 停止位配置,类型为`eStopbits_t`,可能的值包括:
* - `UART_CFG_STOP_BITS_0_5` - 0.5停止位
* - `UART_CFG_STOP_BITS_1` - 1停止位
* - `UART_CFG_STOP_BITS_1_5` - 1.5停止位
* - `UART_CFG_STOP_BITS_2` - 2停止位
*
* @return 配置状态,如果配置成功返回状态码;否则返回错误码。
*/
uint16_t configUart(eBaudConfig_t baud, eParityConfig_t parity, eStopbits_t stopBit);
/**
* @fn setFaceDetectThres
* @brief 设置人脸检测阈值。
*
* 设置人脸检测的阈值(0-100)。默认值为60%。
*
* @param score 阈值。
* @return 如果成功,返回真;否则返回假。
*/
bool setFaceDetectThres(uint16_t score);
/**
* @fn setDetectThres
* @brief 设置X坐标的检测阈值。
*
* 设置检测X坐标的阈值(0-100)。默认值为60%。
*
* @param x 阈值。
* @return 如果成功,返回真;否则返回假。
*/
bool setDetectThres(uint16_t x);
/**
* @fn setGestureDetectThres
* @brief 设置手势检测阈值。
*
* 设置手势检测的阈值(0-100)。默认值为60%。
*
* @param score 阈值。
* @return 如果成功,返回真;否则返回假。
*/
bool setGestureDetectThres(uint16_t score);
/**
* @fn getFaceNumber
* @brief 获取设备检测到的人脸数量。
* @return 检测到的人脸数量。
*/
uint16_t getFaceNumber();
/**
* @fn getFaceLocationX
* @brief 获取检测到的人脸的X坐标。
* @return 人脸的X坐标。
*/
uint16_t getFaceLocationX();
/**
* @fn getFaceLocationY
* @brief 获取检测到的人脸的Y坐标。
* @return 人脸的Y坐标。
*/
uint16_t getFaceLocationY();
/**
* @fn getFaceScore
* @brief 获取检测到的人脸的得分。
* @return 人脸的得分。
*/
uint16_t getFaceScore();
/**
* @fn getGestureType
* @brief 获取检测到的手势类型。
*
* 此方法检索当前检测到的手势类型。手势识别功能可以用于各种应用,如人机交互或控制系统。
* 返回的手势类型对应以下值:
* - 1: LIKE (👍) - 蓝色
* - 2: OK (👌) - 绿色
* - 3: STOP (🤚) - 红色
* - 4: YES (✌️) - 黄色
* - 5: SIX (🤙) - 紫色
*
* 如果没有检测到手势,返回值可能是特定的无效值(例如,0)。
*
* @return 检测到的手势类型。
*/
uint16_t getGestureType();
/**
* @fn getGestureScore
* @brief 获取检测到的手势得分。
* @return 手势得分。
*/
uint16_t getGestureScore();
图形化编程教程
一、Mind+(基于 Scratch3.0):用积木块实现人脸 / 手势数据读取
无需写代码,通过拖拽图形化积木,即可让传感器输出人脸数量、位置坐标,以及识别到的手势类型(如 “点赞”“好的” 等)。
操作步骤:
- **下载并安装软件:**点击下载Mind+,按提示完成安装(参考Mind + 基础安装教程)。
- 选择设备与添加扩展:
- 打开 Mind+,切换到 “上传模式”,在 “扩展”→“主控板” 中选择 “Arduino Uno”;
- 点击 “用户库”,粘贴链接:
https://gitee.com/zhangtang6677/ext-gestureFaceDetectionSensor.git
,搜索并添加 “手势人脸跟踪传感器” 扩展。
- **图形化编程:**从左侧积木区拖拽模块(如 “读取人脸数量”“读取手势类型”等),组合成简单程序(参考示例图)。
- 上传与查看结果:
- 用数据线连接传感器与电脑,在 Mind + 中 “连接设备” 并选择对应端口;
- 点击 “上传到设备”,完成后打开 “串口监视器”,即可看到实时输出的人脸、手势及人脸坐标数据(如 “人脸数量:1”“手势:2(OK手势)”)。
二、MakeCode(micro:bit 平台):图形化实现人脸 / 手势检测
在 micro:bit 开发板上,用图形化积木编程,让传感器检测人脸是否存在、识别手势类型,并在设备上显示结果,适合搭配 micro:bit 做趣味互动小项目。
操作步骤:
- **打开编程平台:**在浏览器输入MakeCode 官网,点击 “新建项目” 并命名(如 “人脸手势检测”)。
- 加载传感器库:
- 点击右上角 “设置”→“扩展”,在搜索框粘贴链接:
https://github.com/DFRobot/pxt-DFRobotGestureFaceDetection
,加载扩展库。
- 点击右上角 “设置”→“扩展”,在搜索框粘贴链接:
- **图形化编程:**从左侧积木区拖拽模块(如 “获取人脸的数量”“获取人脸X坐标’”),组合成程序(参考示例图)。
- 下载与查看结果:
- 点击 “下载”,将程序保存到电脑并传入 micro:bit 开发板;
- 连接传感器与 micro:bit,打开 “Show data” 窗口,即可看到实时检测结果(如“人脸数量:1”“手势:2(OK手势)”)。
通用注意事项:
- 在 Mind + 与 MakeCode 图形化编程环境中,该传感器仅支持 I2C 通信模式,暂不支持 UART 模式。请将传感器的通信模式开关拨至 I2C 侧以确保正常使用。
- 支持的手势及对应信息,请参考Wiki上方的“核心功能详解”部分
- 若数据无输出,检查设备连接是否牢固、扩展库是否正确添加。
Modbus寄存器定义
若需自定义设备地址、查询固件版本号或调整核心参数,可通过以下寄存器实现(适用于进阶开发场景):
寄存器类型 | 设备地址 (10进制) | Modbus地址偏移量(16进制) | 名称 | 读写 | 数据范围 | 默认值 | 描述 |
---|---|---|---|---|---|---|---|
输入寄存器 | 3001 | 0x0000 | VID | R | 0x0000-0xFFFF | 0x0272 | VID厂商ID |
输入寄存器 | 3002 | 0x0001 | PID | R | 0x0000-0xFFFF | 0x3343 | PID厂商ID |
输入寄存器 | 3003 | 0x0002 | 硬件版本号 | R | 0x0000-0xFFFF | 0x1000 | 硬件版本号: 0x1000代表V1.0.0.0 |
输入寄存器 | 3004 | 0x0003 | 软件版本号 | R | 0x0000-0xFFFF | 0x1000 | 软件版本号: 0x1000代表V1.0.0.0 |
输入寄存器 | 3005 | 0x0004 | 人脸数量 | R | 0x0000-0x000A | 0x0000 | 传感器检测到的人脸数量,最多可检测10 |
输入寄存器 | 3006 | 0x0005 | 人脸x坐标 | R | 0x0000-0x000A | 0xFFFF | 传感器检测到的人脸x坐标。 0xFFFF:无人脸检测到 x坐标范围:0-640 |
输入寄存器 | 3007 | 0x0006 | 人脸y坐标 | R | 0x0000-0x000A | 0xFFFF | 传感器检测到的人脸y坐标。 0xFFFF:无人脸检测到 y坐标范围:0-640 |
输入寄存器 | 3008 | 0x0007 | 人脸得分 | R | 0x0000-0x0064 | 0x0000 | 人脸得分。 0% ~100% 对应数值0-100 |
输入寄存器 | 3009 | 0x0008 | 手势类型 | R | 0x0000-0x0005 | 0x0000 | 手势类型: 0x0000:其他手势 0x0001:LIKE 👍 0x0002:OK👌 0x0003:STOP🤚 0x0004:YES ✌️ 0x0005:SIX 🤙 |
输入寄存器 | 3010 | 0x0009 | 手势得分 | R | 0x0000-0x0064 | 0x0000 | 手势得分。0% ~100%对应数值0-100 |
保持寄存器 | 4001 | 0x0000 | 设备地址 | R/W | 0x0001-0x00F7 | 0x0072 | 模块的设备地址(1~247)[传感器地址未知时,可通过广播地址0x00做写入寄存器操作,此时传感器不会有数据输出]DFRobot 每种产品出厂时分配不同地址。 断电保存,立即生效 |
保持寄存器 | 4002 | 0x0001 | 串口参数控制寄存器1 | R/W | 0x0000-0xFFFF | 0x0004 | 模块波特率: 0x0001---1200 0x0002---2400 0x0003---4800 0x0004---9600(默认) 0x0005---14400 0x0006---19200 0x0007---38400 0x0008---57600 0x0009---115200 0x000A---230400 0x000B---460800 0x000C---921600 Other----9600 修改成功会以当前波特率回复,回复后切换为新的波特率。 断电保持,重启后生效 设备建议工作在115200以下 |
保持寄存器 | 4004 | 0x0003 | 设置目标人脸检测x坐标范围阈值 | R/W | 0x0000-0x0064 | 0x0064 | 取值范围:0-100,值越小检测范围越窄。100代表摄像头所有可视范围 |
保持寄存器 | 4005 | 0x0004 | 设置目标人脸检测分数阈值 | R/W | 0x003C-0x0064 | 0x003C | 取值范围:60-100,代表60%-100% 默认值:60 |
保持寄存器 | 4006 | 0x0005 | 设置手势检测分数阈值 | R/W | 0x003C-0x0064 | 0x003C | 取值范围:60-100,代表60%-100% 默认值:60 |
注意:
- 设备地址默认为0x0072,如果进行修改地址操作,I2C地址也会进行相应更新。
- 人脸检测范围为人体肩部以上区域
Modbus-RTU 常用功能代码:
功能码 | 名称 | 功能 |
---|---|---|
0x03 | 读多个寄存器 | 读整型、字符型、状态字、浮点型(读N个words)---读保持寄存器,字节操作 |
0x04 | 读输入寄存器 | 读整型、状态字、浮点型(读N个words)---读输入寄存器,字节操作 |
0x06 | 写单个保持寄存器 | 写整型、字符型、状态字、浮点型(写一个word)---写保持寄存器,字节操作 |
0x10 | 写多个保持寄存器 | 写多个保持寄存器---把具体的二进制值装入一串连续的保持寄存器 |
通过以上命令可读写输入寄存器和保持寄存器。
寄存器读写示例
硬件准备
串口调试工具推荐与下载
在进行串口相关调试工作时,需要借助专业的串口调试工具。为您推荐以下几款常用且功能丰富的工具:
示例 1:读取人脸数量(读输入寄存器操作)
功能:通过 Modbus RTU 协议读取传感器当前检测到的人脸数量。
发送指令及解析
字段名 | 十六进制值 | 说明 |
---|---|---|
设备地址 | 72 | 传感器默认 UART 地址 0x72 |
功能码 | 4 | 读输入寄存器(固定指令) |
寄存器起始地址 | 00 04 | 人脸数量对应的寄存器地址 |
寄存器个数 | 00 01 | 读取 1 个寄存器(仅人脸数量) |
CRC 校验 | 7B 08 | 指令校验值(确保传输正确性) |
完整发送指令:72 04 00 04 00 01 7B 08
操作步骤
- 硬件连接:通过 RainbowLink USB 协议转换器,将传感器与主机(电脑)连接,传感器通信模式切换至 UART。
- 参数配置:在串口调试工具中设置参数(需与传感器一致):
- 波特率:9600(默认)
- 数据位:8 位
- 停止位:1 位
- 校验位:无
- 发送指令:在调试工具的 “发送区” 输入上述十六进制指令,勾选 “十六进制发送” 后发送。
返回数据及解析
传感器接收到指令后,返回人脸数量数据,示例如下:
字段名 | 十六进制值 | 说明 |
---|---|---|
设备地址 | 72 | 与发送指令中的设备地址一致 |
功能码 | 4 | 确认执行 “读输入寄存器” 操作 |
字节数 | 2 | 返回数据的字节总数(2 字节) |
读取数据 | 00 01 | 表示当前检测到 1 个人脸(数值对应人脸数量) |
CRC 校验 | 7D 3B | 返回数据的校验值 |
完整返回数据:72 04 02 00 01 7D 3B
示意图如下:
示例 2:修改模块波特率(写保持寄存器操作)
功能:通过 Modbus RTU 协议修改传感器的 UART 串口波特率(默认 9600,支持自定义)。
发送指令及解析
字段名 | 十六进制值 | 说明 |
---|---|---|
设备地址 | 72 | 传感器默认地址 0x72 |
功能码 | 6 | 写保持寄存器(固定指令) |
寄存器起始地址 | 00 01 | 波特率配置对应的寄存器地址 |
写入数据 | 00 09 | 对应波特率 115200 bps(数值与波特率对应关系见寄存器总表) |
CRC 校验 | 13 0F | 指令校验值 |
完整发送指令:72 06 00 01 00 09 13 0F
操作步骤
- 硬件连接及基础参数配置同 “读取人脸数量”(需使用当前默认波特率 9600 发送指令)。
- 发送上述指令后,若返回数据与发送指令一致,表明波特率修改请求已被设备接收。
返回数据及解析
完整返回数据:72 06 00 01 00 09 13 0F
字段名 | 十六进制值 | 说明 |
---|---|---|
设备地址 | 72 | 与发送指令一致 |
功能码 | 6 | 确认执行 “写保持寄存器” 操作 |
寄存器起始地址 | 00 01 | 波特率配置寄存器地址 |
写入数据 | 00 09 | 确认波特率设置为 115200 bps |
CRC 校验 | 13 0F | 返回数据校验值 |
注意:
- 波特率修改后需断电重启传感器方可生效;
- 重启后需将串口调试工具波特率同步修改为 115200,否则无法继续通信。
更多资料下载
常见问题(FAQ)
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。