Cerca codice

Sensore APDS9960 per Arduino: gesture, RGB e prossimità

Sensore APDS9960 per Arduino: gesture, RGB e prossimità

In questo tutorial esploreremo come utilizzare il modulo sensore APDS9960, che combina rilevamento dei gesti, rilevamento del colore RGB e capacità di rilevamento della prossimità. Questo sensore versatile può rilevare movimenti in diverse direzioni e può essere integrato in progetti per controllare motori, luci o altri dispositivi basati sui gesti della mano. Alla fine di questo tutorial comprenderai come collegare il sensore e implementare un rilevamento dei gesti di base nei tuoi progetti Arduino.

APDS-9960 gesture sensor module -1

Il modulo APDS9960 è compatto e richiede cablaggi minimi, rendendolo un'ottima scelta per progetti interattivi. Useremo l'IDE Arduino per programmare il sensore e visualizzare i gesti rilevati sul monitor seriale. Per una guida visiva, consulta il video (nel video a 00:00).

Hardware spiegato

Il componente chiave di questo progetto è il modulo sensore APDS9960. Questo modulo è in grado di rilevare gesti come scorrimento verso sinistra, verso destra, verso l'alto e verso il basso. Misura inoltre i valori di colore RGB e la prossimità di oggetti nelle vicinanze. Il sensore comunica con Arduino tramite I2C, semplificando il cablaggio e la programmazione.

L'APDS9960 contiene più sensori interni: un sensore di gesti, un sensore di colore RGB e un sensore di luce ambientale. Il sensore di gesti utilizza un LED a infrarossi e un fotodetector per rilevare i movimenti della mano, mentre il sensore RGB misura le intensità della luce rossa, verde e blu per identificare i colori. Il sensore di prossimità determina quanto un oggetto è vicino al sensore, cosa che può essere utile in varie applicazioni.

Dettagli della scheda tecnica

ProduttoreAvago Technologies
Numero di parteAPDS-9960
Tensione logica/I/Oda 1,8 V a 3,6 V
Tensione di alimentazione3.3 V
Corrente di uscita (per canale)20 mA massimo
Corrente di picco (per canale)100 mA
Linee guida sulla frequenza PWMNon applicabile
Soglie logiche d'ingresso0.3 V (basso), 0.7 V (alto)
Caduta di tensione / RDS(on)/ saturazione0,5 V max
Limiti termicida -40 a 85 °C
PacchettoLGA a 6 pin
Note / variantiNessuno

  • Alimenta sempre l'APDS9960 con 3,3 V; tensioni superiori possono danneggiare il sensore.
  • Assicurati che siano presenti resistenze di pull-up adeguate sulle linee I2C se colleghi più dispositivi.
  • Tenere il sensore lontano dalla luce solare diretta per evitare interferenze.
  • Usa un condensatore di disaccoppiamento vicino ai pin di alimentazione per garantire la stabilità.
  • Tieni presente la portata di rilevamento per la funzione di prossimità (tipicamente intorno ai 20 cm).

Istruzioni di cablaggio

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

Per collegare il modulo sensore APDS9960 al tuo Arduino, segui questi passaggi:

  • Collega ilVCCpin dell'APDS9960 al pin da 3,3 V sull'Arduino.
  • Collega ilGNDCollega il pin a uno dei pin GND dell'Arduino.
  • Collegare ilSDApin dell'ArduinoA4pin (linea dati I2C).
  • Collega ilSCLpin sull'ArduinoA5pin (linea di clock I2C).
  • Collega ilINTpin al pin digitale2sull'Arduino per la gestione delle interruzioni.

Nota che se stai usando un modello diverso di Arduino, i pin SDA e SCL possono variare (ad es., su un Arduino Mega, usaSDAsul pin 20 eSCLsul pin 21). Assicurati di verificare le mappature specifiche dei pin per la tua scheda. Per diverse configurazioni, fai riferimento al video (nel video a 02:30).

Esempi di codice e guida passo passo

Nella funzione setup inizializziamo la comunicazione seriale e il sensore APDS9960. Il pin di interrupt è configurato per ascoltare gli eventi di gesture. Ecco un frammento del codice di setup:

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"));
  }
}

Questo codice imposta le configurazioni necessarie per garantire che il sensore sia pronto all'uso e fornisca feedback nel monitor seriale.

Successivamente, definiamo come gestire i gesti rilevati dal sensore. IlhandleGestureLa funzione utilizza un'istruzione switch per determinare la direzione del gesto. Ecco un estratto mirato:

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
    }
  }
}

Questa funzione verifica se è disponibile un gesto e ne legge la direzione, stampando il risultato sul monitor seriale come feedback. Assicurati di fare riferimento al codice completo caricato sotto l'articolo per i dettagli completi sull'implementazione.

Dimostrazione / Cosa aspettarsi

Quando esegui il programma, dovresti vedere i gesti rilevati stampati sul monitor seriale mentre muovi la mano in direzioni diverse. Ad esempio, un gesto verso l'alto dovrebbe visualizzare "UP", mentre un gesto verso il basso mostra "DOWN". Assicurati di tenere la mano ferma per un secondo quando esegui i gesti di avvicinamento e allontanamento (nel video a 10:00).

Presta attenzione al rilevamento di prossimità del sensore; se muovi la mano troppo velocemente o troppo lontano dal sensore, potrebbe non registrare il gesto correttamente. Questo è un problema comune che può influire sulle prestazioni.

Timestamp dei video

  • 00:00- Introduzione al sensore APDS9960
  • 02:30- Istruzioni di cablaggio
  • 05:15- Spiegazioni del codice
  • 10:00- Dimostrazione del riconoscimento dei gesti

Immagini

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).
Lingua: 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
    }
  }
}

Cose di cui potresti avere bisogno

Risorse e riferimenti

File📁

File Fritzing

Altri file

  • Libreria Gesture APDS9960 di Robojax
    Questa libreria è utilizzata per il Sensore di Gestualità APDS9960 per rilevare il movimento della tua mano e individuare il colore presente.
    robojax-gesture-APDS9960-Library.zip