Utilizzo di un distanziometro laser VL53L0X con Arduino
In questo tutorial, esploreremo come utilizzare il distanziometro laser VL53L0X con un Arduino. Questo dispositivo consente di misurare le distanze con precisione utilizzando un laser, rendendolo ideale per varie applicazioni come la robotica e l'automazione. Alla fine di questo tutorial, avrai una configurazione funzionale in grado di misurare le distanze e visualizzarle nel monitor seriale.

Per il nostro progetto, utilizzeremo la libreria VL53L0X Adafruit, che semplifica il processo di interfacciamento con il sensore. Questa libreria fornisce le funzioni necessarie per inizializzare il sensore, leggere le misure e gestire eventuali errori che possono verificarsi. È possibile fare riferimento al video per una guida visiva sulla configurazione (in video al minuto 02:15).
Spiegazione dell'hardware
I componenti principali di questo progetto includono il distanziometro laser VL53L0X e la scheda Arduino. Il VL53L0X è un sensore a tempo di volo che utilizza un laser per misurare distanze fino a 2 metri con elevata precisione. Funziona tramite il protocollo I2C, consentendo una facile comunicazione con Arduino.
La scheda Arduino funge da microcontrollore che elabora i dati dal VL53L0X. Invia comandi al sensore e riceve le misurazioni della distanza, che possono quindi essere visualizzate o utilizzate in altre applicazioni. Un cablaggio corretto è fondamentale per garantire letture accurate dal sensore.
Dettagli della scheda tecnica
| Fabbricante | STMicroelectronics |
|---|---|
| Numero di parte | VL53L0X |
| Tensione di esercizio | Da 2,6 V a 3,5 V |
| Gamma | Da 30 mm a 2000 mm |
| Accuratezza | ±3% tipico |
| Interfaccia | I2C |
| Intervallo di temperatura | Da -40 °C a +85 °C |
| Consumo di corrente | <1 mA (standby), 20 mA (attivo) |
| Pacco | VFLGA-8 |
- Assicurarsi che il sensore sia alimentato correttamente (da 2,6 V a 3,5 V).
- Mantenere le impostazioni corrette dell'indirizzo I2C per evitare conflitti.
- Mantenere pulito il sensore per misurazioni accurate della distanza.
- Se necessario, utilizzare resistori di pull-up appropriati sulle linee I2C.
- Evitare la luce solare diretta sul sensore per letture affidabili.
Istruzioni per il cablaggio

Per collegare il sensore VL53L0X ad Arduino, collegare il pin VCC del sensore al pin 5V su Arduino. Il pin GND deve essere collegato alla massa (GND) di Arduino. Per la comunicazione I2C, collegare il pin SDA del VL53L0X al pin A4 su Arduino e collegare il pin SCL al pin A5. Se stai utilizzando un modello di Arduino diverso, fai riferimento alle assegnazioni dei pin SDA e SCL specifiche per quella scheda.
Ad esempio, su Arduino Mega, è necessario collegare SDA al pin 20 e SCL al pin 21. Assicurati che tutte le connessioni siano sicure per evitare problemi di comunicazione. Se il sensore non risponde, ricontrolla il cablaggio e assicurati che Arduino sia alimentato correttamente.
Esempi di codice e procedura dettagliata
Di seguito è riportato un frammento della funzione di configurazione che inizializza il sensore VL53L0X:
void setup() {
Serial.begin(9600);
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
}Questo codice inizializza la comunicazione seriale e tenta di avviare il sensore VL53L0X. Se il sensore non si avvia, verrà stampato un messaggio di errore e verrà interrotto il programma.
Successivamente, ecco un frammento della funzione loop che legge la misurazione della distanza:
void loop() {
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false);
if (measure.RangeStatus != 4) {
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}Questo blocco legge continuamente la misurazione della distanza dal sensore e la stampa sul monitor seriale. Se la misurazione è fuori intervallo, lo indica di conseguenza.
Dimostrazione / Cosa aspettarsi
Quando si esegue il programma, le misurazioni della distanza dovrebbero essere visualizzate nel monitor seriale. Le letture dovrebbero aggiornarsi ogni 100 millisecondi. Se il sensore sta puntando su un oggetto, visualizzerà la distanza in millimetri. Se l'oggetto è fuori portata, indicherà anche quello. Assicurati di testare il sensore entro l'intervallo specificato per ottenere risultati ottimali (nel video alle 10:00).
Timestamp video
- 00:00-Introduzione
- 02:15- Configurazione del cablaggio
- 05:30- Spiegazione del codice
- 10:00-Dimostrazione
/*
* Questo esempio mostra come utilizzare la modalità continua per effettuare misurazioni di distanza con il VL53L0X.
*
* Ottieni questo codice e altri codici Arduino da Robojax.com.
* Impara Arduino passo dopo passo in un corso strutturato con tutto il materiale, schemi di cablaggio e librerie, tutto in un unico luogo.
*
* Se hai trovato utile questo tutorial, per favore supportami così posso continuare a creare contenuti come questo.
*
* oppure fai una donazione utilizzando PayPal http://robojax.com/L/?id=64
*
* Questo codice è "COSÌ COM'È" senza garanzia o responsabilità. Libero di essere utilizzato finché mantieni intatta questa nota.*
* Questo codice è stato scaricato da Robojax.com.
* Questo programma è software libero: puoi ridistribuirlo e/o modificarlo
* secondo i termini della GNU General Public License come pubblicato dalla
* Free Software Foundation, sia nella versione 3 della Licenza, sia
* (a tua scelta) in qualsiasi versione successiva.
*
* Questo programma è distribuito nella speranza che sia utile,
* ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di
* COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedi la
* GNU General Public License per ulteriori dettagli.
*
* Dovresti aver ricevuto una copia della GNU General Public License
* insieme a questo programma. Se non l'hai ricevuta, vai su <https://www.gnu.org/licenses/>.
*
* Copyright (c) 2015, Majenko Technologies
* Tutti i diritti riservati.
*
* La redistribuzione e l'uso in forme sorgente e binarie, con o senza modifiche,
* sono consentiti a condizione che siano rispettate le seguenti condizioni:
*
* Le redistribuzioni del codice sorgente devono mantenere il suddetto avviso di copyright, questo
* elenco di condizioni e il seguente avviso di non responsabilità.
*
* Le redistribuzioni in forma binaria devono riprodurre il suddetto avviso di copyright, questo
* elenco di condizioni e il seguente avviso di non responsabilità nella documentazione e/o
* altro materiale fornito con la distribuzione.
*
* Né il nome di Majenko Technologies né i nomi dei suoi
* contributori possono essere utilizzati per avallare o promuovere prodotti derivati da
* questo software senza specifica autorizzazione scritta.
*
* QUESTA SOFTWARE È FORNITO DAI TITOLARI DEL COPYRIGHT E DAI CONTRIBUTORI "COSÌ COM'È" E
* QUALSIASI GARANZIA ESPRESSA O IMPLICITA, INCLUSI, MA NON LIMITATI A, LE GARANZIE IMPLICITE
* DI COMMERCIABILITÀ E IDONEITÀ PER UN PARTICOLARE SCOPO SONO
* RINUNCIATE. IN NESSUN CASO I TITOLARI DEL COPYRIGHT O I CONTRIBUTORI POSSONO ESSERE RESPONSABILI PER
* EVENTUALI DANNI DIRETTI,INDIRETTI, INCIDENTALI, SPECIALI, ESEMPLARI O CONSEGUENTI
* (INCLUSI, MA NON LIMITATI A, L'ACQUISTO DI BENI O SERVIZI SOSTITUTIVI;
* PERDITA D'USO, DATI O PROFITTI; O INTERRUPZIONE DELL'ATTIVITÀ) IN QUALSIASI MODO CAUSATI E SU
* QUALSIASI TEORIA DI RESPONSABILITÀ, SIA IN CONTRATTO, RESPONSABILITÀ STRATTA O TORTO
* (INCLUSA LA NEGLIGENZA O ALTRO) NASCENTI IN QUALSIASI MODO DALL'USO DI QUESTO
* SOFTWARE, ANCHE SE AVVISATI DELLA POSSIBILITÀ DI TALI DANNI.
*/
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(9600);
// aspetta fino a quando la porta seriale si apre per i dispositivi USB nativi
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// potere
Serial.println(F("VL53L0X API Simple Ranging example\n\n"));
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
Serial.print("Reading a measurement... ");
lox.rangingTest(&measure, false); // passa 'true' per ottenere l'output dei dati di debug!
if (measure.RangeStatus != 4) { // i guasti di fase hanno dati errati
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
Risorse e riferimenti
-
Esternodatasheet VL53L0X (PDF)st.com
File📁
Nessun file disponibile.