Arduino Lektion #103: Laser Distanz Sensor VL53LXX-V2

In diesem Beitrag möchte ich den Laser Distanz Sensor VL53LXX-V2 vorstellen. Dieser Sensor kann eine Distanz von bis zu 4m messen und arbeitet dabei mit einer Abtastgeschwindigkeit von 50Hz.

Laser Distanz Sensor - VL53LXX-V2
Laser Distanz Sensor – VL53LXX-V2

Bezug

Den Laser Distanz Sensor kann man über ebay.de für ca. 8€ inkl. Versandkosten beziehen oder deutlich günstiger über aliexpress.com (4,19$ inkl. Versandkosten).

Ich habe den Sensor über aliexpress.com bestellt und habe ca. 5 Wochen auf diesen Sensor warten dürfen. Dafür aber weniger als die hälfte bezahlt.

Lieferumfang

Der Sensor wird in einer kleinen Antistatik Tüte geliefert und enthält neben dem Sensor noch eine Stiftleiste.

Lieferumfang - Laser Distanz Sensor VL53LXX-V2
Lieferumfang – Laser Distanz Sensor VL53LXX-V2

Technische Daten des VL53LXX-V2

  • Betriebsspannung 3.3V bis 5.5V
  • Messbereich
    • Minimal 40mm
    • Maximal 4m
    • Messbereichsgenauigkeit ±5%
  • Wellenlänge des Lasers 940nm
  • Betriebsstemperatur -20°C bis 80°C
  • Abmessungen
    • ohne Löcher 15mm x 10mm
    • mit Löcher 25mm x 10mm
    • Druchmesser der Löcher 3mm

Aufbau & Schaltung

Bevor der Sensor verwendet werden kann muss dieser mit der Stiftleiste verbunden werden. Um die Stiftleiste korrekt (also im 90° Winkel) an den Sensor zu löten habe ich zusätzlich ein 170 Pin Breadboard und die überzähligen Stifte verwendet.

anlöten der Stiftleiste an den Laser Distanz Sensor
anlöten der Stiftleiste an den Laser Distanz Sensor

Aufbau

Der Sensor verfügt über 6 Pins welche wie folgt an den Arduino UNO angeschlossen werden.

VL53LXX-V2 Arduino UNO
VIN 5V
GND GND
SCL analoger Pin A5
SDA analoger Pin A4
GPIO01  
XSHUT  

Die Pins GPIO01 & XSHUT werden in meinen Beispielen zunächst nicht verwendet.

Schaltung

Aufbau der Schaltung - Laser Distanz Sensor am Arduino UNO
Aufbau der Schaltung – Laser Distanz Sensor am Arduino UNO

Quellcode

Bibliothek

Bibliotheken erleichtern einem Programmierer die arbeiten enorm, besonders wenn man wie wir mit Hardware arbeitet und so die einzelnen Adressen und Speicherbereiche be-/verarbeiten muss. Daher gibt es auch für diesen Sensor eine Bibliothek welche wir uns in die Entwicklungsumgebung (in meinem Fall wie immer die Arduino IDE) einbinden.

Den Bibliotheksverwalter erreicht man über das Hauptmenü „Sketch“ > „Bibliothek einbinden“ > „Bibliotheken verwalten…“. In diesem Dialog wird zunächst nach der Bibiothek mit dem Suchbegriff „vl53l“ (1) gesucht. Ich verwende die Bibliothek von Sparkfun und wähle den zweiten Eintrag aus den Suchergebnissen (2) nach dem betätigen der Schaltfläche „Installieren“ kann (nach Abschluss) der Dialog geschlossen werden (3).

Installieren der Bibliothek für das verwenden des Laser Distanz Sensors
Installieren der Bibliothek für das verwenden des Laser Distanz Sensors

Beispiel – Ausgabe der Daten auf dem seriellen Monitor

Der Bibliothek liegt ein Beispiel bei wie man diesen Sensor in der Arduino IDE programmiert. Das werde ich hier nutzen und etwas umschreiben und kommentieren.

#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

//Um die Debug Ausgaben zu aktivieren
//muss dieser Wert auf "true" gesetzt werden.
#define debugSensor false

//Es werden 10 Messungen durchgeführt.
const int MAX_DATA = 10;
//der Index der aktuellen Messung
int readDataIndex = -1;
//das Array für die Daten
int data[MAX_DATA] = {};

//zählen der fehlerhaften Messungen
int failureMeasures = 0;

void setup() {
  //begin der seriellen Kommunikation mit 115200 baud
  Serial.begin(115200);

  //Warten auf den Seriellen Port
  while (! Serial) {
    delay(1);
  }

  //Wenn der Serielle Port bereit ist dann eine Ausgabe auf diesen tätigen 
  //und prüfen ob der Sensor korrekt angeschlossen ist (ob dieser Ansprechbar ist)
  Serial.println("GY-VL53L0X test");
  if (!lox.begin()) {
    Serial.println("Fehler beim lesen des Sensors!");
    while(1); //eine Endlos Schleife 
  }
}

void loop() {
  //instanziieren des Sensors zum empfangen von Daten
  VL53L0X_RangingMeasurementData_t measure;
  lox.rangingTest(&measure, debugSensor);

  //lesen des Sensor Status
  //der Sensor kann verschiedene Status annehmen, 
  //jedoch interessiert für uns nur der Wert "4"
  int sensorStatus = measure.RangeStatus;
  //Wenn Daten empfangen wurden dann...
  if (sensorStatus != VL53L0X_DEVICEERROR_MSRCNOTARGET) { 
    //den Zähler für das Array um eins erhöhen
    readDataIndex++;
    //zuweisen des Wertes in das Array
    data[readDataIndex] = measure.RangeMilliMeter;

    //Wenn das Array "fertig" befüllt ist, dann...
    if(readDataIndex == MAX_DATA){
      //eine Variable für die Berechnung des Durchschnittswertes
      int averageData = 0;
      //über das Array itereieren und die Daten zusammenzählen
      for(int i=0;i<MAX_DATA;i++){
        averageData = averageData+data[i];
      }
      //um den Durchschnittswert zu erhalten muss man die Zahl
      //durch die Anzahl der Werte teilen
      averageData = averageData / MAX_DATA;
      //Ausgeben des berechnenen Durchschnitts für die Distanz
      Serial.print("Distanz: ");
      Serial.print(averageData);  
      Serial.println("mm");  
      readDataIndex = -1;
      failureMeasures =0;
    }else if(debugSensor && readDataIndex % 2 == 0){
      Serial.print("X");
    }
  } else if(debugSensor && sensorStatus != VL53L0X_DEVICEERROR_NONE) {
    Serial.println(" Signal konnte nicht gelesen / verarbeitet werden! ");
  } else {
    if(debugSensor && ++failureMeasures % 2==0){
      Serial.print("-");
    }    
  }

  if(debugSensor && (failureMeasures + readDataIndex)> MAX_DATA){
      Serial.println("");
  }
  //eine Pause von 5ms einlegen
  delay(5);
}

Video

Test des Laser Distanzsensors GY-VL53L0XV2
Dieses Video ansehen auf YouTube.

Vergleich mit einem Ultraschallsensor HC-SR04

Den Ultraschallsensor HC-SR04 habe ich bereits im Beitrag Arduino Lektion 9: Ultraschall Modul HC-SR04 vorgestellt. Da beide Sensoren (GY-VL53L0XV2 & HC-SR04) den Abstand von Objekten messen können, möchte ich kurz beide Sensoren testen.

Man kann sehr gut erkennen das der Ultraschallsensor den Abstand nicht so genau misst wie der Laser Distanzsensor.

Fazit

Der Laser Distanzsensor GY-VL53L0XV2 ist günstig in der Anschaffung und durch das einfache einbinden einer Bibliothek auch genauso einfach zu programmieren. Jedoch ist dieser nicht ganz so genau und hatte in meinem Test eine Abweichung von bis zu mehreren Zentimeter.

 

Ein Gedanke zu „Arduino Lektion #103: Laser Distanz Sensor VL53LXX-V2

  • 3. Oktober 2020 um 13:18
    Permalink

    Netter Artikel. Habe den VL53lxx auch grade beim Stöbern entdeckt. Auch der vergleich zum HC-SR04 hilft. Aber könntest du den Test noch mal mit größeren Abständen machen? Der TOF-Sensor soll ja „bis zu 4m“ messen können.
    Ich denke da an Belegtanzeigen von Parkbuchten o.a. Was passiert, wenn das „Hindernis“ nicht genau im rechten Winkel zur Messtrecke steht. ist dann die Erkennung auch noch OK?
    Dann wäre der Blog-Artikel perfekt 🙂

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.