Misurare la distanza con un modulo laser VL53L0X a 6 pin e display TM1637 per Arduino
In questo tutorial impareremo come misurare la distanza utilizzando il sensore di distanza laser VL53L0X e visualizzare le misurazioni su un display a 7 segmenti TM1637. Questo progetto combina entrambi i componenti per creare uno strumento di misurazione della distanza semplice ma efficace. Il VL53L0X utilizza la tecnologia laser per fornire misurazioni della distanza accurate, mentre il display TM1637 mostra queste misurazioni in un formato intuitivo per l'utente.


Passeremo in rassegna l'hardware necessario, le istruzioni di cablaggio e il codice necessari per mettere tutto in funzione. Al termine di questo tutorial avrai un dispositivo funzionante per la misurazione della distanza che potrà essere utilizzato in varie applicazioni. Per una guida visiva, assicurati di guardare il video (nel video a 00:00).
Hardware spiegato
I componenti principali per questo progetto sono il sensore di distanza laser VL53L0X e il modulo display TM1637. Il VL53L0X è un sensore Time-of-Flight che misura la distanza da un oggetto emettendo un raggio laser e calcolando il tempo impiegato dal raggio riflesso per tornare. Opera su un intervallo di tensione da 2.6V a 3.5V, ma può anche funzionare a 5V grazie a un regolatore di tensione integrato.
Il TM1637 è un driver per display che controlla un display LED a 7 segmenti. Comunica tramite una semplice interfaccia a 2 fili (CLK e DIO), rendendo facile il collegamento a un Arduino. Il display può mostrare valori numerici ed è perfetto per visualizzare le misurazioni di distanza dal sensore VL53L0X.
Dettagli della scheda tecnica
| Produttore | STMicroelectronics |
|---|---|
| Numero di parte | VL53L0X |
| Tensione logica/IO | 2.6 V - 3.5 V |
| Tensione di alimentazione | 2.6 V - 5 V |
| Temperatura di esercizio | -20 °C a 70 °C |
| Intervallo di misura | da 30 mm a 2000 mm |
| Frequenza I2C | 400 kHz |
| Impostazione del timeout | 500 ms |
| Pacchetto | modulo a 6 pin |
- Assicurati che l'alimentazione sia corretta (5V è accettabile).
- Collegare il pin XSHUT mediante una resistenza di pull-up per evitare correnti di fuga.
- Usa I2C per la comunicazione; collega SDA e SCL in modo appropriato.
- Gestire i timeout nel codice per evitare comportamenti imprevisti.
- Tenere presente l'intervallo di temperatura di esercizio per garantire la precisione.
Istruzioni di cablaggio

Per cablare il VL53L0X e il display TM1637, inizia collegando il pin VCC del VL53L0X al pin 5V dell'Arduino e il pin GND a un pin GND dell'Arduino. Successivamente, collega il pin SDA del VL53L0X al pin A4 dell'Arduino, che viene tipicamente usato per la comunicazione dati I2C. Il pin SCL dovrebbe essere collegato al pin A5 dell'Arduino, usato per il segnale di clock.
Per il display TM1637, collegare il pin CLK al pin digitale 2 dell'Arduino e il pin DIO al pin digitale 3. Infine, collegare il pin XSHUT del VL53L0X al pin digitale 12 dell'Arduino. Assicurarsi che eventuali pin non utilizzati, come GPIO1 del VL53L0X, rimangano non collegati. Questa configurazione permetterà all'Arduino di comunicare efficacemente sia con il sensore sia con il display.
Esempi di codice e guida passo-passo
Il codice inizializza il sensore e il display, configura la comunicazione I2C e legge continuamente le misurazioni di distanza. Di seguito è riportato uno snippet che mostra la funzione setup in cui i pin sono configurati e il sensore è inizializzato:
void setup() {
pinMode(12, INPUT_PULLUP); // set pin 12 for input
digitalWrite(12, HIGH); // set pin 12 high (5V)
Serial.begin(9600);
Wire.begin(); // I2C communication initialized
sensor.init(); // distance sensor is initialized
sensor.setTimeout(500); // time out is set
sensor.startContinuous(); // type of measurement is set
}Nella funzione setup, il pin per XSHUT è configurato come ingresso con resistore di pull-up e il sensore viene inizializzato per la misurazione continua della distanza. Anche il monitor seriale viene impostato per visualizzare le letture della distanza.
Successivamente, il ciclo principale legge la distanza e aggiorna il display. Ecco un estratto mirato della funzione loop:
void loop() {
int distance = sensor.readRangeContinuousMillimeters(); // read the distance in mm
display.setSegments(clearLED); // remove previous value from LED display
display.showNumberDec(distance, false, 4, 0); // display the distance
Serial.print("Distance: ");
Serial.print(distance); // print distance on serial monitor
}Questo ciclo legge continuamente la distanza dal sensore e aggiorna il display TM1637 con l'ultima misurazione. Inoltre stampa la distanza sul monitor seriale per scopi di debug. Se vuoi vedere il codice completo, verrà caricato sotto l'articolo.
Dimostrazione / Cosa aspettarsi
Una volta completata la configurazione e caricato il codice, dovresti vedere la distanza misurata dal VL53L0X visualizzata sul TM1637. Se avvicini o allontani un oggetto dal sensore, il valore visualizzato cambierà di conseguenza. Se riscontri letture inattese, assicurati che il sensore non sia ostruito e che la superficie dell'oggetto sia adatta alla riflessione del laser (nel video a 09:30).
Gli errori più comuni includono il cablaggio invertito o la mancata inizializzazione corretta del sensore, che possono causare errori di timeout. Verifica che i pin corretti siano collegati e che il sensore sia alimentato adeguatamente per misurazioni accurate della distanza.
Risorse e riferimenti
Nessuna risorsa ancora.
File📁
Scheda tecnica (pdf)
-
Scheda tecnica per il display a sette segmenti TM1637 a 4 cifre
/download/datasheet/robojax_TM1637_datasheet.pdf0.67 MB
File Fritzing
-
Modulo a sette segmenti TM1637
TM1637.fzpz0.01 MB -
Display a sette segmenti a 4 cifre TM1637
TM1637-1.fzpz0.01 MB
Manuale dell'utente
-
Manuale del Display TM1637
robojax-TM1637_display_manual.pdf0.31 MB
Altri file
-
VL53L0X_Sensore_di_distanza_porpora
VL53L0X_Distance_sensor_purple.fzpz0.01 MB