介绍
中午逛淘宝的时候看到这个传感器,发现它可以识别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秒的差距。