Verwendung eines VL53L0X Laser-Entfernungsmessers mit Arduino
In diesem Tutorial werden wir untersuchen, wie Sie den VL53L0X Laser-Entfernungsmesser mit einem Arduino verwenden können. Mit diesem Gerät können Sie Entfernungen mit einem Laser genau messen, was es ideal für verschiedene Anwendungen wie Robotik und Automatisierung macht. Am Ende dieses Tutorials verfügen Sie über ein funktionales Setup, mit dem Entfernungen gemessen und auf dem seriellen Monitor angezeigt werden können.

Für unser Projekt werden wir die Adafruit VL53L0X-Bibliothek verwenden, die den Prozess der Anbindung an den Sensor vereinfacht. Diese Bibliothek bietet die notwendigen Funktionen, um den Sensor zu initialisieren, Messungen auszulesen und eventuell auftretende Fehler zu behandeln. Sie können sich auf das Video beziehen, um eine visuelle Anleitung zur Einrichtung zu erhalten (im Video bei 02:15).
Hardware erklärt
Zu den Hauptkomponenten dieses Projekts gehören der VL53L0X Laser-Entfernungsmesser und das Arduino-Board. Der VL53L0X ist ein Time-of-Flight-Sensor, der mit einem Laser Entfernungen von bis zu 2 Metern mit hoher Genauigkeit misst. Er arbeitet über das I2C-Protokoll und ermöglicht so eine einfache Kommunikation mit dem Arduino.
Das Arduino-Board dient als Mikrocontroller, der die Daten aus dem VL53L0X verarbeitet. Er sendet Befehle an den Sensor und empfängt die Abstandsmessungen, die dann angezeigt oder in anderen Anwendungen verwendet werden können. Eine ordnungsgemäße Verkabelung ist entscheidend, um genaue Messwerte vom Sensor zu gewährleisten.
Details zum Datenblatt
| Hersteller | STMicroelectronics |
|---|---|
| Teilenummer | VL53L0X |
| Betriebsspannung | 2,6 V bis 3,5 V |
| Bereich | 30 mm bis 2000 mm |
| Genauigkeit | ±3 % typisch |
| Schnittstelle | I2C |
| Temperaturbereich | -40 °C bis +85 °C |
| Stromaufnahme | <1 mA (Standby), 20 mA (aktiv) |
| Paket | VFLGA-8 |
- Stellen Sie sicher, dass der Sensor korrekt mit Strom versorgt wird (2,6 V bis 3,5 V).
- Behalten Sie die korrekten I2C-Adresseinstellungen bei, um Konflikte zu vermeiden.
- Halten Sie den Sensor sauber, um genaue Entfernungsmessungen zu ermöglichen.
- Verwenden Sie bei Bedarf geeignete Pull-up-Widerstände an den I2C-Leitungen.
- Vermeiden Sie direkte Sonneneinstrahlung auf den Sensor, um zuverlässige Messwerte zu erhalten.
Anleitung zur Verkabelung

Um den VL53L0X Sensor mit dem Arduino zu verdrahten, verbinden Sie den VCC-Pin des Sensors mit dem 5V-Pin am Arduino. Der GND-Pin sollte mit der Masse (GND) des Arduino verbunden werden. Verbinden Sie für die I2C-Kommunikation den SDA-Pin des VL53L0X mit dem A4-Pin am Arduino und den SCL-Pin mit dem A5-Pin. Wenn Sie ein anderes Arduino-Modell verwenden, lesen Sie die spezifischen SDA- und SCL-Pin-Belegungen für diese Platine.
Auf dem Arduino Mega würden Sie beispielsweise SDA mit Pin 20 und SCL mit Pin 21 verbinden. Stellen Sie sicher, dass alle Verbindungen sicher sind, um Kommunikationsprobleme zu vermeiden. Wenn der Sensor nicht reagiert, überprüfen Sie die Verkabelung und stellen Sie sicher, dass der Arduino ordnungsgemäß mit Strom versorgt wird.
Codebeispiele und exemplarische Vorgehensweise
Nachfolgend finden Sie einen Ausschnitt aus der Setup-Funktion, mit der der VL53L0X Sensor initialisiert wird:
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);
}
}Dieser Code initialisiert die serielle Kommunikation und versucht, den VL53L0X Sensor zu starten. Wenn der Sensor nicht startet, gibt er eine Fehlermeldung aus und stoppt das Programm.
Als nächstes sehen Sie hier einen Ausschnitt aus der Schleifenfunktion, der die Entfernungsmessung ausliest:
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);
}Dieser Block liest kontinuierlich die Abstandsmessung vom Sensor aus und druckt sie auf den seriellen Monitor aus. Liegt die Messung außerhalb des Bereichs, zeigt sie dies entsprechend an.
Vorführung / Was Dich erwartet
Wenn Sie das Programm ausführen, sollten die Entfernungsmessungen auf dem seriellen Monitor angezeigt werden. Die Messwerte sollten alle 100 Millisekunden aktualisiert werden. Wenn der Sensor auf ein Objekt zeigt, zeigt er die Entfernung in Millimetern an. Wenn sich das Objekt außerhalb des Bereichs befindet, wird dies ebenfalls angezeigt. Stellen Sie sicher, dass Sie den Sensor innerhalb des angegebenen Bereichs testen, um optimale Ergebnisse zu erzielen (im Video bei 10:00).
Zeitstempel für Videos
- 00:00-Einleitung
- 02:15- Einrichtung der Verkabelung
- 05:30- Erklärung des Codes
- 10:00-Demonstration
/*
* Dieses Beispiel zeigt, wie man den kontinuierlichen Modus verwendet, um Reichweitenmessungen mit dem VL53L0X durchzuführen.
* // Originalquelle von Adafruit https://github.com/adafruit/Adafruit_VL53L0X
* // Modifiziert von Ahmad Shamshiri für RoboJax.com
* // Änderungsdatum: 26. September 2017
* // Nejrabi
*
* Laden Sie diesen Code und weitere Arduino-Codes von Robojax.com herunter
* Lernen Sie Arduino Schritt für Schritt in einem strukturierten Kurs mit allen Materialien, Schaltplänen und Bibliotheken
* alles an einem Ort.
*
* Wenn Ihnen dieses Tutorial geholfen hat, unterstützen Sie mich bitte, damit ich weiterhin Inhalte wie dieses erstellen kann.
*
* oder spenden Sie mit PayPal http://robojax.com/L/?id=64
*
* Dieser Code ist "WIE BESEHEN" ohne Gewährleistung oder Haftung. Frei zu verwenden, solange Sie diese Notiz unverändert lassen.*
* Dieser Code wurde von Robojax.com heruntergeladen
* Dieses Programm ist freie Software: Sie können es weiterverteilen und/oder modifizieren
* unter den Bedingungen der GNU General Public License, wie sie von der
* Free Software Foundation veröffentlicht wurde, entweder in der Version 3 der Lizenz oder
* (nach Ihrer Wahl) in einer späteren Version.
*
* Dieses Programm wird in der Hoffnung verteilt, dass es nützlich sein wird,
* aber OHNE JEGLICHE GEWÄHRLEISTUNG; ohne sogar die stillschweigende Gewährleistung von
* MARKTGÄNGIGKEIT oder EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Siehe die
* GNU General Public License für weitere Details.
*
* Sie sollten eine Kopie der GNU General Public License
* mit diesem Programm erhalten haben. Wenn nicht, siehe <https://www.gnu.org/licenses/>.
*
* Urheberrecht (c) 2015, Majenko Technologies
* Alle Rechte vorbehalten.
*
* Die Weiterverbreitung und Nutzung in Quell- und Binärform, mit oder ohne Modifikation,
* sind erlaubt, sofern die folgenden Bedingungen erfüllt sind:
*
* Die Weiterverbreitung von Quellcode muss den oben genannten Urheberrechtshinweis, diese
* Liste von Bedingungen und den folgenden Haftungsausschluss enthalten.
*
* Die Weiterverbreitung in Binärform muss den oben genannten Urheberrechtshinweis, diese
* Liste von Bedingungen und den folgenden Haftungsausschluss in der Dokumentation und/oder
* sonstigen Materialien, die mit der Verbreitung bereitgestellt werden, reproduzieren.
*
* Weder der Name von Majenko Technologies noch die Namen seiner
* Mitwirkenden dürfen verwendet werden, um Produkte zu bewerben oder zu fördern, die aus
* dieser Software abgeleitet sind, ohne vorherige spezifische schriftliche Genehmigung.
*
* DIESE SOFTWARE WIRD VON DEN URHEBERRECHTSINHABERN UND MITARBEITERN "WIE BESEHEN" BEREITGESTELLT UND
* ALLE AUSDRÜCKLICHEN ODER STILLSCHWEIGENDEN GEWÄHRLEISTUNGEN, EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF, DIE STILL-
* SCHWEIGENDEN GEWÄHRLEISTUNGEN DER MARKTGÄNGIGKEIT UND EIGNUNG FÜR EINEN BESTIMMTEN ZWECK WERDEN
* ABGELEHNT. IN KEINEM FALL SOLLTEN DIE URHEBERRECHTSINHABER ODER MITARBEITER FÜR
* IRGENDEINE DIREKTE, INDIREKTE, NEBEN- ODER FOLGESCHÄDEN HAFTBAR GEMACHT WERDEN,
* EINSCHLIESSLICH, ABER NICHT BEGRENZT AUF, DEN ERWERB VON EQUIVALENTEN WAREN ODER DIENSTLEISTUNGEN;
* VERLUST DER NUTZUNG, DATEN ODER GEWINNE; ODER UNTERBRECHUNGEN DES GESCHÄFTSBETRIEBS, UNABHÄNGIG DAVON, WIE
* DIESE VERURSACHT WURDEN UND AUF JEDER HAFTUNGSTHEORIE, OB IM VERTRAG, AUSDRÜCKLICHER HAFTUNG ODER DELIKT
* (EINSCHLIESSLICH FAHRLÄSSIGKEIT ODER ANDERES), DIE IN IRGENDEINER WEISE AUS DER NUTZUNG DIESER
* SOFTWARE ENTSTEHT, AUCH WENN AUF DIE MÖGLICHKEIT SOLCHER SCHÄDEN HINGEWIESEN WURDE.
*/
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(9600);
// Warten, bis der serielle Port für native USB-Geräte geöffnet ist.
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// Leistung
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); // Übergeben Sie 'true', um eine Debug-Datenausgabe zu erhalten!
if (measure.RangeStatus != 4) { // Phasenfehler haben falsche Daten.
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
Ressourcen & Referenzen
-
ExternVL53L0X Datenblatt (PDF)st.com
Dateien📁
Keine Dateien verfügbar.