RGB-светодиак с управлением жестами: Проект на Arduino и APDS-9960
Компоненты и материалы
| SparkFun APDS-9960 (сенсор жестов/проксималити/RGB) | 1 |
| Arduino UNO | 1 |
| RGB-светодиод общий катод (Common Cathode) | 1 |
| Резистор 4.75 кОм | 1 |
| Перемычки | 1 |
Приложения и сервисы
- Arduino IDE
О проекте
Проект позволяет управлять RGB-светодиодом жестами рук. Нужен SparkFun APDS-9960 и RGB-светодиод общего катода. Используйте 5-вольтовый Arduino с подтягивающими резисторами 4.7 кОм (I2C). Подключите по схеме.
Базовые жесты:
- Свайп вверх — включить
- Свайп вниз — выключить
- Свайп вправо — следующий цвет
- Свайп влево — предыдущий цвет
В коде задано 6 цветов. Легко адаптируется под другие задачи. Экспериментируйте!

Код (Arduino)
#include
#include
#define APDS9960_INT 2 // Пин прерывания
// Пины RGB (PWM)
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);
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: // Красный
analogWrite(red_pin, 255); analogWrite(green_pin, 0); analogWrite(blue_pin, 0); break;
case 1: // Голубой
analogWrite(red_pin, 255); analogWrite(green_pin, 153); analogWrite(blue_pin, 204); break;
case 2: // Тёмно-синий
analogWrite(red_pin, 100); analogWrite(green_pin, 0); analogWrite(blue_pin, 170); break;
case 3: // Зелёный
analogWrite(red_pin, 0); analogWrite(green_pin, 255); analogWrite(blue_pin, 0); break;
case 4: // Синий
analogWrite(red_pin, 0); analogWrite(green_pin, 0); analogWrite(blue_pin, 255); break;
case 5: // Фиолетовый
analogWrite(red_pin, 191); analogWrite(green_pin, 0); analogWrite(blue_pin, 255); break;
}
} else {
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) { colorNumber = (colorNumber > 0) ? colorNumber-1 : 5; } break;
case DIR_RIGHT: Serial.println("RIGHT"); if(onOff_flag) { colorNumber = (colorNumber < 5) ? colorNumber+1 : 0; } break;
case DIR_NEAR: Serial.println("NEAR"); break;
case DIR_FAR: Serial.println("FAR"); break;
default: Serial.println("NONE");
}
}
}
Схемы
Подключите как на схеме.

Производственный процесс
- Создание кнопки AWS IoT с управлением движением на Raspberry Pi, PIR-датчике и MQTT
- Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
- Настольная RGB-лампа с управлением жестами – Интерактивное беспроводное освещение
- Управление светодиодами через Alexa с помощью Raspberry Pi – простое пошаговое руководство
- Превращаем старую радиоуправляемую машину в джойстик-контролируемый болид на Arduino
- Роботизированная рука 6 степеней свободы на Arduino Mega с управлением через Nunchuk
- Голосовой робот на Arduino Nano: Управление речью через Bluetooth
- Умный водяной пистолет с датчиком движения на Arduino Nano
- PiBot: Робот-пианист на Arduino для точного исполнения музыки
- Arduino RGB-микшер цветов: Простой проект для начинающих