Suchcode

APDS9960 Gesten-, RGB- und Näherungssensor für Arduino

APDS9960 Gesten-, RGB- und Näherungssensor für Arduino

In diesem Tutorial werden wir untersuchen, wie man das APDS9960-Sensormodul verwendet, das Gestenerkennung, RGB-Farberkennung und Näherungserkennung kombiniert. Dieser vielseitige Sensor kann Bewegungen in verschiedenen Richtungen erkennen und kann in Projekte integriert werden, um Motoren, Lichter oder andere Geräte basierend auf Handgesten zu steuern. Am Ende dieses Tutorials werden Sie wissen, wie Sie den Sensor anschließen und eine grundlegende Gestenerkennung in Ihren Arduino-Projekten implementieren.

APDS-9960 gesture sensor module -1

Das APDS9960-Modul ist kompakt und benötigt nur minimale Verkabelung, was es zu einer ausgezeichneten Wahl für interaktive Projekte macht. Wir verwenden die Arduino-IDE, um den Sensor zu programmieren und die erkannten Gesten im seriellen Monitor anzuzeigen. Für eine visuelle Anleitung siehe das Video (bei 00:00).

Hardware erklärt

Die Schlüsselkomponente dieses Projekts ist das APDS9960-Sensormodul. Dieses Modul ist in der Lage, Gesten wie Wischen nach links, Wischen nach rechts, Wischen nach oben und Wischen nach unten zu erkennen. Es misst außerdem RGB-Farbwerte und die Nähe zu nahegelegenen Objekten. Der Sensor kommuniziert mit dem Arduino über I2C, was die Verkabelung und das Programmieren vereinfacht.

Der APDS9960 enthält mehrere interne Sensoren: einen Gestensensor, einen RGB-Farbsensor und einen Umgebungslichtsensor. Der Gestensensor verwendet eine Infrarot-LED und einen Photodetektor, um Handbewegungen zu erkennen, während der RGB-Sensor die Intensitäten von Rot-, Grün- und Blaulicht misst, um Farben zu identifizieren. Der Näherungssensor bestimmt, wie nah ein Objekt am Sensor ist, was in verschiedenen Anwendungen nützlich sein kann.

Details zum Datenblatt

HerstellerAvago Technologies
TeilenummerAPDS-9960
Logik-/E/A-Spannung1,8 V bis 3,6 V
Versorgungsspannung3,3 V
Ausgangsstrom (pro Kanal)max. 20 mA
Spitzenstrom (pro Kanal)100 mA
Leitfaden zur PWM-FrequenzNicht zutreffend
Eingangslogik-Schwellenwerte0.3 V (niedrig), 0.7 V (hoch)
Spannungsabfall / RDS(on)/ Sättigung0,5 V max
Thermische Grenzwerte-40 bis 85 °C
Paket6-poliges LGA
Notizen / VariantenKeine

  • Versorgen Sie den APDS9960 immer mit 3,3 V; höhere Spannungen können den Sensor beschädigen.
  • Stellen Sie sicher, dass auf den I2C-Leitungen geeignete Pull-up-Widerstände vorhanden sind, wenn mehrere Geräte angeschlossen werden.
  • Halten Sie den Sensor von direktem Sonnenlicht fern, um Störungen zu vermeiden.
  • Verwenden Sie einen Entkopplungskondensator nahe den Versorgungspins zur Stabilisierung.
  • Beachten Sie die Erfassungsreichweite für die Näherungserkennung (typischerweise etwa 20 cm).

Verdrahtungsanleitung

Arduino wiring for APDS9960 Gesture sensor
Arduino wiring for APDS9960 Gesture sensor

Um das APDS9960-Sensormodul an Ihren Arduino zu verkabeln, führen Sie die folgenden Schritte aus:

  • Verbinden Sie dieVCCPin des APDS9960 an den 3.3V-Pin am Arduino.
  • Verbinden Sie dasGNDPin an einen der GND-Pins am Arduino anschließen.
  • Verbinden Sie dieSDAPin des ArduinosA4Pin (I2C-Datenleitung).
  • Verbinden Sie dasSCLPin an den ArduinoA5Pin (I2C-Taktleitung)
  • Verbinden Sie dasINTPin an digitalen Pin2auf dem Arduino zur Interrupt-Verarbeitung.

Beachten Sie, dass bei der Verwendung eines anderen Arduino-Modells die SDA- und SCL-Pins variieren können (z. B. bei einem Arduino Mega verwenden SieSDAan Pin 20 undSCLauf Pin 21). Stellen Sie sicher, dass Sie die spezifischen Pinbelegungen Ihres Boards prüfen. Für andere Konfigurationen siehe das Video (im Video bei 02:30).

Codebeispiele und Schritt-für-Schritt-Anleitung

In der setup()-Funktion initialisieren wir die serielle Kommunikation und den APDS9960-Sensor. Der Interrupt-Pin wird so konfiguriert, dass er auf Gestenereignisse reagiert. Hier ist ein Ausschnitt des Setup-Codes:

void setup() {
  pinMode(APDS9960_INT, INPUT);
  Serial.begin(9600);
  Serial.println(F("APDS-9960 initialization..."));
  if (apds.init()) {
    Serial.println(F("Initialization complete"));
  } else {
    Serial.println(F("Initialization failed"));
  }
}

Dieser Code nimmt die erforderlichen Konfigurationen vor, um sicherzustellen, dass der Sensor einsatzbereit ist, und gibt Rückmeldungen im seriellen Monitor aus.

Als Nächstes definieren wir, wie mit den vom Sensor erkannten Gesten umgegangen werden soll. DiehandleGestureDie Funktion verwendet eine switch-Anweisung, um die Richtung der Geste zu bestimmen. Hier ist ein fokussierter Auszug:

void handleGesture() {
  if (apds.isGestureAvailable()) {
    switch (apds.readGesture()) {
      case DIR_UP:
        Serial.println("UP");
        break;
      case DIR_DOWN:
        Serial.println("DOWN");
        break;
      // Additional cases for left, right, near, and far
    }
  }
}

Diese Funktion prüft, ob eine Geste verfügbar ist und liest ihre Richtung aus; das Ergebnis wird zur Rückmeldung auf den seriellen Monitor ausgegeben. Stellen Sie sicher, dass Sie den vollständigen Code, der unter dem Artikel geladen ist, für alle Implementierungsdetails konsultieren.

Demonstration / Was Sie erwartet

Wenn Sie das Programm ausführen, sollten die erkannten Gesten auf dem seriellen Monitor angezeigt werden, während Sie Ihre Hand in verschiedene Richtungen bewegen. Zum Beispiel sollte ein Wischen nach oben "UP" anzeigen, während ein Wischen nach unten "DOWN" anzeigt. Achten Sie darauf, Ihre Hand eine Sekunde lang ruhig zu halten, wenn Sie Nah- und Ferngesten ausführen (im Video bei 10:00).

Achten Sie auf die Annäherungserkennung des Sensors; wenn Sie Ihre Hand zu schnell oder zu weit vom Sensor bewegen, kann er die Geste möglicherweise nicht genau erfassen. Dies ist ein häufiges Problem, das die Leistung beeinträchtigen kann.

Video-Zeitstempel

  • 00:00- Einführung in den APDS9960-Sensor
  • 02:30- Verdrahtungsanleitung
  • 05:15- Code-Erklärungen
  • 10:00 Uhr- Demonstration der Gestenerkennung

Bilder

APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -2
APDS-9960 gesture sensor module -1
APDS-9960 gesture sensor module -1
Arduino wiring for APDS9960 Gesture sensor
Arduino wiring for APDS9960 Gesture sensor
87-This is code for an APDS9960 gesture, RGB, and proximity sensor module (6-pin).
Sprache: C++
++
/*
This is code for an APDS9960 Gesture, RGB, Proximity sensor module (6 pin).
 * Watch the video on how to use APDS9960: https://youtu.be/jjXx0V13rNs
 
 */
/*
 *  This code has been modified from the Arduino library.
 *  Explained by Ahmad S. on March 25, 2018 at 21:19
 *  in Ajax, Ontario, Canada
 *  for Robojax.com
 *  
 */

 /****************************************************************
GestureTest.ino
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
May 30, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor

Tests the gesture sensing abilities of the APDS-9960. Configures
APDS-9960 over I2C and waits for gesture events. Calculates the
direction of the swipe (up, down, left, right) and displays it
on a serial console. 

To perform a NEAR gesture, hold your hand
far above the sensor and move it close to the sensor (within 2
inches). Hold your hand there for at least 1 second and move it
away.

To perform a FAR gesture, hold your hand within 2 inches of the
sensor for at least 1 second and then move it above (out of
range) of the sensor.

Hardware Connections:

IMPORTANT: The APDS-9960 can only accept 3.3V!
 
 Arduino Pin  APDS-9960 Board  Function
 
 3.3V         VCC              Power
 GND          GND              Ground
 A4           SDA              I2C Data
 A5           SCL              I2C Clock
 2            INT              Interrupt

Resources:
Include Wire.h and SparkFun_APDS-9960.h

Development environment specifics:
Written in Arduino 1.0.5
Tested with SparkFun Arduino Pro Mini 3.3V

This code is beerware; if you see me (or any other SparkFun 
employee) at the local, and you've found our code helpful, please
buy us a round!

Distributed as-is; no warranty is given.
****************************************************************/

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

// Pins
#define APDS9960_INT    2 // Needs to be an interrupt pin

// Constants

// Global Variables
SparkFun_APDS9960 apds = SparkFun_APDS9960();
int isr_flag = 0;

void setup() {

  // Set interrupt pin as input
  // Robojax Video Tutorial
  pinMode(APDS9960_INT, INPUT);

  // Initialize Serial port
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));
  
  // Initialize interrupt service routine
  attachInterrupt(0, interruptRoutine, FALLING);

  // Initialize APDS-9960 (configure I2C and initial values)
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }

  // Robojax Video Tutorial
  // Start running the APDS-9960 gesture sensor engine
  if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
  }
}

void loop() {
  if( isr_flag == 1 ) {
    detachInterrupt(0);
    handleGesture();
    isr_flag = 0;
    attachInterrupt(0, interruptRoutine, FALLING);
    // Robojax Video Tutorial
  }
}

void interruptRoutine() {
  isr_flag = 1;
}

void handleGesture() {
    if ( apds.isGestureAvailable() ) {
      // Robojax Video Tutorial
    switch ( apds.readGesture() ) {
      case DIR_UP:
        Serial.println("UP");
        break;
      case DIR_DOWN:
        Serial.println("DOWN");
        break;
      case DIR_LEFT:
        Serial.println("LEFT");
        // Robojax Video Tutorial
        break;
      case DIR_RIGHT:
        Serial.println("RIGHT");
        break;
      case DIR_NEAR:
        Serial.println("NEAR");
        break;
      case DIR_FAR:
        Serial.println("FAR");
        break;
      default:
        Serial.println("NONE");
        // Robojax Video Tutorial
    }
  }
}

Dinge, die Sie vielleicht brauchen

Ressourcen & Referenzen

Dateien📁

Fritzing-Datei

Andere Dateien

  • APDS9960 Gestenbibliothek von Robojax
    Diese Bibliothek wird für den Gestensensor APDS9960 verwendet, um die Bewegung Ihrer Hand zu erkennen und die gegenwärtige Farbe zu erfassen.
    robojax-gesture-APDS9960-Library.zip