tof_distance.ino
La Nicla Vision embarque un capteur de distance Time-of-Flight (famille VL53Lx d’après docs-db, référence exacte non publiée). Ce sketch le pilote en mesure continue et affiche la distance en millimètres — niveau de cuve, présence, geste à distance.
Matériel requis
Une Arduino Nicla Vision (STM32H7 double cœur M7+M4, 23×23 mm) avec caméra GC2145 2 MP, IMU LSM6DSOX, micro PDM, capteur ToF (famille VL53Lx), module sans fil ESP32 (Wi-Fi/BLE) et LED RGB (LEDR=23, LEDG=24, LEDB=25). La carte seule ; le ToF est soudé sur la carte avec sa fenêtre en façade. Aucun module externe nécessaire.
Câblage
Aucun câblage : le ToF est sur l’I2C interne. Pour un VL53L1X externe, le bus Wire/Wire1 du connecteur fonctionne avec le même code.
Fonctionnement
VL53L1X.init() détecte le capteur (sinon tenter la lib VL53L0X — la famille exacte n’est pas garantie) ; startContinuous cadence les mesures et readRange renvoie les millimètres, portée utile ~4 m en mode long range.
Exécution
Programmation via Arduino IDE (core ArduinoCore-mbed, target NICLA_VISION) sur le port USB-C ; bibliothèques Camera, PDM, Arduino_LSM6DSOX, WiFiNINA et ArduinoBLE fournies.
Variantes
Changer le timing (15/30/50 ms) et le mode (courte/moyenne/longue portée), moyenner sur N mesures pour stabiliser, ou transformer la distance en niveau de remplissage 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);
}