手势传感器试用+【组合2开箱照】
2016-08-177901
AI 快速预览详细
本文介绍了作者首次在DFRobot申请试用手势传感器的经历。试用套装包含Leonardo和Xbee,支持3.3V和5V供电。按照官方指南连接并刷入测试代码后,测试了手势识别效果,包括上下左右及靠近/远离手势。总结出NEAR手势的实现方法是将手掌向传感器接近,最后做漂亮的漂移动作。整体灵敏度和准确度都表现不错,适合初学者和STEM教育。
|
第一次在DFROBOT申请试用,激动~! @luna 申请的项目是偶然之间的想法,感觉有了个很好的契机去做出来 ![]() 下面是开箱图 @DFRobot ,收到df和蘑菇云2个徽章~ ![]() ![]() ![]() ![]() 二号试用套装,分别是Leonardo&xbee和手势传感器 第一次试用leonardo,确实存在一些和uno不同的地方,不过也无大碍 关键还是这次的手势传感器 ![]() 按照官方给的指南,戳这里, 连接线,采用3v3和5v供电均可 刷入指南中给的测试代码 ![]() ![]() 接下来就是测试手势传感的效果啦~! 左手.....正常......右手.....正常.....(好像并没有区别.....) 然后我受到了对面基友的无限鄙视的目光........ if ( apds.isGestureAvailable() ) { switch ( apds.readGesture() ) { case DIR_UP: Serial.println("UP"); break; case DIR_DOWN: Serial.println("DOWN"); break; case DIR_LEFT: Serial.println("LEFT"); break; case DIR_RIGHT: Serial.println("RIGHT"); break; case DIR_NEAR: Serial.println("NEAR"); break; case DIR_FAR: Serial.println("FAR"); break; default: Serial.println("NONE"); } } 看测试例程,里面给出了6种手势,分别是上下左右和靠近/远离 然后,我整理好表情,对着传感器挥手 ![]() 上下左右的敏感度还不错,太快和太慢都会被判断为NONE,至于FAR,手掌靠近,然后远离(速度稍微快一点点点点),然后还剩下一个NEAR..... 引用一下@svw 的心得~ 不要用打耳光的速度,用做体操的速度,很容易试出来。 嗯.....呃.... 总结出来的出现NEAR的经验就是,和FAR差不多的速度 将手掌向传感器接近,然后,最后的时候,离传感器比较近的时候(大概) 将手掌从传感器的正前方向侧面做一个漂亮的漂移(别拍到传感器上了),然后NEAR就出现啦... 呃...不知道有没有别的方法呢....嗯嗯嗯,. .多试几次就有感觉啦~,灵敏度和准确度都挺不错的~ ---------------------------------------------------------------------------------------------- 颜色传感的方面,同一种颜色测试的波动如下,存在色差,但是判断色彩还是没问题的 Ambient: 130 Red: 71 Green: 43 Blue: 41 Ambient: 128 Red: 70 Green: 42 Blue: 41 Ambient: 129 Red: 69 Green: 43 Blue: 41 Ambient: 131 Red: 70 Green: 44 Blue: 42 Ambient: 129 Red: 70 Green: 43 Blue: 41 ---------------------------------------------------------------------------------------------- (项目帖待更新) |














真是好形象的比喻方式
(我其实也是第一次用Leonardo,开箱的时候顺手拿了uno来测试,没有发现,后来用Leonardo的时候才发现出了问题)
去查了Leonardo的引脚图,INT0和INT1和SDA/SCl是同一个引脚,(和UNO不同,uno的int0和int1分别是d2和d3,SCL/SDA是A4和A5)
这就尴尬了,一开始没发现,指南里面的例程是针对UNO的...
// Pins
#define APDS9960_INT 2 // Needs to be an interrupt pin
这里的引脚定义是针对uno而设的,刷程序进Leonardo,一点反应都没有...应该是出现了"Something went wrong during APDS-9960 init!",不过由于Leonardo的天生限制,看不到这段文字(吧)
下面是中断的引脚对应表
[/td][/tr]
[table=50%]
[tr][td]型号[/td][td]int0[/td][td]int1[/td][td]int2[/td][td]int3[/td][td] [/td][td] [/td][/tr]
[tr][td]uno[/td][td]2[/td][td]3[/td][td] [/td][td] [/td][td] [/td][td] [/td][/tr]
[tr][td]leonardo[/td][td]3[/td][td]2[/td][td]0[/td][td]1[/td][td] [/td][td] [/td][/tr]
[tr][td][/td][td] [/td][td] [/td][td] [/td][td] [/td][td] [/td][td] [/td][/tr]
[tr][td] [/td][td] [/td][td] [/td][td] [/td][td] [/td][td] [/td][td] [/td][/tr]
[/table]
怎么解决呢?
需要下面这两步:
修改:
#define APDS9960_INT 2 // Needs to be an interrupt pin
为;
#define APDS9960_INT 0 // Needs to be an interrupt pin
或
#define APDS9960_INT 1 // Needs to be an interrupt pin
然后修改:
attachInterrupt(0, interruptRoutine, FALLING);
为
attachInterrupt(2, interruptRoutine, FALLING); //如果上一步修改的引脚是0的话,就改成这样的
或:
attachInterrupt(3, interruptRoutine, FALLING); //如果上一步修改的引脚是1的话,就改成这样的
----------------------------------------------------------------------
这里描述的问题,其实在演示程序里面也有提及一些相关的注意事项,不过,一开始没有注意