红外手势传感器

概述

上帝说,要有光,于是便有了光,但我只要挥一挥手——还在幻想2020年的智能生活?说一声“Light up",打开所有的灯?手挥一下,关闭所有的音乐?这已经不用在幻想了,因为这个时代已经到来。 这是DFRobot新出的一款手势识别传感器,能够识别你手的运动方向。可以作为各种开关的触发装置,来帮助你实现智能控制。此外它还是一个颜色和光强传感器,可以分辨RGB三基色的各类组合。 模块采用了APDS-9960传感器,集成RGB、环境光、近程和手势传感器模块。I2C接口保证了它的可使用性,近程和手势检测配有红外LED。RGB和环境光检测功能可在多种光条件下以及通过多种减振材料包括深色玻璃的情况下,检测出光强度。此外,集成 UV-IR 遮光滤光片可实现精准的环境光和相关色温检测。着实是一款非常棒的传感器!

技术规格

引脚说明

RGB and Gesture Sensor正面示意图 RGB and Gesture Sensor反面示意图
名称 功能描述 - style align="center" SDA
SCL I2C时钟端口(A5)(模拟口5) - style align="center" GND
VCC 电源正 - style align="center" INT

使用教程

下面我们以一个简单的样例,来教大家如何使用传感器的手势功能。我们的目标就是让传感器检测到手势的上下左右前后的挥动。

准备

首先准备好下面的硬件及安装好软件

接线方式

准备好硬件后,按照下图将模块与UNO连接好 手势连接图.png

挥手样例代码

硬件连接部分弄完了以后,我们就来看看软件部分怎么弄吧。 首先你需要下载下面链接的库文件及一些参考资料。将这个文件夹解压后复制出来放到我们ARDUINO安装目录下的libraries文件夹中就可以了。 点击下载挥手传感器库文件。 具体的安装库文件方法可以参考下面的链接 如何安装库? 接下来我们就需要打开ARDUINO IDE了,将我们的下面的代码复制到IDE中,注意:将刚刚打开的IDE中的所有内容都删除掉!然后选好串口和板型(UNO),点击下载就OK了。然后再按照连接图的方向和面,对着它挥手吧,看看串口会出现什么吧!

注意:刚开始你可能会感觉识别的有些慢,这可能是你的挥手方式不够好,多练习几次,掌握最好的姿势,就很容易成功了。试试吧! |

#include <Wire.h>
#include <SparkFun_APDS9960.h>

// Pins
#define APDS9960_INT    2 // Needs to be an interrupt pin

// Constants

// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup() {

  // 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(0, interruptRoutine, FALLING);

  // 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");
        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");
    }
  }
}

运行结果: sen0178arduinoconclusion.png

其他功能

我们这个传感器不光能实现挥手识别,还能够实现测距,环境光测试,强光中断等应用,具体事例可以参考这个库中的EXAMPLES文件夹的实例。因为我们这个传感器还能够颜色识别和光强度识别,所以你还可以开发出你自己能想到的其他功能。

协议说明

I2C协议说明

更多

原理图 APDS9960数据手册

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖! |

<File:shopping_car.png> Link DFRobot商城购买链接