Arduino用APDS9960 ジェスチャー、RGB、近接センサー
このチュートリアルでは、ジェスチャー検出、RGB色検出、近接検知の機能を組み合わせたAPDS9960センサーモジュールの使い方を解説します。この多機能センサーはさまざまな方向への動きを検知でき、手のジェスチャーに基づいてモーターやライト、その他のデバイスを制御するプロジェクトに組み込むことができます。チュートリアルの最後には、センサーの配線方法とArduinoプロジェクトでの基本的なジェスチャー検出の実装方法がわかるようになります。

APDS9960モジュールはコンパクトで配線が最小限で済むため、インタラクティブなプロジェクトに最適です。Arduino IDEを使ってセンサーをプログラムし、検出したジェスチャーをシリアルモニターに表示します。視覚的なガイドは、(in video at 00:00)のビデオを参照してください。
ハードウェア解説
このプロジェクトの主要な構成要素はAPDS9960センサーモジュールです。このモジュールは左スワイプ、右スワイプ、上スワイプ、下スワイプといったジェスチャーを検出できます。また、RGBの色値と近くの物体への近接を測定します。センサーはI2Cを使用してArduinoと通信し、配線やコーディングの手間を簡素化します。
APDS9960には複数の内蔵センサーが搭載されています:ジェスチャーセンサー、RGBカラーセンサー、環境光センサーです。ジェスチャーセンサーは赤外線LEDと光検出器を使用して手の動きを検出し、RGBセンサーは色を識別するために赤、緑、青の光強度を測定します。近接センサーは物体がセンサーにどれだけ近いかを判定し、さまざまな用途で役立ちます。
データシートの詳細
| 製造元 | アバゴ・テクノロジーズ |
|---|---|
| 部品番号 | APDS-9960 |
| ロジック/IO電圧 | 1.8 V から 3.6 V |
| 供給電圧 | 3.3 V |
| 出力電流(チャンネルあたり) | 最大20 mA |
| ピーク電流(チャンネルあたり) | 100 mA |
| PWM周波数に関する指針 | 該当なし |
| 入力論理閾値 | 0.3 V(低)、0.7 V(高) |
| 電圧降下 / Rドレイン・ソース間のオン抵抗(DS(on))/ 彩度 | 最大0.5 V |
| 熱限界 | −40〜85°C |
| パッケージ | 6ピンLGA |
| 備考 / バリエーション | なし |
- 必ずAPDS9960に3.3Vで電源を供給してください。より高い電圧はセンサーを損傷する可能性があります。
- 複数のデバイスを接続する場合は、I2Cラインに適切なプルアップ抵抗を設けてください。
- 干渉を避けるため、センサーを直射日光の当たらない場所に設置してください。
- 安定性のため、電源ピンの近くにデカップリングコンデンサを配置してください。
- 近接検出の検知範囲(通常は約20 cm)に注意してください。
配線手順

APDS9960センサーモジュールをArduinoに配線するには、次の手順に従ってください:
- 接続する
VCCAPDS9960のピンをArduinoの3.3Vピンに接続する。 - 接続してください
GNDピンをArduinoのGNDピンのいずれかに接続してください。 - 接続する
SDAArduinoのピンにA4ピン(I2Cのデータ線)。 - 接続する
SCLArduinoのピンにA5ピン(I2Cのクロック線)。 - 接続する
INTピンをデジタルピンに2割り込み処理のためのArduino上で。
別のArduinoモデルを使用している場合、SDAおよびSCLピンは異なることがあるので注意してください(例:Arduino Megaでは、使用するピンが異なります)SDAピン20およびSCL(ピン21上)。お使いのボードのピン割り当てを必ず確認してください。異なる構成については、動画の02:30の箇所を参照してください。
コード例とウォークスルー
setup関数では、シリアル通信とAPDS9960センサーを初期化します。割り込みピンはジェスチャーイベントを受け取るように設定されています。以下はsetupコードの抜粋です:
void setup() {
pinMode(APDS9960_INT, INPUT);
Serial.begin(9600);
Serial.println(F("APDS-9960 initialization..."));
if (apds.init()) {
Serial.println(F("Initialization complete"));
} else {
Serial.println(F("Initialization failed"));
}
}このコードは、センサーが使用できるように必要な設定を行い、シリアルモニタにフィードバックを表示します。
次に、センサーによって検出されたジェスチャーの処理方法を定義します。そのhandleGestureこの関数はswitch文を使ってジェスチャーの方向を判定します。以下はその抜粋です:
void handleGesture() {
if (apds.isGestureAvailable()) {
switch (apds.readGesture()) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
// Additional cases for left, right, near, and far
}
}
}この関数はジェスチャーが利用可能かどうかをチェックし、方向を読み取って結果をフィードバックとしてシリアルモニタに表示します。実装の詳細については、記事下に掲載されている全コードを必ず参照してください。
デモンストレーション/期待される内容
プログラムを実行すると、手を異なる方向に動かすと検出されたジェスチャがシリアルモニタに表示されるはずです。たとえば、上にスワイプすると "UP"、下にスワイプすると "DOWN" と表示されます。近・遠のジェスチャを行うときは(ビデオの10:00)1秒ほど手を静止させてください。
センサーの近接検出には注意してください。手をセンサーに対してあまりに速く、または遠くへ動かすと、ジェスチャーを正確に認識できないことがあります。これはパフォーマンスに影響を及ぼす一般的な問題です。
動画のタイムスタンプ
- 00:00- APDS9960センサーの紹介
- 02:30- 配線手順
- 05:15- コードの説明
- 10:00- ジェスチャー認識のデモ
++
/*
This is code for an APDS9960 Gesture, RGB, Proximity sensor module (6 pin).
* Watch the video on how to use APDS9960: https://youtu.be/jjXx0V13rNs
*/
/*
* This code has been modified from the Arduino library.
* Explained by Ahmad S. on March 25, 2018 at 21:19
* in Ajax, Ontario, Canada
* for Robojax.com
*
*/
/****************************************************************
GestureTest.ino
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor
Tests the gesture sensing abilities of the APDS-9960. Configures
APDS-9960 over I2C and waits for gesture events. Calculates the
direction of the swipe (up, down, left, right) and displays it
on a serial console.
To perform a NEAR gesture, hold your hand
far above the sensor and move it close to the sensor (within 2
inches). Hold your hand there for at least 1 second and move it
away.
To perform a FAR gesture, hold your hand within 2 inches of the
sensor for at least 1 second and then move it above (out of
range) of the sensor.
Hardware Connections:
IMPORTANT: The APDS-9960 can only accept 3.3V!
Arduino Pin APDS-9960 Board Function
3.3V VCC Power
GND GND Ground
A4 SDA I2C Data
A5 SCL I2C Clock
2 INT Interrupt
Resources:
Include Wire.h and SparkFun_APDS-9960.h
Development environment specifics:
Written in Arduino 1.0.5
Tested with SparkFun Arduino Pro Mini 3.3V
This code is beerware; if you see me (or any other SparkFun
employee) at the local, and you've found our code helpful, please
buy us a round!
Distributed as-is; no warranty is given.
****************************************************************/
#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
// Robojax Video Tutorial
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!"));
}
// Robojax Video Tutorial
// 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);
// Robojax Video Tutorial
}
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if ( apds.isGestureAvailable() ) {
// Robojax Video Tutorial
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
// Robojax Video Tutorial
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");
// Robojax Video Tutorial
}
}
}
必要かもしれないもの
-
アマゾンAmazonからAPDS-9960ジェスチャーセンサーを購入するamzn.to
-
アリエクスプレスAliExpressからAM2302、DHT11、またはDHT22センサーを購入してください。s.click.aliexpress.com
リソースと参考文献
-
外部Adafruit APDS9960 ライブラリ(GitHub から)github.com
ファイル📁
フリッツィングファイル
-
APDS 9960 RGBおよびジェスチャーセンサー
apds_9960_rgb_and_gesture_sensor.fzpz0.01 MB
他のファイル
-
RobojaxのAPDS9960ジェスチャーライブラリこのライブラリは、手の動きを検出し、現在の色を検出するためにジェスチャーセンサーAPDS9960用に使用されます。
robojax-gesture-APDS9960-Library.zip