“APDS-9960”的版本间的差异
来自YFRobotwiki
(未显示1个用户的11个中间版本) | |||
第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(中断) | ||
第30行: | 第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 电子工作室