APDS-9960
来自YFRobotwiki
产品简介
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 电子工作室