“APDS-9960”的版本间的差异
来自YFRobotwiki
(以“ 轨迹球模块 === 产品简介 === <br> === 规格参数 === <br> === 引脚说明 === <br> === 应用示例 === <br> :'...”为内容创建页面) |
|||
| (未显示2个用户的14个中间版本) | |||
| 第1行: | 第1行: | ||
| − | [[ | + | [[File: 手势传感器.jpg|400px|thumb|APDS-9960手势识别 模块]] |
=== 产品简介 === | === 产品简介 === | ||
| − | |||
| + | APDS-9960模块采用了集合环境光感应、颜色感应、接近检测及非接触式手势感应四个功能的传感器[https://www.broadcom.cn/products/optical-sensors/integrated-ambient-light-and-proximity-sensors/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(中断) | ||
| 第26行: | 第60行: | ||
:'''电路连接示意图''' | :'''电路连接示意图''' | ||
<br> | <br> | ||
| + | <!--[[Image: 轨迹球模块.jpg|400px|center|轨迹球模块接线图]]--> | ||
| − | + | :''' 示例代码''' | |
| − | + | <pre > | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | #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"); | ||
| + | } | ||
| + | } | ||
| + | } | ||
</pre> | </pre> | ||
| − | 程序下载地址: | + | 程序下载地址:[https://eyun.baidu.com/s/3dFAATLB GestureTest] |
| + | |||
程序运行结果: | 程序运行结果: | ||
| + | |||
| + | <img src="http://image.yfrobot.com.cn/APDS_9960/GestureTest.jpg-yf" alt="GestureTest" /> | ||
===参考资料=== | ===参考资料=== | ||
<br> | <br> | ||
| + | *[http://file.yfrobot.com.cn/datasheet/APDS-9960_datasheet.pdf APDS-9960 datasheet] [https://eyun.baidu.com/s/3hrUbz9M 备用地址] | ||
| + | *[https://eyun.baidu.com/s/3o84mXrs APDS-9960_arduino_lib] | ||
2022年12月5日 (一) 16:30的最后版本
产品简介
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
程序运行结果:
参考资料
更多建议和问题欢迎反馈至 YFRobot论坛
购买方式:YFRobot 电子工作室
