Lauf­licht mit einem Gesten-Sensor

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Der APDS-9960 ana­ly­siert mit Hil­fe einer Infra­rot-LED Bewe­gun­gen in sei­nem Sicht­be­reich. Dabei kann er vier Rich­tun­gen (links, rechts, nach oben, nach unten) unter­schei­den, die Hand­be­we­gun­gen vom Sen­sor weg und zum Sen­sor hin erken­nen und die Far­ben Rot, Grün und Blau „sehen“.
Er wird über I2C angesteuert.

  • bewegt sich ein Objekt über dem Sen­sor von links nach rechts, star­tet das Lauf­licht von links nach rechts 
  • streicht ein Objekt von rechts nach links über den Sen­sor, bewegt sich das Lauf­licht von rechts nach links 
  • eine Bewe­gung von unten nach oben schal­tet alle LEDs ein 
  • wird ein Objekt von oben nach unten über den Sen­sor geführt, wer­den alle LEDs ausgeschaltet 


So sieht es aus:

Benö­tig­te Bauteile:

  • 7 LEDs
  • 7 Wider­stän­de 220 Ω
  • Lei­tungs­dräh­te
  • APDS-9960

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Der Sen­sor muss zwin­gend an 3,3 V ange­schlos­sen wer­den.
Ach­te auf die Anord­nung der Pins, die sich je nach Modell unter­schei­den können.

Benö­tig­te Bibliothek:

Bin­de die benö­tig­te Biblio­thek ein und defi­nie­re die Variablen:

# include "Arduino_APDS9960.h"

// Array für die LEDs mit ihren Pins
byte LED[8] = {3, 4, 5, 6, 7, 8, 9};

// Anzahl der LEDs ermitteln
byte LEDMax = sizeof(LED);

// Leuchtdauer einer LED
int Leuchtdauer = 200;

// Status der LED: ein -> true, false -> aus
bool Status;

Der set­up-Teil. Beach­te die Kommentare.

void setup()
{
  for (int i = 0; i < LEDMax; i++)
  {
    pinMode(LED[i], OUTPUT);
  }

  Serial.begin(9600);

  // APDS.begin() -> Sensor starten
  // wenn der Start misslingt -> Mitteilung anzeigen
  if (!APDS.begin())
  {
    Serial.println("Sensor nicht entdeckt, bitte Kabel testen!");
  }

  else Serial.println("Initialisierung erfolgreich!");
  /*
    GestureSensitivity -> Empfindlichkeit:
    je höher der Wert, desto empfindlicher, allerdings kann dann
    eine falsche Geste entdeckt werden
    Standardwwert: 80
  */
  APDS.setGestureSensitivity(60);

  Serial.println("Gesten entdecken ...");
}

Der loop-Teil. Beach­te die Kommentare.

void loop()
{
  if (APDS.gestureAvailable())
  {
    /*
      Konstanten für die Gesten:
      GESTURE_UP -> nach oben
      GESTURE_DOWN -> nach unten
      GESTURE_LEFT -> nach links
      GESTURE_RIGHT -> nach rechts 
    */  
    int Geste = APDS.readGesture();
    switch (Geste)
    {
      case GESTURE_UP:
        Serial.println("oben");
        LEDSchalten(true);
        break;

      case GESTURE_DOWN:
        Serial.println("unten");
        LEDSchalten(false);
        break;

      case GESTURE_RIGHT:
        Serial.println("links");

        // alle LEDs ausschalten
        LEDSchalten(false);
        for (int i = 0; i < LEDMax; i++)
        {
          digitalWrite(LED[i], HIGH);
          delay(Leuchtdauer);
          digitalWrite(LED[i], LOW);
        }
        break;

      case GESTURE_LEFT:
        Serial.println("rechts");

        // alle LEDs ausschalten
        LEDSchalten(false);
        for (int i = LEDMax - 1; i >= 0; i--)
        {
          digitalWrite(LED[i], HIGH);
          delay(Leuchtdauer);
          digitalWrite(LED[i], LOW);
        }
        break;
    }
  }
}

Jetzt fehlt nur noch die Funk­ti­on LED­Schal­ten(). Ihr wird als Para­me­ter true oder fal­se über­ge­ben. Alle LEDs wer­den ent­we­der ein­ge­schal­tet (true) oder aus­ge­schal­tet (fal­se).

void LEDSchalten(bool Status)
{
  for (int i = 0; i < LEDMax; i++)
  {
    digitalWrite(LED[i], Status);
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 11. Okt 2023 @ 8:58