APDS-9960

從 YFRobotwiki
在2020年1月6日 (一) 17:16由Allblue對話 | 貢獻所做的修訂版本

跳到: 導覽搜尋

400px|thumb|APDS-9960手勢識別模塊


產品簡介

APDS-9960模塊採用了集合環境光感應、顏色感應、接近檢測及非接觸式手勢感應四個功能的傳感器APDS-9960製作。你可以使用該傳感器,通過簡單的手勢控制電機,Led等設備!

該傳感器採用8引腳封裝,體積極小,具有數字 RGB、環境光、近程和手勢傳感器功能,並且兼容IIC接口,內置紫外線和紅外線阻隔濾鏡,可在複雜環境下檢測光強度及色溫。利用四個定向二極管,與可見光遮光濾光片集成,手勢檢測能準確地感應「上下左右」以及更複雜的動作;檢測距離10-20cm。模塊內增加的微光學透鏡能提供高效的傳輸和紅外能量的接收。內部狀態機能夠將該裝置處於 RGBC、近程和手勢測量之間的低功耗狀態,提供極低的功耗。


規格參數

  • 工作電壓:3.3V
  • 環境光及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


程序運行結果:

GestureTest


參考資料





返回首頁

更多建議和問題歡迎反饋至 YFRobot論壇

購買方式:YFRobot 電子工作室