APDS-9960 RGB 與手勢感應器模組 Arduino 使用教學
APDS-9960 RGB 與手勢感應器模組 Arduino 使用教學
RGB 和手勢感測器是一款小型擴充板,內建 APDS-9960 感測器,具備環境光與色彩測量、接近偵測,以及免接觸的手勢感應功能。透過這款 RGB 和手勢感測器,您可以控制電腦、微控制器、機器人等設備。這是三星 Galaxy S5 所採用的同款感測器,也是市場上價格實惠的優質手勢感測器之一。
APDS-9960
此感測器具備多種功能,包括手勢偵測、接近偵測、數位環境光偵測等。它採用 8-pin 封裝,可作為數位 RGB 感測、環境光偵測、短距離或手勢感應設備使用。此裝置擁有多個 I2C 相容端口,並支援紅、綠、藍、透明(RGBC)等色彩。短距離偵測與手勢感應功能則搭配紅外線 LED。RGB 與環境光感測可在多種光線條件下偵測光的強度,並穿透多種吸震材料及深色濾窗。此外,內建的 UV-IR 遮擋濾光片能準確感測環境光及相對色溫。
主要特色
- 型號:GY-APDS9960-3.3
- 晶片:APDS-9960
- 電源電壓:3.3V
- 通訊模式:IIC 通訊協議
- 尺寸:20mm x 15.3mm
引腳說明
引腳說明 | |
---|---|
VL | 如果 PS 跳線斷開,IR LED 的選用電源必須為 3.0 – 4.5V |
接地 | 連接到地。 |
電壓控制電路 | 用於為 APDS-9960 感測器供電。必須為 2.4 – 3.6 |
SDA | I²C數據 |
SCL | I²C時鐘 |
在 | 外部中斷引腳。中斷事件時低電平有效 |
工作原理
手勢偵測透過四個方向的光電二極體來感應反射的紅外線能量(由內建 LED 提供),將物理運動資訊(例如速度、方向和距離)轉換為數位訊息。手勢引擎的架構包含自動啟動功能(基於接近偵測引擎的結果)、環境光減除、交談干擾消除、雙 8 位元資料轉換器、節能的轉換延遲、32 筆資料集 FIFO 緩衝區,以及中斷驅動的 I2C 通訊。手勢引擎能滿足廣泛的移動設備手勢需求,無論是簡單的上、下、右、左手勢,或是更複雜的手勢,都能準確感測。通過可調整的紅外線 LED 時間設定,能有效降低功耗和噪音。
Arduino 實驗步驟
程式碼燒錄
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
/****************************************/ #include <Wire.h> #include <SparkFun_APDS9960.h> // Constants // Global Variables SparkFun_APDS9960 apds = SparkFun_APDS9960(); int isr_flag = 0; void setup() { // Set interrupt pin as input pinMode(2, 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"); } } } |
上傳程式碼完成後,請打開序列埠,將手勢在模組上方移動,序列埠將輸出您所執行的手勢方向。
發佈留言
很抱歉,必須登入網站才能發佈留言。