Arduino开发PAJ7620U2手势识别传感器

介绍

中午逛淘宝的时候看到这个传感器,发现它可以识别9种不同方向的手势,上、下左、右、前、后、顺时针、逆时针、摇摆,看起来很棒棒,就买了一个,价格在20-40元不等(销量靠前的店比较贵)。

目的是想使用这个模块代替LeapMotion的手势识别功能,但是识别距离只有5-15cm,在应用场景比较限制的情况下可以替代。后续还会研究一下使用摄像头来制作手势识别。

等待几天,到手后就开始盘他。。。
在这里插入图片描述
(请无视那粗糙的焊点,焊反了一次之后又再焊的)

开发过程

在Arduino编辑器的项目—加载库—库管理里找到Paj7620并下载安装,装好之后就能在示例里找到“Gesture PAJ7620”这个东西,里面有两个示例脚本,一个是9种手势检测,一个是15种手势检测。代码就不放上来了,淘宝卖家都会提供,也可以直接加载以Zip包的形式加载进编辑器。在这里插入图片描述在这里插入图片描述
连线问题,只需要连接4根线,分别是VCC,GND,SCL和SDA,在Arduino UNO开发板都能找到

打开示例程序,直接就把代码上传到Uno,测试一波。
在这里插入图片描述

测试过程中发现,在做完手势后会延迟一秒左右才有消息在串口监视器,然后开始自己挖坑自己埋的阶段。

先打开卖家的产品特性,里面说明,手势速度有两个模式,普通模式和游戏模式,速度不同在这里插入图片描述
但是找遍了全网,也问了淘宝卖家,卖家说zip包,没有手册和文档,网上没有任何帖子说可以切换模式,然后去Arduino各大群问,无奈水群的群友太过强大,水不过他们。没有收到有用的信息,那只能靠自己了。

看代码的注释:
/*
Notice: When you want to recognize the Forward/Backward gesture or other continuous gestures, your gestures’ reaction time must less than GES_REACTION_TIME(0.8s).
You also can adjust the reaction time according to the actual circumstance.
*/

再结合源码所看,开始录制和结束进行判断都有个延迟的时间,调整GES_REACTION_TIME和GES_QUIT_TIME这俩变量可以缩短延时,然后修改了reaction_time和quit_time的时间。不知道是不是心理作用,有一点点变化,但是不是很大

在github上看到的了更为详细的源码

源码地址

在源码中,找到在“paj7620.cpp”里,找到了模式的介绍:

/**
        Setting normal mode or gaming mode at BANK1 register 0x65/0x66 R_IDLE_TIME[15:0]
        T = 256/System CLK = 32us,
        Ex:
        Far Mode: 1 report time = (77+R_IDLE_TIME)T
        Report rate 120 fps:
        R_IDLE_TIME=1/(120*T)-77=183
        Report rate 240 fps:
        R_IDLE_TIME=1/(240*T)-77=53
        Near Mode: 1 report time = (112+R_IDLE_TIME)T
        Report rate 120 fps:
        R_IDLE_TIME=1/(120*T)-120=148
        Report rate 240 fps:
        R_IDLE_TIME=1/(240*T)-112=18
    */
    Serial.println("Set up gaming mode.");
    paj7620SelectBank(BANK1);  //gesture flage reg in Bank1
    // paj7620WriteReg(0x65, 0xB7); // far mode 120 fps
    paj7620WriteReg(0x65, 0x12);  // near mode 240 fps

    paj7620SelectBank(BANK0);  //gesture flage reg in Bank0

    Serial.println("Paj7620 initialize register finished.");
    return 0;

这个讲述得十分清楚,有模式设置和采集帧率设置。然后在本地找下“paj7620.cpp”这个代码,我的存放地址是:C:\Users\Administrator\Documents\Arduino\libraries\Gesture_PAJ7620

注意下这行代码的含义,

paj7620WriteReg(0x65, 0x12);

传入的第一个值:
0x65 gaming mode
0x66 normal mode
第二个值:
0xB7 120fps
0x12 240fps

如若有错,还望指正**

打开之后将上面的代码复制进去,保存,然后再上传一下。实际测试下来是要快一点,但是这个差距可能也就是1.2秒和0.7秒的差距。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hp150119/article/details/110228644