Skip to content
logo9minuti120x48
Menu
  • Home
  • Tutorial
    • Zaini
    • Stampa 3d
    • ebook
    • Informatica
  • Scritti
    • Racconti
    • Articoli
    • Temi
    • Storia
  • Video
  • Progetti
    • Progetto Carcere
    • Progetto Istruzione
    • Progetto Acque pulite
    • Progetto Tecnologia
  • Chi siamo
    • LinkTree
  • Privacy Policy
    • Cookie Policy (EU)
  • Blog
  • Donazioni
Menu
APDS 9960 con Arduino

Sensore APDS 9960 con Arduino: Gesture – Colori – Distanza

Posted on 18 Gennaio 201916 Settembre 2019 by Alessandro Oppo

Benvenuti su 9minuti.it, oggi vedremo insieme come utilizzare il sensore APDS 9960 con Arduino.

Il sensore APDS 9960 ha diverse funzionalità. Può essere usato con Arduino come sensore per le gesture, come sensore per il riconoscimento dei colori, come sensore di luminosità e come sensore di prossimità.

Fra tutte le funzionalità del sensore APDS 9960 quella sicuramente più interessante è il sensore delle gesture.

Esso dovrebbe permetterci di distinguere se la mano va da destra verso sinistra, da sinistra verso destra, dall’alto verso il basso o viceversa.

APDS 9960 con Arduino
APDS 9960 con Arduino

Indice

  • Dove Comprarlo
  • Il collegamento
  • Il codice
  • Riconoscimento dei colori
  • Dove Comprarlo
  • Sensore di prossimità
  • Conclusioni

Dove Comprarlo

Vi consiglio di comprare qui i vostri sensori, così da supportare anche il blog.

Amazon (veloce e sicuro) —-> https://amzn.to/2RvPp3C

Aliexpress (lento ma economico) —-> http://s.click.aliexpress.com/e/bWzXf7gU

Bangood (lento ma economico) —-> https://www.banggood.com/custlink/3KGKdrd1FP

Il collegamento

Procediamo con il collegamento del sensore APDS 9960 con Arduino.

Possiamo, in alternativa, utilizzare i pin SDA e SCL che molti arduini hanno sopra al pin 13.

APDS9960.png

Il codice

Utilizzeremo la libreria di Adafruit per l’ADPS 9960 con Arduino. La potete scaricare direttamente dal gestore delle librerie, in questo articolo spiego come fare.

Esiste anche la libreria della Sparkfun ma ho riscontrato dei problemi con il modulo che ho utilizzato.

Vediamo ora l’esempio incluso nella libreria Adafruit relativo alle gesture.

/***************************************************************************
  This is a library for the APDS9960 digital proximity, ambient light, RGB, and gesture sensor

  This sketch puts the sensor in gesture mode and decodes gestures.
  To use this, first put your hand close to the sensor to enable gesture mode.
  Then move your hand about 6" from the sensor in the up -> down, down -> up, 
  left -> right, or right -> left direction.

  Designed specifically to work with the Adafruit APDS9960 breakout
  ----> http://www.adafruit.com/products/3595

  These sensors use I2C to communicate. The device's I2C address is 0x39

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Dean Miller for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ***************************************************************************/

#include "Adafruit_APDS9960.h"
Adafruit_APDS9960 apds;

// the setup function runs once when you press reset or power the board
void setup() {
  Serial.begin(115200);
  
  if(!apds.begin()){
    Serial.println("failed to initialize device! Please check your wiring.");
  }
  else Serial.println("Device initialized!");

  //gesture mode will be entered once proximity mode senses something close
  apds.enableProximity(true);
  apds.enableGesture(true);
}

// the loop function runs over and over again forever
void loop() {
  //read a gesture from the device
    uint8_t gesture = apds.readGesture();
    if(gesture == APDS9960_DOWN) Serial.println("v");
    if(gesture == APDS9960_UP) Serial.println("^");
    if(gesture == APDS9960_LEFT) Serial.println("<");
    if(gesture == APDS9960_RIGHT) Serial.println(">");
}

22 – Includiamo la librerie di Adafruit
23 – Creiamo il nostro oggetto apds di tipo Adafruit_APDS9960
27 – La solita chiamata del metodo begin dell’oggetto serial con baud rate di 115200
29, 30, 32 – Controllo che il sensore APDS 9960 sia collegato ad Arduino.
35 – Attivazione del sensore di prossimità (Il sensore delle gesture parte una volta che viene attivato quello di prossimità)
36 – Attivazione delle gesture
42 – Salvataggio della gesture nella variabile gesture
43, 44, 45, 46 – Serie di quattro inline if con conseguente stampa da seriale delle gesture identificate.

Riconoscimento dei colori

Come abbiamo detto funziona anche come riconoscitore dei colori. O meglio dovrebbe, perché anche qui ho ricontrato molta approssimazione.

/***************************************************************************
  This is a library for the APDS9960 digital proximity, ambient light, RGB, and gesture sensor

  This sketch puts the sensor in color mode and reads the RGB and clear values.

  Designed specifically to work with the Adafruit APDS9960 breakout
  ----> http://www.adafruit.com/products/3595

  These sensors use I2C to communicate. The device's I2C address is 0x39

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Dean Miller for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ***************************************************************************/

#include "Adafruit_APDS9960.h"
Adafruit_APDS9960 apds;

void setup() {
  Serial.begin(115200);

  if(!apds.begin()){
    Serial.println("failed to initialize device! Please check your wiring.");
  }
  else Serial.println("Device initialized!");

  //enable color sensign mode
  apds.enableColor(true);
}

void loop() {
  //create some variables to store the color data in
  uint16_t r, g, b, c;
  
  //wait for color data to be ready
  while(!apds.colorDataReady()){
    delay(5);
  }

  //get the data and print the different channels
  apds.getColorData(&r, &g, &b, &c);
  Serial.print("red: ");
  Serial.print(r);
  
  Serial.print(" green: ");
  Serial.print(g);
  
  Serial.print(" blue: ");
  Serial.print(b);
  
  Serial.print(" clear: ");
  Serial.println(c);
  Serial.println();
  
  delay(500);
}

31 – Attivazione del sensore in modalità colore
32 – Creazione di alcune variabili in cui contenere i valori letti
39 – Ciclo while che fa attendere 5 millisecondi se il sensore non è pronto
44 – Il sensore legge i dati
45 – 56 – Stampa dei valori

Dove Comprarlo

Vi consiglio di comprare qui i vostri sensori, così da supportare anche il blog.

Amazon (veloce e sicuro) —-> https://amzn.to/2RvPp3C

Aliexpress (lento ma economico) —-> http://s.click.aliexpress.com/e/bWzXf7gU

Bangood (lento ma economico) —-> https://www.banggood.com/custlink/3KGKdrd1FP

Sensore di prossimità

Attenzione che per questa modalità è necessario attaccare anche il PIN 3 di Arduino a INT del nostro sensore.

/***************************************************************************
  This is a library for the APDS9960 digital proximity, ambient light, RGB, and gesture sensor

  This sketch puts the sensor in proximity mode and enables the interrupt
  to fire when proximity goes over a set value

  Designed specifically to work with the Adafruit APDS9960 breakout
  ----> http://www.adafruit.com/products/3595

  These sensors use I2C to communicate. The device's I2C address is 0x39

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Dean Miller for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
 ***************************************************************************/

#include "Adafruit_APDS9960.h"

//the pin that the interrupt is attached to
#define INT_PIN 3

//create the APDS9960 object
Adafruit_APDS9960 apds;

void setup() {
  Serial.begin(115200);
  pinMode(INT_PIN, INPUT_PULLUP);

  if(!apds.begin()){
    Serial.println("failed to initialize device! Please check your wiring.");
  }
  else Serial.println("Device initialized!");

  //enable proximity mode
  apds.enableProximity(true);

  //set the interrupt threshold to fire when proximity reading goes above 175
  apds.setProximityInterruptThreshold(0, 175);

  //enable the proximity interrupt
  apds.enableProximityInterrupt();
}

void loop() {

  //print the proximity reading when the interrupt pin goes low
  if(!digitalRead(INT_PIN)){
    Serial.println(apds.readProximity());

    //clear the interrupt
    apds.clearInterrupt();
  }
}

23 – Definiamo qual è il PIN dell’Arduino collegato all’INT del sensore
30 – Dichiariamo che il nosto pin precedentemente scelto verrà usato in modalità INPUT_PULLUP
38 – Abilitiamo la modalità sensore di prossimità
41, 44 – Questi due comandi non mi sono molto chiari, ho cercato più informazioni sul sito di Adafruit ma non ho trovato nulla. Se qualcuno dovesse scoprirlo gli chiedo gentilmente di segnalarlo.
50 – Se il pin INT è spento
51 – Stampa della distanza
54 – Cancella l’interrupt

Conclusioni

apds9960_3_sensors
Tutti i modelli a confronto

Il sensore ADPS 9960 con Arduino funziona bene ma non benissimo.

Mi riferisco alle gesture che funzionano una volta sì e una volta no e che lo rendono inutilizzabile per un progetto vero e proprio.

É possibile che sia il mio sensore difettoso e ne ho ordinate altre due tipologie che differiscono leggermente nella circuitazione, aggiornerò l’articolo non appena riuscirò a fare delle prove.

Grazie per l’attenzione e al prossimo articolo! Ovviamente in caso di problemi sono pronto ad aiutarvi, lasciatemi un messaggio qui sotto e vi risponderò al più presto.

Grazie,
Alessandro

Dammi un 5 virtuale, clicca like e condividi.

  • Fai clic qui per condividere su LinkedIn (Si apre in una nuova finestra)
  • Fai clic per condividere su Facebook (Si apre in una nuova finestra)
  • Fai clic qui per condividere su Twitter (Si apre in una nuova finestra)
  • Fai clic qui per condividere su Reddit (Si apre in una nuova finestra)
  • Fai clic per condividere su WhatsApp (Si apre in una nuova finestra)
  • Fai clic per condividere su Telegram (Si apre in una nuova finestra)
  • Fai clic per inviare un link a un amico via e-mail (Si apre in una nuova finestra)

Related

Cosa ne pensi? Fammelo sapere con un messaggio Annulla risposta

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Scoprici sui social

  • YouTube
  • Telegram
  • Facebook
  • RSS Feed

    Ultimi post

    • Buzzurretto e la scuola – Racconto breve
    • Il mio punto di vista sul progetto scuola
    • Di nuovo nuvole – Racconto breve
    • L’intelligenza artificiale, la forza della logica e la morale – ChatGPT
    • Videogrep, how to extract a certain word from a video (or more)
    • Brucerò tutto non appena è stato scritto – Racconto breve
    • C’è del lavoro da fare – Racconto breve

    Newsletter

    ©2023 9minuti | Design: Newspaperly WordPress Theme
    Manage Cookie Consent
    Usiamo cookie per ottimizzare il nostro sito web ed i nostri servizi.
    Cookie funzionali Sempre attivo
    The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
    Preferences
    The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
    Statistics
    The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
    Marketing
    The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
    Gestisci opzioni Gestisci servizi Gestisci fornitori Per saperne di più su questi scopi
    Visualizza preference
    {title} {title} {title}
     

    Caricamento commenti...