Cambio de color RGB activado por movimiento con Arduino y APDS-9960
Componentes y suministros
| SparkFun APDS-9960 (Sensor de gestos, proximidad, luz RGB y color) | ×1 |
| Arduino UNO | ×1 |
| LED RGB Difuso Cátodo Común | ×1 |
| Resistencia 4.75k Ω (para pull-up I2C) | ×1 |
| Cables jumper | ×1 |
Aplicaciones y servicios online
- Arduino IDE
Sobre el proyecto
Este proyecto te permite aprovechar el poder de tus movimientos para controlar un LED RGB. Necesitas el SparkFun APDS-9960 y un LED RGB de cátodo común (no ánodo). Asegúrate de usar una placa Arduino de 5V con resistencias de 4.7k Ω, ya que el sensor usa protocolo I2C. Conecta según el esquemático.
Los controles por defecto son:
- Deslizar hacia arriba: Encender
- Deslizar hacia abajo: Apagar
- Deslizar a la derecha: Color siguiente
- Deslizar a la izquierda: Color anterior
He incluido 6 colores predefinidos, pero puedes añadir los tuyos en el código. ¡Adáptalo a otros proyectos y experimenta!

Código
Código Arduino (C/C++)
#include
#include
// Pines
#define APDS9960_INT 2 // Debe ser pin de interrupción
int red_pin = A0;
int green_pin = A1;
int blue_pin = A2;
int onOff_flag = 0;
int colorNumber = 0;
// Variables globales
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("--------------------------------"));
// Rutina de servicio de interrupción
attachInterrupt(0, interruptRoutine, FALLING);
// Inicializar APDS-9960
if ( apds.init() ) {
Serial.println(F("Inicialización APDS-9960 completa"));
} else {
Serial.println(F("Error en init APDS-9960!"));
}
// Iniciar motor de gestos
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Sensor de gestos activo"));
} else {
Serial.println(F("Error iniciando sensor gestos!"));
}
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("rojo"); analogWrite(red_pin, 255); analogWrite(green_pin, 0); analogWrite(blue_pin, 0); break;
case 1: Serial.println("azul bebé"); analogWrite(red_pin, 255); analogWrite(green_pin, 153); analogWrite(blue_pin, 204); break;
case 2: Serial.println("azul oscuro"); analogWrite(red_pin, 100); analogWrite(green_pin, 0); analogWrite(blue_pin, 170); break;
case 3: Serial.println("verde"); analogWrite(red_pin, 0); analogWrite(green_pin, 255); analogWrite(blue_pin, 0); break;
case 4: Serial.println("azul"); analogWrite(red_pin, 0); analogWrite(green_pin, 0); analogWrite(blue_pin, 255); break;
case 5: Serial.println("violeta"); 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("ARRIBA"); onOff_flag = 1; break;
case DIR_DOWN: Serial.println("ABAJO"); onOff_flag = 0; break;
case DIR_LEFT: Serial.println("IZQUIERDA");
if(onOff_flag == 1){
if(colorNumber > 0) colorNumber--;
else colorNumber = 5;
Serial.println(colorNumber);
}
break;
case DIR_RIGHT: Serial.println("DERECHA");
if(onOff_flag == 1){
if(colorNumber < 5) colorNumber++;
else colorNumber = 0;
Serial.println(colorNumber);
}
break;
case DIR_NEAR: Serial.println("CERCA"); break;
case DIR_FAR: Serial.println("LEJOS"); break;
default: Serial.println("NINGUNO");
}
}
}
Esquemáticos
Conecta tal como se muestra.

Proceso de manufactura
- Botón IoT AWS Controlado por Movimiento con Raspberry Pi, Sensor PIR y MQTT
- Construya un robot Raspberry Pi controlado por Bluetooth con retroalimentación de audio
- Lámpara de mesa RGB controlada por gestos – Iluminación interactiva y sin manos
- Controla LEDs con Alexa mediante Raspberry Pi – Guía paso a paso fácil
- Transforma un viejo coche RC en un vehículo controlado por joystick con Arduino
- Brazo Robótico de 6 Grados de Libertad Controlado por Nunchuk con Arduino
- Construye un robot controlado por voz con Arduino Nano
- Pistola de Agua Inteligente Activada por Movimiento con Arduino Nano
- PiBot: Robot Pianista con Arduino para Interpretación Musical de Precisión
- Mezclador de Colores RGB con Arduino – Proyecto DIY para Principiantes
- Wi-Servo: Controla servomotores por Wi‑Fi desde un navegador web