Nr.44 – Entfernungsmessung mit VL6180X

Inhaltsverzeichnis

Für dieses Projekt benötigst du

Ein VL6180X Entfernungssensor am Arduino Mikrocontroller anschließen

Der VL6180X, oder auch nur VL6180, ist ein Entfernungssensor. Aufgrund seiner Beschaffenheit wird er auch „Time of Flight“ Sensor genannt. Der Sensor enthält eine winzige Laserlichtquelle und einen passenden Empfänger. Der VL6180X kann die „Flugzeit“ oder die Zeit, in der das Laserlicht zum Sensor zurück-reflektiert wurde, messen und daraus die Entfernung berechnen. Da es eine sehr schmale Lichtquelle verwendet, funktioniert dieser Sensor optimal bei kleinen Abständen zum detektierenden Objekt. Die Kommunikation mit dem Sensor erfolgt über den I²C-Bus und ist damit unkompliziert zu verkabeln. Mit einer passenden Library ist die Auswertung der Messergebnisse ebenfalls kein schwieriges Unterfangen.

Unterschied zu anderen Entfernungssensoren

Im Gegensatz zu Ultraschallsensoren ist der Bereich oder die Breite der Abtastung sehr eng.
Im Gegensatz zu Infrarot-Entfernungs-Sensoren, die versuchen, die Menge des reflektierten Lichts zu messen, ist der VL6180X viel präziser, da die Menge des Lichts nicht für die Entfernungsmessung relevant ist.

Der Sensor hat eine Reichweite zwischen ca. 15 und ca. 200 mm. Äußere Einflüsse wie starker Lichteinfall können die Reichweite jedoch reduzieren. Der Sensor kann aufgrund der integrierten Elektronik mit jedem 3-5V Mikrocontroller verwendet werden.

Pinout

Wie im folgenden Bild zu sehen, ist die Verkabelung sehr einfach.

  • Sensor VIN = 5V oder 3.3V am Mikrocontroller
  • Sensor GND = GND-Pin am Mikrocontroller
  • Sensor SCL = SCL-Pin am Mikrocontroller
  • Sensor SDA = SDA-Pin am Mikrocontroller

Programmierung

Für den ersten Sketch verwenden wir als Grundlage eine Library von Adafruit mit dem Namen Adafruit_VL6180X, die direkt über den Bibliotheksverwalter installiert werden kann.

In der Library sind Beispielsketche vorhanden, in denen der volle Leistungsumfang des VL6180X Sensors genutzt werden kann. In dieser Anleitung reduzieren wir den Sketch ausschließlich auf die Entfernungsmessung.

Unser Sketch sieht nun so aus und gibt die Messwerte am seriellen Monitor aus. Als Datenübertragungsrate haben wir 115200 gewählt. Da dies nicht der Standardwert ist, muss dieser am seriellen Monitor eingestellt werden.

#include <Wire.h>
#include "Adafruit_VL6180X.h"

Adafruit_VL6180X vl = Adafruit_VL6180X();

void setup() 
{
  Serial.begin(115200);
  while (!Serial) // Warten, bis die serielle Verbindung aufgebaut ist
  {
  delay(1); // Die Pause wird immer wieder aufgerufen, solange die serielle Verbindung nicht aufgebaut ist.
  } 
  vl.begin();
}

void loop() 
{
  uint8_t Entfernung = vl.readRange(); // Unter "Entfernung" wird der Messwert für die Entfernung erfasst.
  uint8_t status = vl.readRangeStatus(); // Der Sensorstatus wird gelesen. 
  if (status == VL6180X_ERROR_NONE) { // Wenn der Sensorstatus keine Fehler enthält, folgt der Inhalt der IF-Schleife
    Serial.print("Entfernung in mm: "); Serial.println(Entfernung);  //Ausgabe der Entfernung am seriellen Monitor
  }
  delay(100); // Das delay sorgt dafür, dass die Werte am seriellen Monitor lesbar bleiben. In Anwendungen zur Messwerterfassung sollte man auf solche Pausen verzichten.
}

Das Ergebnis sollte bei richtigem Sketch und fehlerfreier Verkabelung wie im folgenden Bild aussehen. Es muss sich dann jedoch auch ein Objekt im Messbereich befinden.

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft bis zu 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 2.000 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE