这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【手势翻页笔】过程贴-提高作业 PAJ7620U2数据实时读取

共8条 1/1 1 跳转至

【手势翻页笔】过程贴-提高作业 PAJ7620U2数据实时读取

助工
2024-05-25 22:20:09     打赏

一、PAJ7620手势传感器

    PAJ-7620U2是由原相科技公司开发的一款手势识别芯片,内部集成了光学数组式传感器单元,可以快速准确的对输入信号进行感应和输出处理。内置光源和环境光抑制滤波器,能在黑暗或低光环境下工作。它支持上、下、左、右、前、后、顺时针旋转、逆时针旋转和挥动的手势动作识别,以及支持物体接近检测等功能。可大致检测物体体积大小和亮度。使用IIC通信接口可达400KHz通信速率。

    传感器内部自带 LED 驱动器,传感器感应阵列、目标信息提取阵列和手势识别阵列。传感器工作时通过内部 LED 驱动器,驱动红外 LED 向外发射红外线信号,当传感器阵列在有效的距离中探测到物体时,目标信息提取阵列会对探测目标进行特征原始数据的获取,获取的数据被保存在寄存器中,同时手势识别阵列会对原始数据进行识别处理,最后将手势结果存到寄存器中,用户可根据 I2C 接口对原始数据和手势识别的结果进行读取。

    模块示意图,其引出的引脚有供电VCC、GND引脚,IIC通信引脚

QQ图片20240525222837.png

QQ图片20240525223324.jpg

    二、CubeMX配置

    开发板与手势传感器的通信方式为IIC,这里使用芯片自带的硬件IIC进行通信。将手势传感器的SDA引脚连接至开发板PB10引脚,SCL引脚连接至PC8引脚。

QQ图片20240525223659.png

    三、程序设计

    从手势传感器读取数据的方式是通过IIC发送指定的读取数据指令,再从IIC总线总线上读取返回的手势数据。

    关键代码:

#define PAJ7620U2_I2C_ADDRESS		0x73<<1 /*paj7620的i2c地址,左移一位后为左对齐七位地址*/
#define PAJ_BANK_SELECT			0xEF		/*寄存器页选择寄存器,Bank0=0x00,Bank1=0x01*/
#define PAJ_INT_FLAG1		    0x43		/*检测结果数据低八位数据所在地址*/
#define PAJ_INT_FLAG2			0x44		/*检测结果数据高八位数据所在地址*/

//Gesture detection interrupt flag
#define PAJ_UP				    0x01 
#define PAJ_DOWN			    0x02
#define PAJ_LEFT			    0x04 
#define PAJ_RIGHT			    0x08
#define PAJ_FORWARD			  0x10 
#define PAJ_BACKWARD		  0x20
#define PAJ_CLOCKWISE			0x40
#define PAJ_COUNT_CLOCKWISE		0x80
#define PAJ_WAVE				  0x100
//初始化,返回0则初始化失败
uint8_t PAJ7620U2_init(void)
{
	uint8_t i,State,n;
	State = 0;
	while(HAL_OK != HAL_I2C_Mem_Write(&hi2c1,PAJ7620U2_I2C_ADDRESS,0xef,I2C_MEMADD_SIZE_8BIT,&State,1,500)){HAL_Delay(10);printf("1");}
 
	for (i=0;i< 219 ;i++)
	{
		while(HAL_OK != HAL_I2C_Mem_Write(&hi2c1,PAJ7620U2_I2C_ADDRESS,Init_Register_Array[i][0],I2C_MEMADD_SIZE_8BIT,&Init_Register_Array[i][1],1,500)){HAL_Delay(5);printf("2");}
		HAL_Delay(5);
	}
	
	while(HAL_OK != HAL_I2C_Mem_Write(&hi2c1,PAJ7620U2_I2C_ADDRESS,0xef,I2C_MEMADD_SIZE_8BIT,&State,1,500)){HAL_Delay(5);printf("3");}
	HAL_Delay(5);
	
	while (HAL_OK != HAL_I2C_Mem_Read(&hi2c1,PAJ7620U2_I2C_ADDRESS,0x32,I2C_MEMADD_SIZE_8BIT,&n,1,500)){HAL_Delay(5);printf("4");}
	if(n != 0x29)
	{
	return 0;
	}
	
	return 1;
}
 
//检测手势并输出
void gesture(void)
{	
	uint8_t Data[2]={0,0};
	uint16_t Gesture_Data;
	HAL_I2C_Mem_Read(&hi2c1,PAJ7620U2_I2C_ADDRESS,PAJ_INT_FLAG1,I2C_MEMADD_SIZE_8BIT,&Data[0],1,500);
	HAL_Delay(5);
 
	HAL_I2C_Mem_Read(&hi2c1,PAJ7620U2_I2C_ADDRESS,PAJ_INT_FLAG2,I2C_MEMADD_SIZE_8BIT,&Data[1],1,500);
	HAL_Delay(5);
 
	Gesture_Data= Data[1]<<8 | Data[0];
	printf("\n %x \r\n",Gesture_Data);
	if(Gesture_Data !=0)
	{	
	switch (Gesture_Data)
		{
		case PAJ_UP:		        printf("Up\r\n");       break;
		case PAJ_DOWN:			printf("Down\r\n");	break;
		case PAJ_LEFT:			printf("Left\r\n");	break;
		case PAJ_RIGHT:		printf("Right\r\n"); 	break;
		case PAJ_FORWARD:		printf("Forward\r\n");	break;
		case PAJ_BACKWARD:		printf("Backward\r\n"); break;
		case PAJ_CLOCKWISE:		printf("Clockwise\r\n"); break;
		case PAJ_COUNT_CLOCKWISE:	printf("AntiClockwise\r\n");break;
		case PAJ_WAVE:			printf("Wave\r\n"); 	    break;
		default: break;
		}
		Gesture_Data=0;
		}		
}

四、运行结果

QQ图片20240525225119.jpg

QQ图片20240525225122.png

    实际测试过程中,只有上下左右、前后六个手势相对容易识别出来,其他的手势不太好识别。




关键词: PAJ7620U2    

专家
2024-05-26 12:35:18     打赏
2楼

看看!


高工
2024-05-26 16:01:51     打赏
3楼

谢谢分享


专家
2024-05-27 06:57:35     打赏
4楼

这个很好


高工
2024-05-30 12:54:05     打赏
5楼

谢谢分享


工程师
2024-05-31 15:40:36     打赏
6楼

求代码


高工
2024-06-14 17:34:41     打赏
7楼

代码能发一下?


高工
2024-11-03 21:00:26     打赏
8楼

谢谢分享


共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]