Der VL53L0X ist eine neue Generation von ToF Sensoren, die genaue Distanzmessungen bis 2m erlaubt.
Der VL53L0X wird direkt an eine I2C-Schnittstelle angeschlossen.
Zynq7000 | VL53L0X |
---|---|
MIO10 | SCL |
MIO11 | SDA |
<FlinkGPIO channel> | XSHUT |
3.3V | Vcc |
GND | GND |
Die Sensoren können mit Hilfe des vl53l0x_helper
Treibers im driver Repository initialisiert werden.
Der XSHUT Pin jedes VL53L0X Sensor benötigt einen eigenen FlinkGPIO
Kanal.
Die Pins/Kanäle sind init_vl53l0x
als Liste von int
s (Ganzzahlen) zu übergenen. Die Anzahl Sensoren leitet sich aus der Anzahl an GPIO Kanälen ab, mit denen init_vl53l0x
aufgerufen wird. init_vl53l0x
gibt die initialisierten Sensoren als Liste zurück. Das Aufrufen von get_distance()
auf einem Listenelement liefert den aktuellen Messwert des entsprechenden Sensors.
Beispiel: sensors = init_vl53l0x([0, 1])
initialisiert 2 Sensoren. sensors[0]
verwendet FlinkGPIO
Kanal 0 und sensors[1]
verwendet FlinkGPIO
Kanal 1. sensors[0].get_distance()
liefert den aktuellen Messwert des ersten Sensors (GPIO 0), während sensors[1].get_distance()
den Messwert des 2. Sensors (GPIO 1) zurück gibt.
Komplettes Beispiel:
from vl53l0x_helper import init_vl53l0x # initialize 2 ToF sensors conected to FlinkGPIO channels 0 and 1 tofs = init_vl53l0x([0, 1]) # print measurements for _ in range(1, 11): # combine all measurements into 1 string to print everything on one line line = " ".join(["% d" % tof.get_distance() for tof in tofs]) print("distance %s" % line)
Der VL53L0X kann mit dem MPC55 und dem Zynq7000 verwendet werden. Es wird jedoch ein zweiter Mikrocontroller zum Anschluss an diesen benötigt. Die OST stellt eine fertige Firmware für das Nucleo STM32L432KC Board zur Verfügung. Es können maximal 4 Sensoren angesteuert werden.
MPC555 | STM32L432KC |
---|---|
SCK | PA1 (A1) |
MISO | PA11 (D10) |
MOSI | PA7 (A6) |
PCS 2 | PB0 (D3) |
GND | GND |
Zynq7000 | STM32L432KC | Funktion |
---|---|---|
MIO 12 | PA1 (A1) | CLK |
MIO 11 | PA11 (D10) | MISO |
MIO 10 | PA7 (A6) | MOSI |
MIO 13 | PB0 (D3) | CS |
GND | GND | GND |
Anmerkung: die relevanten Pins des STM32L432KC sind 5V tolerant, es sind also keine Pegelwandler nötig.
STM32L432KC | VL53L0X |
---|---|
PA9 (D1) | SCL |
PA10 (D0) | SDA |
PA3 (A2) | XSHUT (Sensor 1) |
PA4 (A3) | XSHUT (Sensor 2) |
PA5 (A4) | XSHUT (Sensor 3) |
PA6 (A5) | XSHUT (Sensor 4) |
GND | GND |
Die VL53L0X Sensoren benötigen eine Versorgungsspannung von 3.3V. Hier bieten sich 2 Möglichkeiten an:
Das Nucleo STM32L432KC Board kann mit 3.3V oder 5V gespeist werden.
Wird das Nucleo STM32L432KC Board per USB mit dem PC verbunden, meldet es sich als USB Massenspeicher an. Die Firmware kann einfach in Form der .bin Datei auf das Board kopiert werden. Das Board durchläuft automatisch einen Reset und ist nun programmiert.
Die Firmware kann hier bezogen werden.
Der Deep Treiber ist unter org.deepjava.runtime.mpc555.driver.VL53L0X
oder org.deepjava.runtime.zynq7000.driver.VL53L0X
zu finden.
Der/Die Sensor(en) werden im Konstruktor
VL53L0X(int numSensors)
initialisiert.
Beispiele:
4 Sensoren initialisieren:
VL53L0X tof = new VL53L0X(4);
2 Sensoren initialisieren:
VL53L0X tof = new VL53L0X(2);
Zum Lesen der Sensorwerte wird die read() Methode verwendet. Diese gibt ein Array mit so vielen Elementen zurück, wie Sensoren im Konstruktor initialisert wurden. Die Messwerte sind vom Typ short (16bit Ganzzahl).
data = tof.read();
Ist der Messbereich des Sensors überschritten, wird für diesen Sensor von 16000 zurückgeliefert. Bei einer fehlerhaften Messung wird ein Wert ≤ 0 zurückgeliefert.
Nach der Initialisierung oder einem reset der Sensoren sollte vor dem Auslesen mit der Methode resetDone() überprüft werden, ob die Sensoren bereit sind.
// Nur MPC555 if (tof.resetDone()) { short[] data = tof.read(); }
Die reset() Methode veranlasst einen Reset die STM32L432KC und der Vl53L0X Sensoren. Ein Reset kann mehrere Sekunden dauern. Mit resetDone() kann überprüft werden, ob der Reset abgeschlossen ist.
Das Nucleo STM32L432KC bietet eine virtuelle serielle Schnittstelle über USB, wenn es mit einem PC verbunden ist. Über diese werden Debuginformationen über den internen Zustande des Mirkocontrollers sowie die Messwerte ausgegeben. Funktioniert die Kommunikation nicht korrekt, kann sich hier ein Überblick verschafft werden, wo die Ursache liegen könnte.
Des Weiteren leuchet LD3 (grüne LED unten links, wenn USB Port oben), wenn der STM32L432KC auf einen SPI Transfer wartet und erlischt während dem Messvorgang. Diese sollte im normalen Betrieb blinken. Das GPIO Signal der LED ist auf Pin D13 am Board zu finden.