Bauteil · Sensor

VL53L0X ToF-Sensor

Der VL53L0X misst mit Laser statt Schall – ein enges, schnelles, millimetergenaues Strahlbündel über I²C für Roboter, die präzise messen müssen.

Was es ist

Der VL53L0X misst Entfernung wie ein Laserentfernungsmesser – mit Licht statt Schall. Er feuert einen unsichtbaren Infrarotlaserpuls und misst die Umlaufzeit – eine enge, schnelle, millimetergenaue Lesung über I²C. Wo ein HC-SR04 einen breiten Kegel mit Zentimeterstreuung spürt, spürt der VL53L0X einen engen Fleck mit Präzision – der Sensor, zu dem man greift, wenn „grob wie weit“ nicht reicht.

Beschriftetes Diagramm eines VL53L0X-Laufzeitsensor-Breakouts: eine kleine lila Platine mit dem Laufzeitgehäuse in der Mitte mit zwei Öffnungen – einem runden Laseremitter und einem quadratischen SPAD-Empfänger –, einem herauszeigenden Laserstrahlpfeil und einer 6-poligen Stiftleiste (VIN, GND, SCL, SDA, GP1, XSH) an der Unterkante.
Ein Infrarotlaser feuert aus dem Emitter und der SPAD-Empfänger misst die Reflexion – Laufzeitmessung mit engem Strahlbündel und Millimeterpräzision. SVG herunterladen

Wie es funktioniert

Das Gehäuse hält zwei Öffnungen: einen Laseremitter und einen SPAD-Empfänger (einen Einzelphotonendetektor). Der Sensor feuert einen 940-nm-Infrarotlichtpuls, der Empfänger misst, wie lange die Reflexion zurück braucht – und da Licht mit bekannter Geschwindigkeit reist, wird diese Zeit zur Entfernung. Das gesamte Timing geschieht on-chip; der Mikrocontroller liest nur den Millimeterwert über I²C. Die Zielkonflikte gegen Schall sind exakt die in Ultraschall gegen Laufzeitsensoren abgewogenen.

Wann man ihn verwendet

Zum VL53L0X greifen, wenn ein Roboter präzise Engstrahl-Entfernungsmessung braucht:

  • Nahe, exakte Entfernungen – eine bestimmte Lücke beurteilen, Wandfolge mit festem Versatz oder einen präzisen Stopp.
  • Kleine oder dünne Hindernisse – ein Tischbein oder Draht, das der breite Ultraschallkegel verschmieren oder verfehlen würde.
  • Schnelle Schleifen – bis 50 Hz Updates für reaktionsfreudige Regelung.

Für billiges, gutmütiges „ist etwas voraus?“-Erkennen über breitere Fläche ist der HC-SR04 die preiswertere Wahl – und die Filterideen in den HC-SR04 auslesen gelten für jeden Entfernungsstrom, Laser eingeschlossen.

Verdrahtung und Fallstricke

  • I²C, und Adresskollision. Jeder VL53L0X teilt eine Standardadresse – den XSHUT-Pin nutzen, um sie einzeln hochzufahren und Adressen neu zu vergeben, um mehrere zu betreiben.
  • Umgebungslicht beachten. Helle Sonne (viel Infrarot) und dunkle oder spiegelartige Flächen verkürzen die nutzbare Reichweite.
  • Das Fenster sauber halten. Ein Fingerabdruck oder Staub auf der Öffnung streut den Strahl und korrumpiert Messwerte.
  • Die Nahgrenze respektieren (~5 cm); wie jeder Entfernungssensor hat er eine zu nahe Blindzone.

Pinbelegung

Pin Name Was er tut
1 VIN 3–5 V. Das Breakout regelt auf die 2,8 V des Sensors herunter
2 GND Masse
3 SCL I²C-Takt
4 SDA I²C-Daten
5 GPIO1 Interrupt-Ausgang – feuert, wenn eine Messung bereit ist
6 XSHUT Abschaltung, active low. Low gezogen schaltet den Sensor vollständig ab

XSHUT ist der Pin, der mehrere Sensoren möglich macht – und lohnt Verstehen, bevor man den zweiten kauft.

Mehrere VL53L0X-Sensoren betreiben

Jeder VL53L0X startet mit derselben Adresse, 0x29, und es gibt keine Adresswahlpins. Zwei an einem Bus und beide antworten zugleich – was jede Transaktion korrumpiert. Die Adresse lässt sich per Software ändern, aber die Änderung ist flüchtig – bei jedem Einschaltzyklus verloren.

Die Standardlösung nutzt XSHUT, um sie einzeln hochzufahren:

#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);
  }
}

Zwei Details, die Leute erwischen: Die Pins müssen für Reset LOW getrieben und dann freigegeben werden, und die ganze Sequenz muss nach jedem Einschaltzyklus erneut laufen, weil die Adressen nicht bleiben. Manche Breakouts ziehen XSHUT per Bordwiderstand high – den Pin schlicht offen zu lassen aktiviert den Sensor also.

Timingbudget: der Genauigkeits-/Tempo-/Reichweitenregler

Der VL53L0X hat eine Einstellung, die mehr zählt als alle anderen, und der meiste Beispielcode fasst sie nie an. Das Timingbudget ist, wie lange der Sensor Photonen für eine einzelne Messung integrieren darf – und es handelt drei Dinge gegeneinander:

Timingbudget Aktualisierungsrate Typische Reichweite Am besten für
20 ms ~50 Hz ~0,8 m Schnelle Regelschleifen, Nahbereich
33 ms (Standard) ~30 Hz ~1,2 m Allgemeiner Gebrauch
66 ms ~15 Hz ~1,7 m Bessere Präzision auf Distanz
200 ms ~5 Hz ~2 m Maximale Reichweite, statische Messung
sensor.setMeasurementTimingBudget(20000);   // microseconds

Dazu gibt es Fern- und Hochgenauigkeitsmodi, die Signalschwelle und Impulsperioden anpassen. Die praktische Regel: Reicht der Sensor nicht weit genug, mehr Zeit ausgeben, bevor man dem Sensor die Schuld gibt. Ein 200-ms-Budget verdoppelt die nutzbare Reichweite gegenüber einem 20-ms-Budget wirklich.

Minimal funktionierender 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 und 8191 sind keine Entfernungen. Sie sind die Art des Sensors zu sagen, er bekam keine brauchbare Rückkehr – entweder ist nichts da, oder das Ziel ist zu dunkel oder zu fern. Code, der 8191 als 8,19 Meter behandelt, benimmt sich in einem leeren Raum seltsam; Code, der es als null behandelt, legt in einem eine Notbremsung hin.

Was er nicht sehen kann

Der VL53L0X versagt an fast exakt der gegensätzlichen Flächenmenge wie ein Ultraschallsensor – die gesamte Grundlage, zwischen beiden zu wählen.

Bedingung Was geschieht Warum
Schwarze matte Flächen Reichweite bricht stark ein, oft auf ein Drittel Sehr wenig des 940-nm-Lichts kommt zurück
Spiegel und poliertes Metall Liest fern oder nichts Der Strahl reflektiert spiegelnd weg, wie Licht an Glas
Helles direktes Sonnenlicht Reichweite kollabiert Sonnenlicht steckt voll 940-nm-Infrarot, das die Rückkehr überstrahlt
Glas Liest was dahinter ist, oder das Glas, unvorhersehbar Teils transmittiert, teils reflektiert
Näher als ~3–5 cm Unzuverlässig Unter Mindestarbeitsabstand des Sensors
Jenseits ~1,2 m bei Standardeinstellungen Timeout Timingbudget erhöhen, bevor man ihn für kaputt erklärt

Das Sonnenlicht verdient Betonung, weil es am überraschendsten ist. Ein VL53L0X, der drinnen perfekt arbeitet, kann in einem sonnigen Wintergarten fast nutzlos sein – und der Fehler ist graduell: Die Reichweite verkürzt sich statt dass Messwerte offensichtlich falsch werden.

Fehlersuche

Symptom Wahrscheinliche Ursache Lösung
init() scheitert Verdrahtung oder XSHUT low gehalten Bus nach 0x29 scannen; prüfen, ob XSHUT high oder offen-high ist
Zwei Sensoren, nur einer arbeitet Beide auf 0x29 Die XSHUT-Sequenz oben bei jedem Start verwenden
Adressen nach Einschaltzyklus verloren Konstruktionsbedingt flüchtig Zuweisungssequenz in setup() erneut fahren
Liest ständig 8190/8191 Keine gültige Rückkehr Zielfarbe, Entfernung und Umgebungslicht prüfen
Reichweite deutlich kürzer als 2 m Standard-Timingbudget Auf 100–200 ms erhöhen
Drinnen in Ordnung, draußen Ausfall Umgebungs-IR aus Sonnenlicht Sensor beschatten oder draußen Ultraschall verwenden
Messwerte driften über Minuten Fenster verschmutzt oder Temperatur Öffnung reinigen; Sensorkalibrierung fahren
Gelegentliche wilde Werte Zielkante oder Teilreflexion Den Strom medianfiltern, wie bei jedem Entfernungssensor

VL53L0X oder etwas anderes?

Teil Reichweite Bemerkenswert Wählen wenn
VL53L0X 5 cm – 2 m Der billige, ubiquitäre Standard Präzise Kurzstreckenmessung drinnen
VL53L1X 4 cm – 4 m Doppelte Reichweite, programmierbarer Interessensbereich Mehr Reichweite nötig, oder Sichtfeld per Software einengen
VL6180X 5 mm – 20 cm Sehr kurze Reichweite, spürt auch Umgebungslicht Spaltmessung und Nähe im Zentimetermaß
HC-SR04 2 cm – 4 m Schall, breiter Kegel, keine Bibliothek nötig Billige, gutmütige Hinderniserkennung; sieht dunkle Flächen
Sharp GP2Y0A21 10–80 cm Analoge IR-Triangulation, ein ADC-Pin Kein I²C frei, und nichtmonotoner Ausgang akzeptabel

Den VL53L1X lohnt es gesondert zu nennen: Er ist in fast jeder Hinsicht ein Drop-in-besser, und sein programmierbarer Interessensbereich lässt das Sichtfeld per Software einengen – den Strahl effektiv lenken, ohne den Sensor zu bewegen. Wer heute wählt statt Vorhandenes nutzt, kauft meist besser ihn.

Den Graphen erkunden

Verwendet in diesen Bauprojekten

Projekte, Lernpfade und Simulatoren, die VL53L0X ToF-Sensor verwenden.

Vergleich

Alternativen

Fragen

FAQ zu VL53L0X ToF-Sensor

Was ist die Maximalentfernung des VL53L0X?

Etwa 2 Meter im Standardmodus – manche Boards tauschen Aktualisierungsrate gegen längere Reichweite. Am genauesten ist er im Nahbereich; jenseits weniger Meter oder bei hellem Umgebungsinfrarot wie Sonnenlicht werden Messwerte unzuverlässig. Unter etwa 5 cm hat er außerdem eine nahe Blindzone.

Was sind die Grenzen des VL53L0X?

Seine Reichweite ist kurz (~2 m) neben einem Ultraschallsensor, helles Sonnenlicht und dunkle oder spiegelartige Flächen kürzen sie weiter, und jeder Sensor kommt mit derselben I²C-Adresse – mehrere zu betreiben braucht also den XSHUT-Trick zur Adressneuvergabe. Auch das kleine Fenster sauber halten; Staub streut den Strahl.

Funktioniert der VL53L0X auf schwarzen Flächen?

Schlecht. Dunkle, matte Flächen schlucken den Infrarotlaser – die Reflexion ist schwach und die nutzbare Reichweite bricht stark ein: Eine schwarze Wand liest sich weit näher an der Sensorgrenze als eine weiße. Glänzende oder spiegelartige Flächen werfen ihn ebenfalls ab, indem sie den Strahl vom Empfänger wegspiegeln.

Was ist der VL53L0X-Laserdistanzsensor?

Ein winziger Laufzeitsensor, der Entfernung mit Licht statt Schall misst. Er feuert einen unsichtbaren 940-nm-Infrarotlaserpuls und misst, wie lange die Reflexion zurück braucht – eine enge, schnelle, millimetergenaue Lesung über I²C.

Laufzeit gegen Ultraschall – welches ist besser?

Ein Laufzeitsensor wie der VL53L0X hat ein enges Strahlbündel und Millimeterpräzision – spürt also einen bestimmten Punkt und kleine Objekte, die ein Ultraschallsensor verfehlen würde. Der HC-SR04 ist billiger, reicht weiter, und sein breiter Kegel hilft tatsächlich, Hindernisse nicht zu verfehlen. ToF für Präzision nehmen, Ultraschall für billige, gutmütige Erkennung.

Weiterführende Literatur

Quellen