“APDS-9960”的版本间的差异

来自YFRobotwiki
跳转至: 导航搜索
第1行: 第1行:
。。。。。。 待编辑
 
 
 
 
  
 
[[Image:.jpg|400px|thumb|轨迹球模块]]
 
[[Image:.jpg|400px|thumb|轨迹球模块]]
第55行: 第51行:
 
=== 引脚说明 ===
 
=== 引脚说明 ===
  
 模块引 出6 个引脚方便用户使用:
+
 模块引 出5 个引脚方便用户使用:
  
VL -- 功率IR LED)
+
VCC (电源,APDS-9960传感器 ),GND(地 ),SDA(I2C数据),SCL(时钟I2C)和INT(中断)
GND(地),VCC (电源,APDS-9960传感器),SDA(I2C数据),SCL(时钟I2C)和INT(中断)
+
  
  
第65行: 第60行:
 
:'''电路连接示意图'''
 
:'''电路连接示意图'''
 
<br>
 
<br>
 +
<!--[[Image: 轨迹球模块.jpg|400px|center|轨迹球模块接线图]]-->
  
 +
:'''示例代码'''
 +
<pre >
  
+
#include <Wire.h>
<!--[[Image: 轨迹球模块.jpg|400px|center|轨迹球模块接线图]]-->
+
#include <SparkFun_APDS9960.h>
  
 +
// Pins
 +
#define APDS9960_INT    2 // Needs to be an interrupt pin
  
 +
// Constants
  
:'''示例代码'''
+
// Global Variables
<pre >
+
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");
 +
    }
 +
  }
 +
}
  
 
</pre>
 
</pre>
  
 
 程序下载地址:
 
 程序下载地址:
 +
  
 
 程序运行结果:
 
 程序运行结果:
 +
 +
<img src="http://image.yfrobot.com/APDS_9960/GestureTest.jpg-yf" alt="GestureTest" />
  
  
 
===参考资料===
 
===参考资料===
 
<br>
 
<br>
 
+
[http://wiki.yfrobot.com/datasheet/APDS-9960_datasheet.pdf APDS-9960 datasheet]
 +
[https://eyun.baidu.com/s/3o84mXrs APDS-9960_arduino_lib]
  
  

2017年3月4日 (六) 10:52的版本

File:.jpg
轨迹球模块


产品简介

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

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


规格参数

  • 工作电压:3.3V
  • 环境光及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


参考资料


APDS-9960 datasheet APDS-9960_arduino_lib




返回首页

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

购买方式:YFRobot 电子工作室