Boris_Liu 发表于 2015-11-12 21:30:01

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

RGB手势传感器简易快速入门
前言

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


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



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


零件清单:


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

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




电路连接图:



备注: RGB手势传感器采用的是I2C通讯,同时在监测到有手势的动作时,INT输出一个低电平,用于触发中断。
         因此将传感器的I2C Pin脚(SDA、SDL)与控制器的Pin脚连接即可,本例中断Pin脚选择(D0)。
安利下leonardo类控制板的中断引脚为(D0,D1,D2,D3),其中I2C对应的引脚为(D2,D3),因此选择中断引脚时避免与I2C冲突。


程序代码<div align="left">#include <Wire.h>
#include <SparkFun_APDS9960.h>
// Constants
// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;</div><div align="left">
</div><div align="left">void setup() {</div><div align="left">Keyboard.begin();                                     // 开始模拟键盘
// Initialize Serial port
Serial.begin(9600);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// Initialize interrupt service routine
attachInterrupt(2, interruptRoutine, FALLING);          //选择中断编号为2,对于的中断引脚为D0
// Initialize APDS-9960 (configure I2C and initial values)
if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
} else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// Start running the APDS-9960 gesture sensor engine
if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
} else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
}
}</div><div align="left">
</div><div align="left">void loop() {</div><div align="left">   if( isr_flag == 1 ) {
       handleGesture();
       isr_flag = 0;
      }
   }</div><div align="left">
</div><div align="left">void interruptRoutine() {</div><div align="left">isr_flag = 1;
}
</div><div align="left">
</div><div align="left">void handleGesture() {
    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");
      Keyboard.press(KEY_LEFT_ARROW);         //键盘左键按下</div><div align="left">      delay(100);
      Keyboard.releaseAll();
      break;
      case DIR_RIGHT:
      Serial.println("RIGHT");</div><div align="left">      Keyboard.press(KEY_RIGHT_ARROW);      //键盘右键按下</div><div align="left">      delay(100);
      Keyboard.releaseAll();</div><div align="left">      break;</div><div align="left">      case DIR_NEAR:
      Serial.println("NEAR");
      break;
      case DIR_FAR:
      Serial.println("FAR");
      break;
      default:
      Serial.println("NONE");
    }
}
}
</div>
程序分析:
该程序直接选用RGB手势传感器的库的样例程序。导入RGB手势传感器库以后选择File>>Examples>>SparkFunAPDS9960>>GestureTest
这里只修改了样例程序中的中断编号,以及增加了arduino USB键盘类函数。 因为USB键盘类库为arduino的默认库,因此不需要导入。


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

可用的中断触发模式
常见Arduino控制器的中断编号

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


函数:Keyboard.releaseAll()功能:释放之前调用press(char)函数按下的所有按键。语法:Keyboard.releaseAll()返回值:释放的按键个数
测试视频
https://v.qq.com/x/page/w01728ajlbs.html
附件:

    RGB手势传感器库 :

Ash 发表于 2015-11-13 11:06:48

哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
让我先去笑一会儿



Boris_Liu 发表于 2015-11-13 13:48:18

Ash 发表于 2015-11-13 11:06
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈 ...

{:5_142:}{:5_142:} 突然发现自己某宝的待收货一栏还有好多项啊。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈

Boris_Liu 发表于 2015-11-13 13:41:12

hnyzcj 发表于 2015-11-13 12:23
这东西确实很好,对手挥舞的速度有要求吗?我看楼主视频中一开始好像慢慢的。 ...

哈哈,这个传感器对手势的识别率很高的,适用于绝大多数手势的速度。视频的后边就加速打脸了。{:5_174:}

Ricky 发表于 2015-11-12 23:44:08

视频挂了。。。

丄帝De咗臂 发表于 2015-11-13 07:49:03

这个传感器确实强大

大连林海 发表于 2015-11-13 08:54:29

很强大的传感器有机会来一个玩玩

hnyzcj 发表于 2015-11-13 12:23:03

这东西确实很好,对手挥舞的速度有要求吗?我看楼主视频中一开始好像慢慢的。

heinau 发表于 2015-11-13 13:55:43

Boris_Liu 发表于 2015-11-13 13:48
突然发现自己某宝的待收货一栏还有好多项啊。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 ...

哈哈哈哈哈哈哈视频的效果好有喜感
楼主这是双十一剁手有感吗{:5_141:}

Ash 发表于 2015-11-13 14:45:11

Boris_Liu 发表于 2015-11-13 13:48
突然发现自己某宝的待收货一栏还有好多项啊。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 ...

我的还在待发货{:5_137:}

苦海 发表于 2015-11-13 19:58:39

赶紧做一个挡别人抽脸的假手, 有需求!!!

苦海 发表于 2015-11-13 19:59:34

苦海 发表于 2015-11-13 19:58
赶紧做一个挡别人抽脸的假手, 有需求!!!

我隔壁小孩期中考没及格 痛点在脸上 而且非常痛 !!!

jczaza 发表于 2015-11-13 21:27:15

手剁没了,可以用脚吗

dsweiliang 发表于 2015-11-14 00:45:06

电路连接图是怎样画出来的啊

吹口琴的钢铁侠 发表于 2015-11-14 09:36:10

dsweiliang 发表于 2015-11-14 00:45
电路连接图是怎样画出来的啊

用的fritzing吧

tyjjr 发表于 2015-11-16 01:41:19

这神奇是什么原理...

zoe 发表于 2015-12-4 16:55:21

这明明就是抚摸

luna 发表于 2015-12-10 10:57:43

棒呆了!是腾讯视频~~微信一键转发{:5_130:}

王子麒 发表于 2016-10-7 20:16:55

恍恍惚惚红红火火

bigdulldog 发表于 2016-12-31 14:15:12

能用这个做一个手势控制小车吗?

O_oYYQ 发表于 2017-1-3 10:50:58

楼主这个能分辨左右手嘛就是左手右挥左手左挥这种
页: [1] 2
查看完整版本: 妈妈再打我一次--双十一特辑