APDS-9960

来自YFRobotwiki
2022年12月5日 (一) 16:30Allblue讨论 | 贡献的版本

(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索
APDS-9960手势识别模块


产品简介

APDS-9960模块采用了集合环境光感应、颜色感应、接近检测及非接触式手势感应四个功能的传感器APDS-9960制作。你可以使用该传感器,通过简单的手势控制电机,Led等设备!

该传感器采用8引脚封装,体积极小,具有数字 RGB、环境光、近程和手势传感器功能,并且兼容IIC接口,内置紫外线和红外线阻隔滤镜,可在复杂环境下检测光强度及色温。利用四个定向二极管,与可见光遮光滤光片集成,手势检测能准确地感应“上下左右”以及更复杂的动作;检测距离10-20cm。模块内增加的微光学透镜能提供高效的传输和红外能量的接收。内部状态机能够将该装置处于 RGBC、近程和手势测量之间的低功耗状态,提供极低的功耗。


规格参数

  • 工作电压:3.3-5V
  • 环境光及RGB彩色感应
  • 接近检测
  • 手势检测
  • 操作范围:10-20cm
  • I2C 接口(I2C 默认地址: 0x39)


传感器特点

光学模块中的 RGBC 光传感器和带红外 LED 的近程和手势检测器

  • 微型封装尺寸:3.94(长)x 2.36(宽)x 1.35(高)毫米
  • I2C 接口与专用中断引脚兼容
  • 深色玻璃后运作依然高灵敏度
  • RGBC 光感测,带有集成 UV-IR 遮光滤光片
  • 几何排列的 RGBC 二极管可提供统一的角度响应
  • 校准至 100 毫米检测距离,无需客户的最终产品校准
  • 四个独立的二极管可感应不同的方向
  • 配有可见光遮光滤光片的近程和手势感测
  • 受专利保护的屏蔽设计,将近程串扰将至最低
  • 集成光学透镜,校准红外 LED 光束并提升光电二极管的灵敏度。
  • 低功耗:睡眠模式功率为 1.0 微安典型值


应用场景

  • 显示背光控制
  • 相关色温感测
  • 可禁用手机触摸屏
  • 可禁用数码相机触摸屏
  • 机械开关更换
  • 手势检测


引脚说明

模块引出5个引脚方便用户使用:

VCC(电源,APDS-9960传感器),GND(地),SDA(I2C数据),SCL(时钟I2C)和INT(中断)


应用示例


电路连接示意图


示例代码

#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() {

  // Set interrupt pin as input
  pinMode(APDS9960_INT, INPUT);

  // 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 ) {
    detachInterrupt(0);
    handleGesture();
    isr_flag = 0;
    attachInterrupt(0, interruptRoutine, FALLING);
  }
}

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

程序下载地址:GestureTest


程序运行结果:

GestureTest


参考资料





返回首页

更多建议和问题欢迎反馈至 YFRobot论坛

购买方式:YFRobot 电子工作室