Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Beweging-geactiveerde RGB LED Kleurwisselaar – Arduino Project

Onderdelen en benodigdheden

SparkFun APDS-9960 (gebaar-/kleur-/naderingssensor) × 1
Arduino UNO × 1
RGB LED (Common Cathode, diffuus) × 1
Weerstand 4,75 kΩ × 1
Draadjes × 1 set

Apps en online diensten

  • Arduino IDE

Over dit project

Met dit project stuur je een RGB LED aan met behulp van handgebaren. Je hebt de SparkFun APDS-9960 sensor en een common cathode RGB LED nodig (geen anode!). Gebruik een 5V Arduino-board met 4,7kΩ weerstanden, want de sensor communiceert via I2C.

De standaard besturing is:

  • Wijken naar boven – LED aan
  • Wijken naar beneden – LED uit
  • Wijken naar rechts – Volgende kleur
  • Wijken naar links – Vorige kleur

Er zijn 6 vooraf gedefinieerde kleuren in de code, maar je kunt er zelf toevoegen. De code is eenvoudig aanpasbaar voor andere projecten. Experimenteer en veel plezier!

Beweging-geactiveerde RGB LED Kleurwisselaar – Arduino Project

Code

Arduino-code

#include <Wire.h>
#include <SparkFun_APDS9960.h>

// Pinnen
#define APDS9960_INT 2  // Moet een interrupt-pin zijn

// Constanten
int red_pin = A0;
int green_pin = A1;
int blue_pin = A2;
int onOff_flag = 0;
int colorNumber = 0;

// Globale variabelen
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 initialisatie voltooid"));
  } else {
    Serial.println(F("Fout bij APDS-9960 init!"));
  }

  if (apds.enableGestureSensor(true)) {
    Serial.println(F("Gebaarsensor actief"));
  } else {
    Serial.println(F("Fout bij gebaarsensor 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:  // Rood
        Serial.println("rood");
        analogWrite(red_pin, 255);
        analogWrite(green_pin, 0);
        analogWrite(blue_pin, 0);
        break;
      case 1:  // Babyblauw
        Serial.println("baby blauw");
        analogWrite(red_pin, 255);
        analogWrite(green_pin, 153);
        analogWrite(blue_pin, 204);
        break;
      case 2:  // Donkerblauw
        Serial.println("donkerblauw");
        analogWrite(red_pin, 100);
        analogWrite(green_pin, 0);
        analogWrite(blue_pin, 170);
        break;
      case 3:  // Groen
        Serial.println("groen");
        analogWrite(red_pin, 0);
        analogWrite(green_pin, 255);
        analogWrite(blue_pin, 0);
        break;
      case 4:  // Blauw
        Serial.println("blauw");
        analogWrite(red_pin, 0);
        analogWrite(green_pin, 0);
        analogWrite(blue_pin, 255);
        break;
      case 5:  // Violet
        Serial.println("violet");
        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("OMHOOG");
        onOff_flag = 1;
        break;
      case DIR_DOWN:
        Serial.println("OMLAAG");
        onOff_flag = 0;
        break;
      case DIR_LEFT:
        Serial.println("LINKS");
        if (onOff_flag == 1) {
          if (colorNumber > 0) colorNumber--;
          else colorNumber = 5;
          Serial.println(colorNumber);
        }
        break;
      case DIR_RIGHT:
        Serial.println("RECHTS");
        if (onOff_flag == 1) {
          if (colorNumber < 5) colorNumber++;
          else colorNumber = 0;
          Serial.println(colorNumber);
        }
        break;
      case DIR_NEAR:
        Serial.println("DICHTBIJ");
        break;
      case DIR_FAR:
        Serial.println("VER");
        break;
      default:
        Serial.println("GEEN");
    }
  }
}

Schema's

Aansluiten zoals aangegeven in het schema.

Beweging-geactiveerde RGB LED Kleurwisselaar – Arduino Project

Productieproces

  1. Bouw een Beweging-gestuurde AWS IoT-knop met Raspberry Pi, PIR-sensor en MQTT
  2. Bouw een Bluetooth-gecontroleerde Raspberry Pi Robot met Audio Feedback
  3. Gebarenbestuurde RGB-tafellamp – Interactief, Handvrij Verlichten
  4. LED's bedienen met Alexa via Raspberry Pi – Eenvoudige stapsgewijze handleiding
  5. Een oude RC-auto ombouwen tot joystick-gestuurd voertuig met Arduino
  6. Arduino-gebaseerde 6-DoF Robotarm Gestoeerd met Wii Nunchuk
  7. Bouw een Stemgecontroleerde Robot met Arduino Nano
  8. Slimme beweegactiverde waterpistool gebouwd met Arduino Nano
  9. PiBot: De Arduino-aangedreven pianorobot voor precisiemuziek
  10. Arduino RGB LED Kleurmixer – Beginner-vriendelijk DIY-project
  11. Wi-Servo: Servomotoren Besturen via Wi-Fi met een Webbrowser