動体検知RGB LEDカラーチェンジャー:Arduinoプロジェクト
必要な部品と材料
| 部品 | 数量 |
|---|---|
| SparkFun APDS-9960 ジェスチャーセンサー | 1 |
| Arduino UNO | 1 |
| RGBディフューズドLED(共通カソード) | 1 |
| 抵抗 4.75kΩ | 1 |
| ジャンパーワイヤー | 1セット |
使用ツール・サービス
- Arduino IDE
プロジェクト概要
このプロジェクトでは、あなたの動きを使ってRGB LEDを制御できます。SparkFun APDS-9960と共通カソード(アノードではない)のRGB LEDが必要です。このセンサーはI2Cプロトコルを使用するため、5V動作のArduinoボードと4.7kΩ抵抗を使用してください。回路図通りに接続すれば、コード内でカスタムカラーを追加できます。デフォルトでは6色を用意しています。
デフォルト操作
- 上スワイプ:LED点灯
- 下スワイプ:LED消灯
- 右スワイプ:次の色へ進む
- 左スワイプ:前の色へ戻る
このコードは他の多くのプロジェクトにも応用可能です。自由に実験して、さらに素晴らしい作品を作ってください!

コード
Arduinoコード (C/C++)
#include
#include
// ピン定義
#define APDS9960_INT 2 // 割り込みピンである必要あり
// 定数
int red_pin = A0;
int green_pin = A1;
int blue_pin = A2;
int onOff_flag = 0;
int colorNumber = 0;
// グローバル変数
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;
void setup() {
pinMode(APDS9960_INT, INPUT);
Serial.begin(9600);
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
// 割り込みサービスルーチン初期化
attachInterrupt(0, interruptRoutine, FALLING);
// APDS-9960初期化
if (apds.init()) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
// ジェスチャーセンサーエンジン開始
if (apds.enableGestureSensor(true)) {
Serial.println(F("Gesture sensor is now running"));
} else {
Serial.println(F("Something went wrong during gesture sensor init!"));
}
pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
analogWrite(A0, 0);
analogWrite(A1, 0);
analogWrite(A2, 0);
}
void loop() {
if (isr_flag == 1) {
detachInterrupt(0);
handleGesture();
isr_flag = 0;
attachInterrupt(0, interruptRoutine, FALLING);
}
if (onOff_flag == 1) {
switch (colorNumber) {
case 0: // 赤
Serial.println("red");
analogWrite(red_pin, 255);
analogWrite(green_pin, 0);
analogWrite(blue_pin, 0);
break;
case 1: // ベビーブルー
Serial.println("baby blue");
analogWrite(red_pin, 255);
analogWrite(green_pin, 153);
analogWrite(blue_pin, 204);
break;
case 2: // ダークブルー
Serial.println("dark blue");
analogWrite(red_pin, 100);
analogWrite(green_pin, 0);
analogWrite(blue_pin, 170);
break;
case 3: // 緑
Serial.println("green");
analogWrite(red_pin, 0);
analogWrite(green_pin, 255);
analogWrite(blue_pin, 0);
break;
case 4: // 青
Serial.println("blue");
analogWrite(red_pin, 0);
analogWrite(green_pin, 0);
analogWrite(blue_pin, 255);
break;
case 5: // バイオレット
Serial.println("violet");
analogWrite(red_pin, 191);
analogWrite(green_pin, 0);
analogWrite(blue_pin, 255);
break;
}
} else if (onOff_flag == 0) {
analogWrite(red_pin, 0);
analogWrite(green_pin, 0);
analogWrite(blue_pin, 0);
}
delay(1000);
}
void interruptRoutine() {
isr_flag = 1;
}
void handleGesture() {
if (apds.isGestureAvailable()) {
switch (apds.readGesture()) {
case DIR_UP:
Serial.println("UP");
onOff_flag = 1;
break;
case DIR_DOWN:
Serial.println("DOWN");
onOff_flag = 0;
break;
case DIR_LEFT:
Serial.println("LEFT");
if (onOff_flag == 1) {
if (colorNumber > 0) {
colorNumber -= 1;
} else {
colorNumber = 5;
}
Serial.println(colorNumber);
}
break;
case DIR_RIGHT:
Serial.println("RIGHT");
if (onOff_flag == 1) {
if (colorNumber < 5) {
colorNumber += 1;
} else {
colorNumber = 0;
}
Serial.println(colorNumber);
}
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
回路図
回路図通りに接続してください。

製造プロセス
- Raspberry Pi、PIRセンサー、MQTTで作るモーション制御AWS IoTボタン
- Bluetooth 制御 Raspberry Pi ロボットに音声フィードバックを追加して構築
- ジェスチャー制御 RGB テーブルランプ – インタラクティブなハンズフリー照明
- ラズベリーパイとNode-REDでAlexaからLEDを制御する - 簡単ステップバイステップガイド
- 古いラジコンカーをXboxコントローラーで操作可能に - ArduinoとUSBホストシールドで実現
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット
- Arduino Nanoで音声制御ロボットを自作
- Arduino Nanoで作るスマートな動体検知水鉄砲
- PiBot:Arduino駆動の精密ピアノ演奏ロボット
- Arduino RGB LEDカラーミキサー:初心者向けDIYプロジェクト
- Wi-Servo:WebブラウザからWi-Fi経由でサーボモーターを制御