Time-of-Flight (ToF) Sensor
![Time of Flight (ToF Sensor)](/assets/images/tofsensor-f081766d17c825dff80a339f9b54ebe3.png)
Time of Flight (ToF Sensor)
Time-of-Flight (ToF)-Kameras sind in der Lage, hochauflösende Tiefenbilder zu erzeugen. Diese Sensoren senden Infrarotlicht aus und messen die Zeit, die benötigt wird, bis das Licht wieder zurückreflektiert wird. Unser ToF-Sensor ist ein Multizone-Sensor, der die Entfernung nicht nur an einem Punkt, sondern in mehreren Zonen (8x8 Zonen) misst. Laut Hersteller sind Messungen bis zu 400 cm möglich. Die maximale messbare Distanz variiert jedoch je nach aktuellen Lichtverhältnissen (bei mehr Sonnenlicht wird eine geringere Distanz gemessen). Die Framerate kann bis zu 60 Hz betragen.
Technische Informationen
- VL53L8CX ToF Sensor
Anschluss
![i2c port](/assets/images/i2c-wire-port-83234b28690a310b2affd9bf58facecd.png)
Die Komponente wird am I2C Port angeschlossen.
Programmierung (Arduino)
Für die Programmierung des Time-of-Flight Sensors muss zusätzlich noch diese Library in Arduino installiert werden. Dieser Sketch gibt die minimale Distanz in cm im Seriellen Monitor aus, die der Sensor gemessen hat.
#include <SPI.h>
#include <Wire.h>
#include <vl53l8cx_class.h>
VL53L8CX sensor_vl53l8cx_top(&Wire, -1, -1);
float oldVl53l8cxMin = -1.0;
// Function to get the minimum distance measured by the ToF sensor (VL53L8CX)
// Funktion um die minimale Distanz gemessen durch den ToF Sensor (VL53L8CX) zu erhalten
float getVl53l8cxMin() {
VL53L8CX_ResultsData Results;
uint8_t NewDataReady = 0;
uint8_t status;
status = sensor_vl53l8cx_top.vl53l8cx_check_data_ready(&NewDataReady);
if ((!status) && (NewDataReady != 0)) {
sensor_vl53l8cx_top.vl53l8cx_get_ranging_data(&Results);
float min = 10000.0;
for(int i = 0; i < VL53L8CX_RESOLUTION_8X8*VL53L8CX_NB_TARGET_PER_ZONE; i++) {
if((&Results)->target_status[i]!=255){
float distance = (&Results)->distance_mm[i];
if(min > distance) {
min = distance;
}
}
}
oldVl53l8cxMin = (min==10000.0) ? 0.0 : min;
}
return oldVl53l8cxMin;
}
void setup(){
Serial.begin(9600);
Wire.begin();
Wire.setClock(1000000); //Sensor has max I2C freq of 1MHz
sensor_vl53l8cx_top.begin();
sensor_vl53l8cx_top.init_sensor();
sensor_vl53l8cx_top.vl53l8cx_set_ranging_frequency_hz(30);
sensor_vl53l8cx_top.vl53l8cx_set_resolution(VL53L8CX_RESOLUTION_8X8);
sensor_vl53l8cx_top.vl53l8cx_start_ranging();
}
void loop(){
Serial.println(getVl53l8cxMin());
}
Programmierung (Blockly)
In Blockly kann der Sensor über folgenden Block ausgelesen werden: