Modulo TOF VL6180

Il Modulo TOF VL6180 è un sensore di tipo Time Of Flight ( da cui TOF ) il cui componente attivo è costituito dal VL6180 della STMicroelectronics.

Modulo TOF VL6180

L’esigenza a cui potresti dover rispondere è quella di rilevare un oggetto in modo accurato a pochi centimetri da un sistema in movimento con l’aggravante della luminosità che può cambiare influenzando il comportamento e la risposta.

In modo specifico ho utilizzato tale sensore per il progetto SpritzDress  presentato lo scorso Martedì 17 luglio 2018 all’AUG e di cui hai potuto leggere l’articolo pubblicato il giorno seguente.

Il Modulo TOF VL6180

Il Modulo TOF VL6180 basa il suo funzionamento sul principio del Tempo di Volo ( Time Of Flight ) che puoi approfondire qui

In modo semplice il principio del tempo di volo si basa sulla misura del tempo che una data particella nota impiega a percorrere uno spazio in un mezzo noto.

TOF - Time Of Flight

Fonte: WiKipedia

Nel nostro caso la particella è una lunghezza d’onda laser di 850 nm e il mezzo in cui si sposta è  l’aria, conoscendo la velocità con cui tale particella si muove nell’aria e misurando il tempo che impiega a raggiungere un oggetto puoi determinarne la distaza e non solo.

Il DataSheet del VL6180 è dettagliato e ti spiega come funzioni il sensore e quali siano le sue caratteristiche.

Test del Modulo TOF VL6180

Dovendolo utilizzare per il progetto dell’abito puoi eseguire qualche prova prima di impiegarlo in un progetto più complesso.

Nello SpritzDress il modulo TOF VL6180 si occupa di rilevare il bicchiere per essere certo che il cocktail non sia erogato se non è presente il bicchiere o un altro contenitore.

Il bicchiere, di plastica o vetro è trasparente per cui facilmente attraversato da fasci luminosi generati da led o altre fonti che non siano puntiformi come il laser.

Il modulo comunica con Arduino mediante il protocollo I2C e quindi 4 fili: SDA, SCL, Vcc e Gnd.

Salda 4 cavetti al modulo TOF VL6180 in questo modo:

Modulo TOF VL6180x schema

E’ ora di installare le librerie per il modulo TOF VL6180 che sono disponibili nell’IDE arduino.

Tra le molte librerie provate quella più rispondente alle esigenze del progetto per cui il modulo deve essere impiegato è quella di Adafruit:

Modulo TOF VL6180x library installclicca su “Installa”, ed al termine dell’installazione vedrai la seguente schermata:

Modulo TOF VL6180x library installed e nel menù degli esempi troverai i due esempi rilasciati con la libreria:

Modulo TOF VL6180x examples library

puoi selezionare il primo esempio e lo analizziamo insieme nel paragrafo dedicato allo sketch:

Sketch di test del modulo tof vl6180x

Il test del modulo tof vl6180 puoi farlo utilizzando il codice di esempio rilasciato con la libreria Adafruit per il modulo:

#include <Wire.h>
#include "Adafruit_VL6180X.h"

Adafruit_VL6180X vl = Adafruit_VL6180X();

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

  // wait for serial port to open on native usb devices
  while (!Serial) {
    delay(1);
  }
  
  Serial.println("Adafruit VL6180x test!");
  if (! vl.begin()) {
    Serial.println("Failed to find sensor");
    while (1);
  }
  Serial.println("Sensor found!");
}

void loop() {
  float lux = vl.readLux(VL6180X_ALS_GAIN_5);

  Serial.print("Lux: "); Serial.println(lux);
  
  uint8_t range = vl.readRange();
  uint8_t status = vl.readRangeStatus();

  if (status == VL6180X_ERROR_NONE) {
    Serial.print("Range: "); Serial.println(range);
  }

  // Some error occurred, print it out!
  
  if  ((status >= VL6180X_ERROR_SYSERR_1) && (status <= VL6180X_ERROR_SYSERR_5)) {
    Serial.println("System error");
  }
  else if (status == VL6180X_ERROR_ECEFAIL) {
    Serial.println("ECE failure");
  }
  else if (status == VL6180X_ERROR_NOCONVERGE) {
    Serial.println("No convergence");
  }
  else if (status == VL6180X_ERROR_RANGEIGNORE) {
    Serial.println("Ignoring range");
  }
  else if (status == VL6180X_ERROR_SNR) {
    Serial.println("Signal/Noise error");
  }
  else if (status == VL6180X_ERROR_RAWUFLOW) {
    Serial.println("Raw reading underflow");
  }
  else if (status == VL6180X_ERROR_RAWOFLOW) {
    Serial.println("Raw reading overflow");
  }
  else if (status == VL6180X_ERROR_RANGEUFLOW) {
    Serial.println("Range reading underflow");
  }
  else if (status == VL6180X_ERROR_RANGEOFLOW) {
    Serial.println("Range reading overflow");
  }
  delay(50);
}

analizziamo insieme lo sketch di test del modulo tof vl6180 partendo dalle linee 01-02 che includono le librerie necessarie alla comunicazione con il modulo, la libreria Wire per gestire l’I2C e la libreria specifica dell’Adafruit;

linea 04: definisci l’istanza vl con la quale accedi ai metodi della classe Adafruit_VL6180X();

linee 07-14: imposta e controlla la comunicazione seriale tra Arduino e l’IDE in modo da essere certo che lo sketch continui solo in presenza del monitor seriale connesso;

linea 15: usa il metodo begin dell’istanza vl per inizializzare la comunicazione con il sensore e verificarne il corretto collegamento;

linee 16-19: se il metodo begin non ti restituisce un risultato valido scrivi sul monitor seriale “Failed to find sensor” in caso di corretta comunicazione stabilita scrivi “Sensor found!”;

linea 23: definisci una variabile di tipo float  il cui valore è dato dalla risposta del metodo readLux; a tale metodo puoi passare una serie di costanti la cui spiegazione è presente nello specchietto in basso;

linea 25: scrivi sul monitor seriale il valore di lux letto dal sensore;

linee 27-28: usando i metodi readRange e readRangeStatus leggi i due valori dal sensore VL6180X;

linee 30-32: se non ci sono errori scrivi sul monitor seriale il valore di range rilevato dal sensore;

linee 36-62: verifica i messaggi di errore e per ciascun errore scrivi sul monitor seriale il tipo di errore che hai rilevato;

linea 63: imposta il delay tra un ciclo di loop ed il successivo a 50 millisecondi;

Approfondimento modulo tof vl6180

Ecco uno specchietto riassuntivo, e non esaustivo, delle costanti che puoi utilizzare in fase di lettura con il metodo readLux:

 

 

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/modulo-tof-vl6180.html

1 ping

  1. […] in passato avevo testato il VL6180 tipo di sensore e descritto la tecnologia utilizzata dai sensori ToF per rilevare gli oggetti posti […]

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

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