tof_distance.ino
La Nicla Vision lleva un sensor de distancia Time-of-Flight (familia VL53Lx según docs-db, referencia exacta no publicada). Este sketch lo ejecuta en modo continuo e imprime milímetros: nivel de depósito, presencia, gesto sin contacto.
Hardware
Una Arduino Nicla Vision (STM32H7 M7+M4, 23×23 mm) con cámara GC2145, IMU LSM6DSOX, micrófono PDM, ToF (VL53Lx), módulo ESP32 Wi-Fi/BLE y LED RGB (LEDR/G/B). La placa sola; el ToF va soldado con su ventana al frente. Ningún módulo externo necesario.
Cableado
Sin cableado: el ToF está en el I2C interno. Para un VL53L1X externo, el bus Wire/Wire1 del conector corre el mismo código.
Funcionamiento
VL53L1X.init() detecta el sensor (si no, probar la lib VL53L0X: la familia exacta no está garantizada); startContinuous marca el ritmo y readRange devuelve los milímetros, alcance útil ~4 m en modo largo.
Ejecución
Programación desde Arduino IDE (core ArduinoCore-mbed) por USB-C; librerías Camera, PDM, LSM6DSOX, WiFiNINA y ArduinoBLE.
Variantes
Cambiar el timing (15/30/50 ms) y el modo (corto/medio/largo), promediar N medidas para estabilizar, o convertir la distancia en nivel de llenado en %.
tof_distance.ino
// Capteur de distance Time-of-Flight embarqué (famille VL53Lx,
// référence exacte non listée par la doc Arduino — la bibliothèque
// ST VL53L1X fonctionne sur ce bus I2C interne).
// Bibliothèque : ST STM32duino VL53L1X + VL53L0X selon le cas.
#include <Wire.h>
#include <VL53L1X.h>
VL53L1X tof;
void setup() {
Serial.begin(115200);
Wire.begin();
tof.setTimeout(500);
if (!tof.init()) {
Serial.println("ToF absent (essayer la lib VL53L0X)");
while (1) { ; }
}
tof.startContinuous(); // mesure en continu, 50 ms
Serial.println("ToF prêt — approchez la main");
}
void loop() {
uint16_t mm = tof.readRangeContinuousMillimeters();
if (tof.timeoutOccurred()) {
Serial.println("Timeout ToF");
} else {
Serial.print("Distance : ");
Serial.print(mm);
Serial.println(" mm");
}
delay(100);
}