这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【DIY手势翻页笔】成果篇手势动作

共4条 1/1 1 跳转至

【DIY手势翻页笔】成果篇手势动作

工程师
2024-06-26 16:45:48     打赏

一、器件知识:

认识手势模块的具体功能与参数

PAJ7620U2技术参数如下:工作电压:工作电压范围:3.3V~5.5V工作电流:工作电流值:3.5mA功耗范围:3~10mA通信接口:通信接口:I2CGravity-IIC 4Pin IIC地址:0x73手势识别:可识别手势数量:默认可识别9种手势,支持自定义添加识别手势识别距离:5CM~15CM识别速度:240HZ识别视角:60°(对角线)环境参数:工作温度范围:-40℃~85℃存储温度范围:-40℃~85℃

环境光免疫力:<100k Lux

其他特性:有效识别距离:30mm~200mm手势更新率:120Hz支持3.3V/5V电平兼容

红外LED和光学镜头,能在低光和黑暗环境下工作

其它的两个我这边就不介绍了,详细请看规格书。

继电器.pdf

1719390567995.jpg

手势.pdf

1719390623460.jpg

蜂鸣器.pdf

1719390594002.jpg

二、具体预设实施方法:

PAJ7620U2+继电器实现手势控制实现方式

准备工作1.    硬件准备:PAJ7620U2手势识别模块继电器(用于控制灯的开关)蜂鸣器适当的电源(5V电源)开发板(STM32H5) 连接线(配套排线)2.    软件准备:开发环境(STM32CubeMX IDE、Keil5)

PAJ7620U2的驱动程序或库

硬件配置1.    连接手势识别模块:将PAJ7620U2手势识别模块与开发板通过I2C接口连接。在STM32F103中,这里使用PB6/PB7作为I2C接口。确保PAJ7620U2的供电正确,一般为3.3V。2.    连接继电器: 将继电器的控制引脚连接到开发板的GPIO口上,PB8/PC4。继电器的供电线接至适当的电源,5V。(我这里是电脑供电,电脑供电多少还是有一点不足,大家操作时要注意)3.    连接蜂鸣器:

 将继电器的控制引脚连接到开发板的某个GPIO口上,PB0。(无源蜂鸣器,使用的是定时器3,通道3)

软件配置

1.    初始化I2C:在开发板中配置I2C接口,使其能够与PAJ7620U2通信。2.    初始化GPIO:配置用于控制继电器的GPIO口为输出模式。3.    读取手势:通过PAJ7620U2的驱动程序或库,从PAJ7620U2读取手势数据。4.    手势映射:根据读取到的手势数据,映射到对应的灯控制动作上。向上向下滑手势可以映射为打开电脑端有动作,动作可以根据自己设定的情况而定。5.    驱动继电器:

根据手势映射的结果,通过GPIO控制继电器的开关,进而控制灯的亮灭。我这里最后还是用手去按下按键,本来是计划用手势去控制的,想了一下,为了区分,才用按键来操作。

代码编写1.    初始化代码:初始化I2C接口、GPIO口。2.    手势读取代码:从PAJ7620U2读取手势数据。3.    手势映射代码:将手势数据映射到灯控制动作上。4.    继电器控制代码:根据映射结果,通过GPIO控制继电器的开关。五、测试与调试

在实际操作前,建议先进行软件测试和仿真,确保代码逻辑正确。然后进行硬件连接和测试,根据测试结果进行调试和优化。

三、流程图:

1719402711213.jpg

四、模块连接图:

image.png

五、核心代码:

// 无限循环,程序将一直执行此循环内的代码  
while (1)  
{  
    // 这里是留给用户添加代码的标记,但在这个代码段中没有实际的内容  
    /* USER CODE END WHILE */  
  
    // 这里是另一个留给用户添加代码的标记  
    /* USER CODE BEGIN 3 */  
  
    // 调用一个函数(可能是I2C通信的函数)来从某个地址(PAJ_INT_FLAG1)读取一个16位的数据  
    // 这个数据代表手势或设备的某种状态  
    Gesture_Data = DEV_I2C_ReadWord(PAJ_INT_FLAG1);  
  
    // 检查读取到的数据是否非零(即是否有手势或状态被识别)  
    if (Gesture_Data)  
    {  
        // 使用switch语句根据Gesture_Data的值来执行不同的操作  
        switch (Gesture_Data)  
        {  
            // 如果Gesture_Data等于HID_UP(可能是代表向上的手势)  
            case HID_UP:  
                // 设置HID_Mouse_SET为PapeToUp(可能是表示光标或鼠标向上移动的函数或命令)  
                HID_Mouse_SET=PapeToUp;  
                break;  
  
            // 如果Gesture_Data等于HID_DOWN(可能是代表向下的手势)  
            case HID_DOWN:  
                // 设置HID_Mouse_SET为PapeToUd(注意这里可能是个拼写错误,应该是PapeToDown或其他类似的)  
                HID_Mouse_SET=PapeToUd;  
                break;  
  
            // 如果Gesture_Data等于HID_LEFT(可能是代表向左的手势)  
            case HID_LEFT:  
                // 设置HID_Mouse_SET为CursorToLeft(表示光标或鼠标向左移动的函数或命令)  
                HID_Mouse_SET=CursorToLeft;  
                break;  
  
            // 如果Gesture_Data等于HID_RIGHT(可能是代表向右的手势)  
            case HID_RIGHT:  
                // 设置HID_Mouse_SET为CursorToRight(表示光标或鼠标向右移动的函数或命令)  
                HID_Mouse_SET=CursorToRight;  
                break;  
  
            // 以下的case语句都未给出具体的操作,只是简单地跳过了  
            case HID_FORWARD:  
            break;  
            case HID_BACKWARD:  
            break;  
            case HID_CLOCKWISE:  
            break;  
            case HID_COUNT_CLOCKWISE: // 注意这里可能是个拼写错误,应该是"COUNTER_CLOCKWISE"  
            break;  
            case HID_WAVE:  
            break;  
  
            // 如果Gesture_Data的值不是上述任何一个,则执行default分支(但在这里default分支也是空的)  
            default: break;  
        }  
    }  
  
    // 注意:在这个代码段中,没有显示`HID_Mouse_SET`是如何被使用的。通常,你可能需要在这个switch语句之后或某个地方调用这个变量所代表的函数或命令。  
}


六、设备管理器查看设备:

下图是接了开发板TYPE C的设备:

02b969e36f07ed50408df8595a56abe.png

拿掉USB后的设备,少了一个:

7506bba1557d790eb1f923ac411c7f8.png

七、使用CUBE MX配置步骤:

系统配置:

image.png


RCC配置:

image.png

定时器配置:

image.png

IIC配置:

image.png

USB配置:

image.png

image.png


串口配置:

image.png

image.png

GPIO配置:

image.png


系统时钟:

image.png


八、代码截图:

主函数HID判定:

image.png

image.png

GPIO初始化:

image.png

九、视频连接:




高工
2024-06-26 17:24:46     打赏
2楼

谢谢分享


高工
2024-06-26 21:22:22     打赏
3楼

谢谢分享


专家
2024-06-27 06:40:06     打赏
4楼

对我来说你是牛人


共4条 1/1 1 跳转至

回复

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