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 電子工作室
