妈妈再打我一次--双十一特辑

2015-11-123.3万
精华项目
AI 快速预览详细 收起
本文介绍了如何使用DFRobot的SEN0187 RGB手势传感器进行快速入门。通过简单的电路连接和程序代码,可以实现手势控制键盘操作。文章详细说明了中断触发模式和USB键盘类函数的使用方法。适用于STEM教育和编程启蒙场景。
RGB手势传感器简易快速入门

前言


地府罗伯特,最近新推出一款功能强大的RGB手势传感器。集手势,光源强度、颜色识别为一体,尺寸却只比指甲盖大一点点,看着就让人眼馋。
妈妈再打我一次--双十一特辑图2

为此第一时间,拿到了这款传感器,闲言碎语不讲啦。正值双十一上传个简单的测试体验。做点什么呢? 看下面的图:

妈妈再打我一次--双十一特辑图1

没错! 手势传感器,用来检测打脸自然最合适不过啦。哈哈哈哈哈哈哈哈


零件清单:



1.SEN0187 RGB手势传感器                                           X 1
2.WiDo  (集成Leonardo主控芯片)                  X 1

PS: 任何leonardo类型Arduino板子均可。
推荐 DFRobot Leonardo   ,   Beetle控制器





电路连接图:



妈妈再打我一次--双十一特辑图3
备注: RGB手势传感器采用的是I2C通讯,同时在监测到有手势的动作时,INT输出一个低电平,用于触发中断。

           因此将传感器的I2C Pin脚(SDA、SDL)与控制器的Pin脚连接即可,本例中断Pin脚选择(D0)。

安利下leonardo类控制板的中断引脚为(D0,D1,D2,D3),其中I2C对应的引脚为(D2,D3),因此选择中断引脚时避免与I2C冲突。



程序代码
  1. <div align="left">#include <Wire.h>
  2. #include <SparkFun_APDS9960.h>
  3. // Constants
  4. // Global Variables
  5. SparkFun_APDS9960 apds = SparkFun_APDS9960();
  6. int isr_flag = 0;</div><div align="left">
  7. </div><div align="left">  void setup() {</div><div align="left">  Keyboard.begin();                                     // 开始模拟键盘
  8.   // Initialize Serial port
  9.   Serial.begin(9600);
  10.   Serial.println();
  11.   Serial.println(F("--------------------------------"));
  12.   Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  13.   Serial.println(F("--------------------------------"));
  14.   // Initialize interrupt service routine
  15.   attachInterrupt(2, interruptRoutine, FALLING);          //选择中断编号为2,对于的中断引脚为D0
  16. // Initialize APDS-9960 (configure I2C and initial values)
  17.   if ( apds.init() ) {
  18.     Serial.println(F("APDS-9960 initialization complete"));
  19.   } else {
  20.     Serial.println(F("Something went wrong during APDS-9960 init!"));
  21.   }
  22.   // Start running the APDS-9960 gesture sensor engine
  23.   if ( apds.enableGestureSensor(true) ) {
  24.     Serial.println(F("Gesture sensor is now running"));
  25.   } else {
  26.     Serial.println(F("Something went wrong during gesture sensor init!"));
  27.   }
  28. }</div><div align="left">
  29. </div><div align="left">void loop() {</div><div align="left">     if( isr_flag == 1 ) {
  30.        handleGesture();
  31.        isr_flag = 0;
  32.       }
  33.      }</div><div align="left">
  34. </div><div align="left">void interruptRoutine() {</div><div align="left">  isr_flag = 1;
  35. }
  36. </div><div align="left">
  37. </div><div align="left">void handleGesture() {
  38.     if ( apds.isGestureAvailable() ) {
  39.         switch ( apds.readGesture() ) {
  40.         case DIR_UP:
  41.         Serial.println("UP");
  42.         break;
  43.         case DIR_DOWN:
  44.         Serial.println("DOWN");
  45.         break;
  46.         case DIR_LEFT:
  47.         Serial.println("LEFT");
  48.         Keyboard.press(KEY_LEFT_ARROW);           //键盘左键按下</div><div align="left">        delay(100);
  49.         Keyboard.releaseAll();
  50.         break;
  51.         case DIR_RIGHT:
  52.         Serial.println("RIGHT");</div><div align="left">        Keyboard.press(KEY_RIGHT_ARROW);        //键盘右键按下</div><div align="left">        delay(100);
  53.         Keyboard.releaseAll();</div><div align="left">        break;</div><div align="left">        case DIR_NEAR:
  54.         Serial.println("NEAR");
  55.         break;
  56.         case DIR_FAR:
  57.         Serial.println("FAR");
  58.         break;
  59.         default:
  60.         Serial.println("NONE");
  61.     }
  62.   }
  63. }
  64. </div>
复制代码

程序分析:

该程序直接选用RGB手势传感器的库的样例程序。导入RGB手势传感器库以后选择
File>>Examples>>SparkFunAPDS9960>>GestureTest

这里只修改了样例程序中的中断编号,以及增加了arduino USB键盘类函数。 因为USB键盘类库为arduino的默认库,因此不需要导入。



函数:attachInterrupt(interrupt, function, mode)
功能:对中断引脚进行初始化配置
参数:
interrupt,中断编号,注意,这里的中断编号并不是引脚编号。
function, 中断函数名,当中断被触发后即会运行此函数名称所代表的中断函数
mode, 中断模式。

可用的中断触发模式
妈妈再打我一次--双十一特辑图5
常见Arduino控制器的中断编号
妈妈再打我一次--双十一特辑图6


函数:Keyboard.begin()
功能:开始模拟键盘

函数:Keyboard.press(char)
功能:按下按键。当调用该函数时相当于在键盘上按下一个按键并保持。注意如果需要有释放该按键动作,需要使用Keyboard.release()或者Keyboard.releaseAll()函数。
语法:Keyboard.press(key)
参数:key,需要按下的按键。

这里给出几个常用的按键参数:

妈妈再打我一次--双十一特辑图4



函数:Keyboard.releaseAll()
功能:  释放之前调用press(char)函数按下的所有按键。
语法:Keyboard.releaseAll()
返回值:释放的按键个数

测试视频


附件:


    RGB手势传感器库 下载附件SparkFun_APDS9960.zip

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(18)
seagirl
seagirl
请教:如何跟web互动?你这个效果好像结合了html,是怎么个操作法才能有这个效果
派大星ym
派大星ym
,,,
派大星ym
派大星ym
酷酷酷酷酷
张滋榆
张滋榆
哈哈哈哈,这个超级有意思
O_oYYQ
O_oYYQ
楼主这个能分辨左右手嘛 就是左手右挥 左手左挥这种
bigdulldog
bigdulldog
能用这个做一个手势控制小车吗?
王子麒
王子麒
恍恍惚惚红红火火
luna
luna
棒呆了!是腾讯视频~~微信一键转发
zoe
zoe
这明明就是抚摸
tyjjr
tyjjr
这神奇是什么原理...
dsweiliang
dsweiliang
电路连接图是怎样画出来的啊
吹口琴的钢铁侠
吹口琴的钢铁侠回复dsweiliang
用的fritzing吧
jczaza
jczaza
手剁没了,可以用脚吗
苦海
苦海
赶紧做一个挡别人抽脸的假手, 有需求!!!
苦海
苦海回复苦海
我隔壁小孩期中考没及格 痛点在脸上 而且非常痛 !!!
hnyzcj
hnyzcj
这东西确实很好,对手挥舞的速度有要求吗?我看楼主视频中一开始好像慢慢的。
Boris_Liu
Boris_Liu
作者
回复hnyzcj
哈哈,这个传感器对手势的识别率很高的,适用于绝大多数手势的速度。视频的后边就加速打脸了。
Ash1
Ash1
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
让我先去笑一会儿
Ash1
Ash1回复Boris_Liu
我的还在待发货
heinau
heinau回复Boris_Liu
哈哈哈哈哈哈哈视频的效果好有喜感
楼主这是双十一剁手有感吗
共3条回复,已加载2条,点击查看更多共3条回复,已加载全部
qq815076543322
qq815076543322
很强大的传感器 有机会来一个玩玩
丄帝De咗臂
丄帝De咗臂
这个传感器确实强大
R2D2
R2D2
视频挂了。。。
- 没有更多了 -