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