目录
模块介绍:
基本部分:
引脚配置:
工作原理:
展示部分:
代码部分展示(在正点的基础上加了一个读手势去控制舵机):
视频展示:
模块介绍:
基本部分:
手势模块搭载的芯片是PAJ7620,无论是正点原子的还是别的手势模块的底层是一致的,甚至代码也是通用的。
芯片内部集成了光学数组式传感器,以使复杂的手势和光标模式输出,自带九种手势识别,支持上、下、左、右、前、后、顺时针旋转、逆时针旋转和挥动的手势动作识别,有效探测距离为5-15cm;也可以检测物体的距离和大小
原理图(正点的):
引脚配置:
VCC-GND:3.3V到5V
SCL-SDA:IIC接口
(额外)正点的模块是多两个个INT和NC的引脚:NT是中断引脚,NC是未连接引脚。NC没用.主要是INT,INT是中断引脚,或者相当于手势识别模块的输出引脚,NT引脚连接到外部微控制器的中断输入引脚(例如Arduino的数字引脚),用于通知微控制器检测到手势。当检测到手势时,PAJ7620芯片会将基于手势识别的控制信号转换成一个电平,从INT引脚输出,通过这个引脚,可以实现手势识别后的外部设备控制。
工作原理:
手势识别模块的原理:通过红外线传感器读取手部的动作信息来识别手势,然后将手势信息转化为电信号输出,通过电路接口给连向的设备控制指令。
具体来说,芯片内置有一个红外线LED和一个接收电路。红外线LED发射一束红外线,当手部移动或进行手势动作时,红外线会被反射回来。接收电路接收反射回来的红外线,并将其转化为电信号。这些信号经过处理后,可以识别手势,然后转化为符合IIC协议的电信号输出到电路接口,用于操控外部设备。
模块展示:
注意:图三,凹进去的地方在上方,才是正确的摆放位置,如图三的方位就是正确的文章来源:https://www.toymoban.com/news/detail-723809.html
展示部分:
代码部分展示(在正点的基础上加了一个读手势去控制舵机):
//手势识别测试
void Gesrure_test(void)
{
u8 i;
u8 status;
u8 key;
Servo_Init();
u8 data[2]={0x00};
u16 gesture_data;
u8 ledflash=0;
paj7620u2_selectBank(BANK0);//进入BANK0
for(i=0;i<GESTURE_SIZE;i++)
{
GS_Write_Byte(gesture_arry[i][0],gesture_arry[i][1]);//手势识别模式初始化
}
paj7620u2_selectBank(BANK0);//切换回BANK0
i=0;
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_Fill(30,170,300,300,WHITE);
LCD_ShowString(30,180,200,16,16,"KEY_UP: Exit the test");
LCD_ShowString(30,210,200,16,16,"Gesrure test");
POINT_COLOR=RED;//设置字体为蓝色
while(1)
{
key = KEY_Scan(0);
if(key==WKUP_PRES)
{
GS_Write_Byte(PAJ_SET_INT_FLAG1,0X00);//关闭手势识别中断输出
GS_Write_Byte(PAJ_SET_INT_FLAG2,0X00);
break;
}
status = GS_Read_nByte(PAJ_GET_INT_FLAG1,2,&data[0]);//读取手势状态
if(!status)
{
gesture_data =(u16)data[1]<<8 | data[0];
if(gesture_data)
{
switch(gesture_data)
{
case GES_UP: LCD_ShowString(110,250,200,16,24,"UP ");
printf("Up\r\n"); ledflash=1; break; //向上
case GES_DOWM: LCD_ShowString(100,250,200,16,24,"Dowm ");
printf("Dowm\r\n"); ledflash=1; break; //向下
case GES_LEFT: LCD_ShowString(100,250,200,16,24,"Left ");
printf("Left\r\n"); ledflash=1; break; //向左
case GES_RIGHT: LCD_ShowString(100,250,200,16,24,"Right ");
printf("Right\r\n"); ledflash=1; break; //向右
case GES_FORWARD: LCD_ShowString(80,250,200,16,24,"Forward ");
printf("Forward\r\n"); ledflash=1; break; //向前
case GES_BACKWARD: LCD_ShowString(80,250,200,16,24,"Backward ");
printf("Backward\r\n"); ledflash=1; break; //向后
case GES_CLOCKWISE: LCD_ShowString(70,250,200,16,24,"Clockwise ");
printf("Clockwise\r\n"); Angle += 30; ledflash=1; break; //顺时针
case GES_COUNT_CLOCKWISE: LCD_ShowString(50,250,200,16,24,"AntiClockwise");
printf("AntiClockwise\r\n");Angle -= 30; ledflash=1; break; //逆时针
case GES_WAVE: LCD_ShowString(100,250,200,16,24,"Wave ");
printf("Wave\r\n"); ledflash=1; break; //挥动
default: ledflash=0; break;
}
if (Angle > 180)
{
Angle = 0;
}
if (Angle < 0)
{
Angle = 180;
}
Servo_SetAngle(Angle);
if(ledflash)//DS1闪烁
{
LED1=0;delay_ms(80);LED1=1;delay_ms(80);
LED1=0;delay_ms(80);LED1=1;delay_ms(80);
delay_ms(300);
LCD_ShowString(40,250,200,16,24," ");
ledflash=0;
}
}
}
delay_ms(50);
i++;
if(i==5)
{
LED0=!LED0;//提示系统正在运行
i=0;
}
}
}
视频展示:
VID_20230506_194518文章来源地址https://www.toymoban.com/news/detail-723809.html
到了这里,关于STM32 手势识别传感器模块(PAJ7620)学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!