Component · Sensor
VL53L0X ToF-sensor
De VL53L0X meet met een laser in plaats van geluid — een smalle, snelle bundel die millimeternauwkeurig meet via I²C, voor robots die nauwkeurig moeten meten.
Wat het is
De VL53L0X meet afstand net als een laserafstandsmeter—met licht in plaats van geluid. Hij stuurt een onzichtbare infrarode laserimpuls uit en meet met een smalle bundel de looptijd van het licht, wat via I²C een snelle, nauwkeurige meting oplevert. Waar een HC-SR04 met een brede meetkegel meet, is de VL53L0X de keuze voor een nauwkeurige afstandsmeting met een smalle bundel—de sensor die je kiest wanneer “ongeveer hoe ver” niet goed genoeg is.
Hoe het werkt
De behuizing bevat twee openingen: een laseremitter en een SPAD-ontvanger (een detector voor losse fotonen). De sensor stuurt een impuls van 940 nm infraroodlicht uit, de ontvanger meet hoe lang het licht nodig heeft voor de heen- en terugweg en—omdat licht een bekende snelheid heeft—wordt die tijd omgerekend naar afstand. Alle tijdmeting vindt op de chip plaats; je microcontroller leest alleen de waarde in millimeters via I²C. De afwegingen tegenover geluid zijn precies de afwegingen in ultrasone versus looptijdsensoren.
Wanneer je hem gebruikt
Kies een VL53L0X wanneer een robot precies en met een smalle bundel moet afstanden:
- Nabije, exacte afstanden — een specifieke opening beoordelen, op een vaste afstand een muur volgen of precies stoppen.
- Kleine of dunne obstakels — een tafelpoot of draad die door de brede meetkegel van de ultrasone sensor onscherp wordt gemaakt of helemaal wordt gemist.
- Snelle regellussen — tot 50 metingen per seconde voor snelle besturing.
Voor goedkope, robuuste detectie van “is er iets vooruit?” over een groter gebied is de HC-SR04 een goede keuze qua prijs en functionaliteit—en de filterideeën in de HC-SR04 uitlezen gelden voor elke afstandsmeetreeks, ook voor een laser.
Aansluiting en aandachtspunten
- I²C-adresconflicten. Elke VL53L0X deelt één standaardadres—gebruik de XSHUT-pin om ze één voor één uit de reset te halen en adressen opnieuw toe te wijzen als je er meerdere gebruikt.
- Let op het omgevingslicht. Fel zonlicht (veel infrarood) en donkere of spiegelende oppervlakken verkorten het bruikbare bereik.
- Houd het raampje schoon. Een vingerafdruk of stof op de opening verstrooit de bundel en verstoort de metingen.
- Respecteer de ondergrens (~5 cm); zoals elke afstandssensor heeft ook deze een dode zone die te dichtbij ligt om te meten.
Pinindeling
| Pin | Naam | Functie |
|---|---|---|
| 1 | VIN | 3–5 V. De breakout verlaagt de ingangsspanning naar 2,8 V voor de sensor |
| 2 | GND | Ground |
| 3 | SCL | I²C-klok |
| 4 | SDA | I²C-data |
| 5 | GPIO1 | Interrupt-uitgang — activeert wanneer een meting klaar is |
| 6 | XSHUT | Uitschakelen, actief laag. Trek de pin laag om de sensor volledig uit te schakelen |
XSHUT is de pin waarmee meerdere sensoren mogelijk worden en het is belangrijk om dat te begrijpen voordat je de tweede koopt.
Meerdere VL53L0X-sensoren gebruiken
Elke VL53L0X start op hetzelfde adres, 0x29, en er zijn geen adreskeuzepinnen. Zet er twee op één bus, dan antwoorden beide tegelijk en wordt elke transactie verstoord. Het adres kan in software worden gewijzigd, maar de wijziging is vluchtig—hij verdwijnt na elke keer dat de voeding uit- en ingeschakeld wordt.
De standaardoplossing gebruikt XSHUT om ze één voor één uit de reset te halen:
#include <Wire.h>
#include <VL53L0X.h>
const int XSHUT[] = {4, 5, 6}; // one GPIO per sensor
const uint8_t ADDR[] = {0x30, 0x31, 0x32};
VL53L0X sensor[3];
void setup() {
Wire.begin();
// 1. Hold every sensor in reset.
for (int i = 0; i < 3; i++) { pinMode(XSHUT[i], OUTPUT); digitalWrite(XSHUT[i], LOW); }
delay(10);
// 2. Release one at a time and give each a new address before the next wakes.
for (int i = 0; i < 3; i++) {
digitalWrite(XSHUT[i], HIGH);
delay(10);
sensor[i].init();
sensor[i].setAddress(ADDR[i]); // now it is off 0x29 and the next can boot
sensor[i].setTimeout(500);
}
}
Twee details verrassen mensen: de pinnen moeten voor de reset LOW worden gestuurd en daarna worden losgelaten, en de hele reeks moet opnieuw worden uitgevoerd omdat de adressen niet blijven staan. Sommige breakouts trekken XSHUT via een pull-upweerstand op HIGH, dus de pin simpelweg zwevend laten betekent dat de sensor ingeschakeld blijft.
Tijdbudget voor de meting: de afstelknop voor nauwkeurigheid, snelheid en bereik
De VL53L0X heeft één instelling die belangrijker is dan alle andere, en de meeste voorbeeldcode raakt hem nooit aan. Het tijdbudget voor de meting bepaalt hoe lang de sensor fotonen mag integreren voor één meting, en het is een afweging tussen drie dingen:
| Tijdbudget voor de meting | Updatefrequentie | Typisch bereik | Beste voor |
|---|---|---|---|
| 20 ms | ~50 Hz | ~0,8 m | Snelle regellussen, korte afstand |
| 33 ms (standaard) | ~30 Hz | ~1,2 m | Algemeen gebruik |
| 66 ms | ~15 Hz | ~1,7 m | Betere nauwkeurigheid op afstand |
| 200 ms | ~5 Hz | ~2 m | Maximale afstand, statische meting |
sensor.setMeasurementTimingBudget(20000); // microseconds
Er zijn daarnaast modi voor groot bereik en hoge nauwkeurigheid die de drempelwaarde voor de signaalsnelheid en de pulsperioden aanpassen. De praktische regel is: bereikt de sensor niet ver genoeg, besteed dan meer tijd voordat je de sensor de schuld geeft. Een tijdbudget voor de meting van 200 ms verdubbelt het bruikbare bereik van een tijdbudget van 20 ms echt.
Minimaal werkende code
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!sensor.init()) {
Serial.println("VL53L0X not found"); // check wiring and XSHUT
while (1) {}
}
sensor.setTimeout(500);
sensor.setMeasurementTimingBudget(33000);
sensor.startContinuous();
}
void loop() {
uint16_t mm = sensor.readRangeContinuousMillimeters();
if (sensor.timeoutOccurred()) {
Serial.println("timeout");
} else if (mm >= 8190) {
Serial.println("out of range"); // 8190/8191 mean "no valid target"
} else {
Serial.println(mm);
}
delay(20);
}
8190 en 8191 zijn geen afstanden. Het is de manier waarop de sensor zegt dat hij geen bruikbare reflectie kreeg — er is niets of het meetobject is te donker of te ver weg. Code die 8191 als 8,19 meter behandelt, reageert vreemd in een lege ruimte; code die het als nul behandelt, maakt daar een noodstop van.
Wat hij niet kan zien
De VL53L0X werkt juist slecht op de tegengestelde soorten oppervlakken van een ultrasone sensor, en dat is de volledige basis voor de keuze tussen beide.
| Omstandigheid | Wat er gebeurt | Waarom |
|---|---|---|
| Zwarte matte oppervlakken | Het bereik daalt sterk, vaak tot een derde | Er komt nauwelijks 940 nm-licht terug |
| Spiegels en gepolijst metaal | De gemeten afstand is te groot, of er wordt niets gemeten | De bundel kaatst spiegelend terug, zoals licht op glas |
| Fel direct zonlicht | Het bereik neemt sterk af | Zonlicht bevat veel 940 nm-infrarood dat de reflectie overstemt |
| Glas | Meet soms het glas, soms wat er erachter ligt, onvoorspelbaar | Deelt het licht deels door en kaatst het deels terug |
| Dichterbij dan ~3–5 cm | Onbetrouwbaar | Onder de minimale werkafstand van de sensor |
| Verder dan ~1,2 m bij standaardinstellingen | Time-out | Verhoog het tijdbudget voor de meting voordat je concludeert dat de sensor defect is |
De invloed van zonlicht verdient nadruk, omdat die het meest verrassend is. Een VL53L0X die binnen perfect werkt, kan in een zonnige wintertuin bijna nutteloos zijn, en de uitval is geleidelijk—het bereik wordt korter in plaats van dat de metingen duidelijk verkeerd worden.
Problemen oplossen
| Klacht | Waarschijnlijke oorzaak | Oplossing |
|---|---|---|
init() mislukt |
Bedrading, of XSHUT laag gehouden |
Doorzoek de bus op 0x29; controleer of XSHUT HIGH is of via een pull-upweerstand op HIGH staat |
| Twee sensoren, slechts één werkt | Beide op 0x29 |
Gebruik bij elke start de XSHUT-reeks hierboven |
| Adressen verdwijnen nadat de voeding is uit- en ingeschakeld | Ze zijn bewust vluchtig | Voer de adresreeks opnieuw uit in setup() |
| De gemeten afstand is te groot, of er wordt niets gemeten (8190/8191) | Geen bruikbare reflectie | Controleer kleur, afstand en omgevingslicht van het meetobject |
| Bereik veel korter dan 2 m | Standaardtijdbudget voor de meting | Verhoog het naar 100–200 ms |
| Werkt binnen, faalt buiten | Infrarood uit zonlicht | Scherm de sensor af, of gebruik ultrasoon buiten |
| Metingen drijven over minuten | Raam vervuild, of temperatuur | Reinig de opening; voer de kalibratie van de sensor uit |
| Af en toe uitschieters | Rand van een meetobject, of gedeeltelijke reflectie | Pas een mediaanfilter toe, zoals bij elke afstandssensor |
VL53L0X of iets anders?
| Onderdeel | Bereik | Opvallend | Kies het wanneer |
|---|---|---|---|
| VL53L0X | 5 cm – 2 m | Het goedkope, gangbare standaardmodel | Nauwkeurige afstandsmeting op korte afstand binnenshuis |
| VL53L1X | 4 cm – 4 m | Tweemaal het bereik, programmeerbaar meetgebied | Als je meer bereik nodig hebt, of het meetveld softwarematig wilt versmallen |
| VL6180X | 5 mm – 20 cm | Zeer kort bereik, meet ook omgevingslicht | Spleten detecteren en voorwerpen op korte afstand detecteren |
| HC-SR04 | 2 cm – 4 m | Geluid, brede kegel, geen bibliotheek nodig | Goedkope, robuuste obstakeldetectie; ziet donkere oppervlakken |
| Sharp GP2Y0A21 | 10–80 cm | Analoge IR-triangulatie, één ADC-pin | Geen I²C beschikbaar en een niet-monotone uitgang is acceptabel |
De VL53L1X verdient specifieke vermelding: hij is in vrijwel alle opzichten een directe vervanger voor de huidige VL53L0X, en het programmeerbare meetgebied (ROI) laat je het meetveld softwarematig versmallen—in feite stuur je de bundel zonder de sensor te bewegen. Als je vandaag een nieuw model kiest in plaats van te blijven werken met wat je hebt, is hij meestal de betere keuze.
Verken de graaf
Gebruikt in deze bouwprojecten
Projecten, leerroutes en simulators waarin de VL53L0X ToF-sensor voorkomt.
Vergelijken
Alternatieven
Vragen
FAQ over de VL53L0X ToF-sensor
Wat is de maximale afstand van de VL53L0X?
Ongeveer 2 meter in de standaardmodus—sommige borden ruilen updatefrequentie in voor een groter bereik. Hij is het nauwkeurigst op korte afstand, in de nabijheidszone; voorbij een paar meter, of in fel omgevingslicht met veel infrarood, zoals zonlicht, worden de metingen onbetrouwbaar. Hij heeft ook een dode zone onder ongeveer 5 cm.
Wat zijn de beperkingen van de VL53L0X?
Het bereik is kort (~2 m) vergeleken met een ultrasone sensor. Fel zonlicht en donkere of spiegelende oppervlakken verkorten het verder, en elke sensor heeft dezelfde I²C-adres—voor meerdere sensoren heb je de XSHUT-methode nodig om adressen opnieuw toe te wijzen. Houd ook het kleine raampje schoon; stof verstrooit de bundel.
Werkt de VL53L0X op zwarte oppervlakken?
Slecht. Donkere, matte oppervlakken absorberen de infrarode laser, waardoor de reflectie zwak is en het bruikbare bereik sterk daalt—bij een zwart doel komt de gemeten afstand dus veel dichter bij de grens van het bruikbare bereik dan bij een wit doel. Glanzende of spiegelende oppervlakken sturen hem eveneens in de war doordat ze de bundel wegkaatsen.
Wat is de VL53L0X-laserafstandssensor?
Een kleine looptijdsensor die afstand meet met licht in plaats van geluid. Hij stuurt een onzichtbare impuls van 940 nm infraroodlicht uit en meet hoe lang het licht nodig heeft voor de heen- en terugweg. Zo levert hij via I²C een snelle, nauwkeurige meting met een smalle bundel.
Looptijd versus ultrasoon—wat is beter?
Een looptijdsensor zoals de VL53L0X heeft een smalle bundel en is millimeternauwkeurig, waardoor hij een specifiek punt en kleine objecten kan meten die een ultrasone sensor zou missen. De HC-SR04 is goedkoper en heeft een groter bereik; het brede meetgebied van de ultrasone sensor helpt daarbij een obstakel minder snel te missen. Gebruik ToF voor precisie en ultrasoon voor goedkope, robuuste detectie.
Verder lezen