设为首页收藏本站

[应用教程] 妈妈再打我一次--双十一特辑

Boris_Liu 发表于 2015-11-12 21:30:01 | 显示全部楼层 [复制链接]
20 5142
RGB手势传感器简易快速入门

前言


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

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

1.jpg

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


零件清单:



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

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





电路连接图:



电路原理图.png
备注: RGB手势传感器采用的是I2C通讯,同时在监测到有手势的动作时,INT输出一个低电平,用于触发中断。

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

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



程序代码



#include <Wire.h>
#include <SparkFun_APDS9960.h>
// Constants
// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

  void setup() {
  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!"));
  }
}

void loop() {
     if( isr_flag == 1 ) {
       handleGesture();
       isr_flag = 0;
      }
     }

void interruptRoutine() {
  isr_flag = 1;
}

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);           //键盘左键按下
        delay(100);
        Keyboard.releaseAll();
        break;
        case DIR_RIGHT:
        Serial.println("RIGHT");
        Keyboard.press(KEY_RIGHT_ARROW);        //键盘右键按下
        delay(100);
        Keyboard.releaseAll();
        break;
        case DIR_NEAR:
        Serial.println("NEAR");
        break;
        case DIR_FAR:
        Serial.println("FAR");
        break;
        default:
        Serial.println("NONE");
    }
  }
}

程序分析:

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

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



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

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


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

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

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

keyboard按键对照表.jpg



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


测试视频




附件:


    RGB手势传感器库 SparkFun_APDS9960.zip (20.21 KB, 下载次数: 113)
发表于 2015-11-12 23:44:08 | 显示全部楼层
视频挂了。。。
回复 支持 反对

使用道具 举报

发表于 2015-11-13 07:49:03 | 显示全部楼层
这个传感器确实强大
回复 支持 反对

使用道具 举报

发表于 2015-11-13 08:54:29 | 显示全部楼层
很强大的传感器  有机会来一个玩玩
回复 支持 反对

使用道具 举报

发表于 2015-11-13 11:06:48 | 显示全部楼层
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
让我先去笑一会儿



回复 支持 反对

使用道具 举报

发表于 2015-11-13 12:23:03 | 显示全部楼层
这东西确实很好,对手挥舞的速度有要求吗?我看楼主视频中一开始好像慢慢的。
回复 支持 反对

使用道具 举报

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

哈哈,这个传感器对手势的识别率很高的,适用于绝大多数手势的速度。视频的后边就加速打脸了。
回复 支持 反对

使用道具 举报

发表于 2015-11-13 13:48:18 | 显示全部楼层
Ash 发表于 2015-11-13 11:06
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
哈哈哈哈哈 ...

突然发现自己某宝的待收货一栏还有好多项啊。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

发表于 2015-11-13 13:55:43 | 显示全部楼层
Boris_Liu 发表于 2015-11-13 13:48
突然发现自己某宝的待收货一栏还有好多项啊。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 ...

哈哈哈哈哈哈哈视频的效果好有喜感
楼主这是双十一剁手有感吗
回复 支持 反对

使用道具 举报

发表于 2015-11-13 14:45:11 | 显示全部楼层
Boris_Liu 发表于 2015-11-13 13:48
突然发现自己某宝的待收货一栏还有好多项啊。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈 ...

我的还在待发货  
回复 支持 反对

使用道具 举报

发表于 2015-11-13 19:58:39 | 显示全部楼层
赶紧做一个挡别人抽脸的假手, 有需求!!!
回复 支持 反对

使用道具 举报

发表于 2015-11-13 19:59:34 | 显示全部楼层
苦海 发表于 2015-11-13 19:58
赶紧做一个挡别人抽脸的假手, 有需求!!!

我隔壁小孩期中考没及格 痛点在脸上 而且非常痛 !!!
回复 支持 反对

使用道具 举报

发表于 2015-11-13 21:27:15 | 显示全部楼层
手剁没了,可以用脚吗
回复 支持 反对

使用道具 举报

发表于 2015-11-14 00:45:06 | 显示全部楼层
电路连接图是怎样画出来的啊
回复 支持 反对

使用道具 举报

发表于 2015-11-14 09:36:10 | 显示全部楼层
dsweiliang 发表于 2015-11-14 00:45
电路连接图是怎样画出来的啊

用的fritzing吧
回复 支持 反对

使用道具 举报

发表于 2015-11-16 01:41:19 | 显示全部楼层
这神奇是什么原理...
回复 支持 反对

使用道具 举报

发表于 2015-12-4 16:55:21 | 显示全部楼层
这明明就是抚摸
回复 支持 反对

使用道具 举报

发表于 2015-12-10 10:57:43 | 显示全部楼层
棒呆了!是腾讯视频~~微信一键转发
回复 支持 反对

使用道具 举报

发表于 2016-10-7 20:16:55 | 显示全部楼层
恍恍惚惚红红火火
回复 支持 反对

使用道具 举报

发表于 2016-12-31 14:15:12 | 显示全部楼层
能用这个做一个手势控制小车吗?
回复 支持 反对

使用道具 举报

发表于 2017-1-3 10:50:58 | 显示全部楼层
楼主这个能分辨左右手嘛  就是左手右挥  左手左挥这种
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则 允许回帖同步到新浪微博  

推荐阅读

精华导读




公司简介| 联系我们| 加入我们| 微博| 优酷| 英文网站| DF创客社区 ( 沪ICP备09038501号-4  
友情链接| 硬创邦| 花生壳社区| 模友之吧| 电子发烧友社区| 创客星球| 云汉电子社区| 电子工程网| 与非网| Arduino中文社区| 南极熊3D打印网|

上海智位机器人有限公司  沪ICP备09038501号-4   

Powered by Discuz! X3.1

Licensed Comsenz Inc.

返回顶部 返回列表