LBotics.at

Time-of-Flight (ToF) Abstandssensoren messen die Distanz zu einem Objekt, indem sie die Zeit messen, die ein Lichtimpuls benötigt, um vom Sensor zum Objekt und zurück zu gelangen. Sensoren vom Typ VL53L0X können Entfernungen bis zu zwei Metern messen. Diese kommunizieren mit einem Mikrocontroller über I2C.

Der 8 Kanal ToF Sensor des Kepler OpenBOT Robotik-Systems besteht aus einem Sensorboard an das bis zu 8 einzelne ToF Sensoren angeschlossen werden können. Das Sensorboard verfügt über ein Arduino Nano Board mit dem die LV53L0X Sensoren über I2C kommunizieren. Die Software des Arduino Nano vergibt beim Start den einzelnen Sensoren automatisch unterschiedliche Adressen und liest im Anschluss laufend die aktuellen Werte der angeschlossenen Sensoren ein.

An den Buchsen auf der linken Seite wird die benötigte Anzahl an einzelnen ToF Sensoren angeschlossen. Dabei ist zu beachten, dass immer bei der Buchse Sensor 1 begonnen wird und die nächsten Sensoren direkt daneben angesteckt werden. Die nicht benötigten Buchsen bleiben einfach leer. Die Buchse auf der rechten Seite dient dazu, um das Sensorboard an eine der beiden SPI Schnittstellen des OpenBOT Mainboards anzuschließen.

Programmbeispiel - Einlesen von Werten des 8 Channel ToF Abstandssensors

Das Sensorboard wird an die SPI1 Schnittstelle des OpenBOT Mainboards angeschlossen. Am Sensorboard werden 5 ToF Sensoren an die Buchsen Sensor 1 bis Sensor 5 angeschlossen. Am Display sollen laufend die aktuellen, gemessenen Abstandswerte der 5 Sensoren angezeigt werden. Dazu muss zunächst die Funktion READ_SPI_MULTI_LV53L0X(port, count) aufgerufen werden. Beim Aufruf dieser Funktion wird angegeben, an welchem SPI-Port das Sensorboard angeschlossen sind und wie viele Sensoren dort angesteckt sind. Nach dem Aufruf dieser Funktion stehen die Abstandswerte in mm im Array DISTANCE[x] zur Verfügung.

#include "KeplerOpenBOT.h"

void setup()
{
  KeplerOpenBOT_INIT();
  WRITE_LCD_CONTRAST(176);
}

void loop()
{
  READ_SPI_MULTI_LV53L0X(1,5);

  WRITE_LCD_INT(1,1,DISTANCE[0],4);
  WRITE_LCD_INT(1,2,DISTANCE[1],4);
  WRITE_LCD_INT(1,3,DISTANCE[2],4);
  WRITE_LCD_INT(1,4,DISTANCE[3],4);
  WRITE_LCD_INT(1,5,DISTANCE[4],4);
}
Erklärungen zu diesem Programmbeispiel

Zeile 11: READ_SPI_MULTI_LV53L0X(1,5);

Mit der Funktion READ_SPI_MULTI_LV53L0X(port, count) werden die aktuellen Abstandswerte der einzelnen ToF Sensoren vom Sensorboard ausgelesen.

Mit dem Parameter port wird der gewünschte SPI-Port (SPI1 oder SPI2) festgelegt: 1, 2

Mit dem Parameter count wird angegeben, wie viele einzelne ToF Sensoren an das Sensorboard (beginnend bei Buchse 1!) angeschlossen sind: 1, 2, ..., 8

Zeile 13: WRITE_LCD_INT(1, 1, DISTANCE[0], 4);

Im Array DISTANCE[x] werden beim Aufruf der Funktion READ_SPI_MULTI_LV53L0X(port, count) die Abstandswerte der einzelnen ToF Sensoren abgelegt.

Die Indizes x für laufen dabei von 0 bis 7. DISTANCE[0] enthält den Wert von Sensor 1, DISTANCE[1] enthält den Wert von Sensor 2, usw.