Nota
Ciao, benvenuto nella community SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts su Facebook! Esplora a fondo Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
Perché unirsi?
Supporto esperto: Risolvi problemi post-vendita e difficoltà tecniche con l’aiuto della nostra community e del nostro team.
Impara e condividi: Scambia consigli e tutorial per migliorare le tue competenze.
Anteprime esclusive: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime.
Sconti speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
Promozioni festive e giveaway: Partecipa a promozioni festive e concorsi a premi.
👉 Pronto a esplorare e creare con noi? Clicca su [qui] e unisciti oggi stesso!
Lezione 21: Sensore di distanza Micro-LIDAR Time of Flight (VL53L0X)
In questa lezione imparerai a utilizzare il Raspberry Pi Pico W per misurare distanze con il sensore VL53L0X Micro-LIDAR Time of Flight. Ti guideremo nella configurazione della comunicazione I2C tra il Raspberry Pi Pico W e il sensore, e poi esploreremo come ottimizzare le impostazioni del sensore per ottenere prestazioni migliori. Imparerai anche ad adattare il budget temporale di misura e i periodi d’impulso VCSEL per migliorare la precisione e la portata.
Componenti necessari
Per questo progetto, sono necessari i seguenti componenti.
È sicuramente comodo acquistare un kit completo, ecco il link:
Nome |
ELEMENTI NEL KIT |
LINK |
---|---|---|
Universal Maker Sensor Kit |
94 |
È anche possibile acquistarli separatamente dai link seguenti.
Introduzione componente |
Link di acquisto |
---|---|
Raspberry Pi Pico W |
|
Collegamenti

Codice
Nota
Apri il file
21_vl53l0x_module.py
nel percorsouniversal-maker-sensor-kit-main/pico/Lesson_21_VL53L0X_Module
oppure copia questo codice in Thonny, quindi clicca su «Esegui script corrente» o premi semplicemente F5 per avviarlo. Per i tutorial dettagliati, consulta Apri ed Esegui Codice Direttamente.Qui è necessario utilizzare il file
vl53l0x.py
. Verifica che sia stato caricato sul Pico W. Per il tutorial dettagliato, consulta Caricare le Librerie su Pico.Ricordati di selezionare l’interprete «MicroPython (Raspberry Pi Pico)» nell’angolo in basso a destra.
import time
from machine import Pin, I2C
from vl53l0x import VL53L0X
print("setting up i2c")
id = 0
sda = Pin(20)
scl = Pin(21)
i2c = I2C(id=id, sda=sda, scl=scl)
print(i2c.scan())
# print("creating vl53lox object")
# Crea un oggetto VL53L0X
tof = VL53L0X(i2c)
# Pre: da 12 a 18 (inizializzato a 14 per default)
# Final: da 8 a 14 (inizializzato a 10 per default)
# Il measuting_timing_budget è un valore in ms: maggiore è il budget, più precisa sarà la lettura.
budget = tof.measurement_timing_budget_us
print("Budget was:", budget)
tof.set_measurement_timing_budget(40000)
# Imposta il periodo di impulso del laser VCSEL (vertical cavity surface emitting laser)
# per il tipo specificato (VL53L0X::VcselPeriodPreRange o VL53L0X::VcselPeriodFinalRange)
# al valore desiderato (in PCLK). Periodi più lunghi aumentano la portata potenziale del sensore.
# Valori validi: solo numeri pari.
# tof.set_Vcsel_pulse_period(tof.vcsel_period_type[0], 18)
tof.set_Vcsel_pulse_period(tof.vcsel_period_type[0], 12)
# tof.set_Vcsel_pulse_period(tof.vcsel_period_type[1], 14)
tof.set_Vcsel_pulse_period(tof.vcsel_period_type[1], 8)
while True:
# Avvia la misurazione
print(tof.ping() - 50, "mm")
time.sleep_ms(100) # Breve pausa di 0,1 secondi per ridurre l’utilizzo della CPU
Analisi del Codice
Configurazione dell’interfaccia I2C:
Il codice inizia importando i moduli necessari e inizializzando la comunicazione I2C. Il modulo
machine
viene utilizzato per configurare l’I2C con i pin corretti del Raspberry Pi Pico W.Per maggiori informazioni sulla libreria
vl53l0x
, visita kevinmcaleer/vl53l0x.import time from machine import Pin, I2C from vl53l0x import VL53L0X print("setting up i2c") id = 0 sda = Pin(20) scl = Pin(21) i2c = I2C(id=id, sda=sda, scl=scl) print(i2c.scan())
Creazione dell’oggetto VL53L0X:
Viene creato un oggetto della classe
VL53L0X
, che sarà utilizzato per interagire con il sensore.tof = VL53L0X(i2c)
Configurazione del timing budget di misura:
Viene impostato il timing budget, che determina la durata di ogni misurazione. Un budget maggiore consente una maggiore precisione.
budget = tof.measurement_timing_budget_us print("Budget was:", budget) tof.set_measurement_timing_budget(40000)
Impostazione dei periodi di impulso VCSEL:
Qui vengono definiti i periodi di impulso per il laser VCSEL. Questo parametro influisce su precisione e portata.
tof.set_Vcsel_pulse_period(tof.vcsel_period_type[0], 12) tof.set_Vcsel_pulse_period(tof.vcsel_period_type[1], 8)
Ciclo di misurazione continua:
Il sensore misura continuamente la distanza e stampa i valori. Il metodo
ping()
della classeVL53L0X
restituisce la distanza in millimetri. Una breve pausa riduce il carico della CPU.while True: print(tof.ping() - 50, "mm") time.sleep_ms(100)