tof_distance.ino

Arduino Nicla Vision · Archivo : tof_distance.ino · Lenguaje : Arduino · Uso : Mesurer une distance avec le capteur ToF

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);
}

← Volver a la ficha