学习STM32手势识别传感器模块PAJ7620的工作原理

目录

模块介绍:

基本部分:

引脚配置:

工作原理:

展示部分:

代码部分展示(在正点的基础上加了一个读手势去控制舵机):

视频展示:


模块介绍:

基本部分:

手势模块搭载的芯片是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协议的电信号输出到电路接口,用于操控外部设备。

模块展示:

 

 注意:图三,凹进去的地方在上方,才是正确的摆放位置,如图三的方位就是正确的

展示部分:

代码部分展示(在正点的基础上加了一个读手势去控制舵机):

//手势识别测试
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

物联沃分享整理
物联沃-IOTWORD物联网 » 学习STM32手势识别传感器模块PAJ7620的工作原理

发表评论