Bei dem Sensor handelt es sich um einen Klasse-1-Laser, welcher im Infrarotbereich strahlt, daher kann man das Laserlicht nicht sehen und sollte immer einen Mindestabstand vom Sensor von 30cm einhalten. Wie in der folgenden Abbildung zu sehen ist, besitzt der Laserstrahl aber eine Aufweitung von 35°, daher ist eine Gefährdung für die Augen nur in unmittelbarer Nähe zur Emitteröffnung gegeben.
Der VL53L0X sendet 940nm-Lichtpulse (Infrarot), welche an entfernten Gegenständen reflektiert und dann
vom Sensor detektiert werden können. Die Zeit zwischen dem Aussenden und dem Empfangen des Lichtpulses
wird gemessen und dann entsprechend mit der Lichtgeschwindigkeit verrechnet. Daraus ergibt sich dann
die Entfernung zwischen dem Sensor und dem Gegenstand, der das Licht reflektiert hat.
Der Messbereich liegt laut Datenblatt zwischen 30mm und 2000mm.
VL53L0X | Beschreibung | Arduino Uno |
---|---|---|
VCC | Spannungsversorgung | 5V |
GND | Masse | GND |
SCL | I²C-Clock | A5 |
SDA | I²C-Data | A4 |
GPIO1 | Dieser Pin zeigt an, ob Daten am Sensor bereit stehen. Ist nützlich für kontinuierliche Messungen. | |
XSHUT | Bringt den Sensor in den "shutdown"-Modus, wenn LOW anliegt. |
Vorsicht: der VL53L0X-Chip wird laut Datenblatt mit 2,8V betrieben, daher sollte darauf geachtet werden, dass an VCC bzw. GPIO1 und XSHUT jeweils eine korrekte Spannung anliegt!
Der Aufbau für den Neopixel-Ring siehe bei WS2812.
#include "Adafruit_NeoPixel.h"
#include "Adafruit_VL53L0X.h"
#define PIN 8 // Digital PIN used on the Arduino
#define NUMPIXELS 16 // number of LEDs in the ring
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
Adafruit_NeoPixel ring = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
byte ledIndex = 0;
void setup()
{
Serial.begin(9600);
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(true);
}
ring.begin();
}
void loop()
{
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!
if (measure.RangeStatus != 4) { // phase failures have incorrect data
Serial.println(String(measure.RangeMilliMeter) + " mm");
ledIndex = (byte)map(measure.RangeMilliMeter, 5, 80, 0, 15);
} else {
Serial.println("-out of range-");
}
for (byte i = 0; i < NUMPIXELS; i++) {
ring.setPixelColor(i, ring.Color(0, 0, 0));
}
ledIndex = constrain(ledIndex, 0, 15);
ring.setPixelColor(ledIndex, ring.Color((15 - ledIndex) * 3, ledIndex * 3, 0));
ring.show();
delay(100);
}
zurück