Composant · Capteur
VL53L0X ToF Sensor
Le VL53L0X mesure au laser, pas au son — un faisceau étroit, rapide et précis au millimètre en I²C pour les robots qui exigent une télémétrie fine.
Présentation
Le VL53L0X mesure la distance comme un télémètre laser — avec de la lumière au lieu du son. Il tire une impulsion laser infrarouge invisible et chronomètre l’aller-retour, donnant une lecture étroite, rapide et précise au millimètre en I²C. Là où un HC-SR04 sent un large cône avec quelques centimètres de dispersion, le VL53L0X sent un point étroit avec précision — le capteur à prendre quand « à peu près à quelle distance » ne suffit pas.
Fonctionnement
Le boîtier contient deux ouvertures : un émetteur laser et un récepteur SPAD (un détecteur monophotonique). Le capteur tire une impulsion de lumière infrarouge à 940 nm, le récepteur chronomètre le retour de la réflexion, et — la lumière voyageant à une vitesse connue — ce temps se convertit en distance. Toute la temporisation se passe sur puce ; votre microcontrôleur lit juste la valeur en millimètres en I²C. Les compromis face au son sont exactement ceux pesés dans ultrason vs capteurs temps de vol.
Quand l’utiliser
Prenez un VL53L0X quand un robot a besoin de télémétrie précise à faisceau étroit :
- Distances proches et exactes — juger un passage précis, suivre un mur à un écart fixé, ou un arrêt précis.
- Obstacles petits ou fins — un pied de table ou un fil que le large cône ultrason étalerait ou manquerait.
- Boucles rapides — jusqu’à 50 Hz de mises à jour pour une commande réactive.
Pour une détection économique et indulgente « y a-t-il quelque chose devant ? » sur une zone plus large, le HC-SR04 est le meilleur rapport — et les idées de filtrage dans lire le HC-SR04 valent pour tout flux de télémétrie, laser inclus.
Câblage et pièges
- I²C, et collision d’adresses. Tout VL53L0X partage une adresse par défaut — utilisez la broche XSHUT pour les démarrer un par un et réassigner les adresses pour en faire marcher plusieurs.
- Attention à la lumière ambiante. Le plein soleil (beaucoup d’infrarouge) et les surfaces sombres ou miroirs raccourcissent la portée utilisable.
- Gardez la fenêtre propre. Une trace de doigt ou de la poussière sur l’ouverture disperse le faisceau et corrompt les lectures.
- Respectez la limite proche (~5 cm) ; comme tout capteur de distance, il a une zone aveugle trop près pour mesurer.
Brochage
| Broche | Nom | Rôle |
|---|---|---|
| 1 | VIN | 3–5 V. La carte régule vers le 2,8 V du capteur |
| 2 | GND | Masse |
| 3 | SCL | Horloge I²C |
| 4 | SDA | Données I²C |
| 5 | GPIO1 | Sortie d’interruption — se déclenche quand une mesure est prête |
| 6 | XSHUT | Extinction, active au bas. Tirez au bas pour couper le capteur entièrement |
XSHUT est la broche qui rend possibles plusieurs capteurs, et elle vaut d’être comprise
avant d’acheter le second.
Faire marcher plusieurs capteurs VL53L0X
Tout VL53L0X démarre à la même adresse, 0x29, sans broches de sélection d’adresse.
Mettez-en deux sur un bus et les deux répondent ensemble, ce qui corrompt toute transaction. L’adresse peut
être changée en logiciel, mais le changement est volatil — perdu à chaque cycle d’alimentation.
La solution standard utilise XSHUT pour les démarrer un par un :
#include <Wire.h>
#include <VL53L0X.h>
const int XSHUT[] = {4, 5, 6}; // one GPIO per sensor
const uint8_t ADDR[] = {0x30, 0x31, 0x32};
VL53L0X sensor[3];
void setup() {
Wire.begin();
// 1. Hold every sensor in reset.
for (int i = 0; i < 3; i++) { pinMode(XSHUT[i], OUTPUT); digitalWrite(XSHUT[i], LOW); }
delay(10);
// 2. Release one at a time and give each a new address before the next wakes.
for (int i = 0; i < 3; i++) {
digitalWrite(XSHUT[i], HIGH);
delay(10);
sensor[i].init();
sensor[i].setAddress(ADDR[i]); // now it is off 0x29 and the next can boot
sensor[i].setTimeout(500);
}
}
Deux détails qui piègent : les broches doivent être pilotées au BAS pour la réinitialisation puis relâchées,
et toute la séquence doit tourner de nouveau après chaque cycle d’alimentation car les adresses ne
persistent pas. Certaines cartes tirent XSHUT au haut avec une résistance embarquée, donc laisser simplement la broche
flottante laisse le capteur activé.
Budget de temporisation : le cadran précision/vitesse/portée
Le VL53L0X a un réglage qui compte plus que tous les autres, et la plupart des exemples ne le touchent jamais. Le budget de temporisation est le temps que le capteur peut intégrer des photons pour une seule mesure, et il échange trois choses l’une contre l’autre :
| Budget de temporisation | Taux de mise à jour | Portée typique | Idéal pour |
|---|---|---|---|
| 20 ms | ~50 Hz | ~0,8 m | Boucles de commande rapides, courte portée |
| 33 ms (défaut) | ~30 Hz | ~1,2 m | Usage général |
| 66 ms | ~15 Hz | ~1,7 m | Meilleure précision à distance |
| 200 ms | ~5 Hz | ~2 m | Portée maximale, mesure statique |
sensor.setMeasurementTimingBudget(20000); // microseconds
Il y a aussi des modes longue portée et haute précision qui ajustent le seuil de taux de signal et les périodes d’impulsion. La règle pratique : si le capteur ne porte pas assez loin, dépensez plus de temps avant de blâmer le capteur. Un budget de 200 ms double vraiment la portée utilisable par rapport à 20 ms.
Code minimal fonctionnel
#include <Wire.h>
#include <VL53L0X.h>
VL53L0X sensor;
void setup() {
Serial.begin(115200);
Wire.begin();
if (!sensor.init()) {
Serial.println("VL53L0X not found"); // check wiring and XSHUT
while (1) {}
}
sensor.setTimeout(500);
sensor.setMeasurementTimingBudget(33000);
sensor.startContinuous();
}
void loop() {
uint16_t mm = sensor.readRangeContinuousMillimeters();
if (sensor.timeoutOccurred()) {
Serial.println("timeout");
} else if (mm >= 8190) {
Serial.println("out of range"); // 8190/8191 mean "no valid target"
} else {
Serial.println(mm);
}
delay(20);
}
8190 et 8191 ne sont pas des distances. C’est la façon du capteur de dire qu’il n’a eu aucun retour utilisable — soit rien n’est là, soit la cible est trop sombre ou trop loin. Du code traitant 8191 comme 8,19 mètres se comportera bizarrement dans une pièce vide ; du code le traitant comme zéro fera un arrêt d’urgence dans une pièce vide.
Ce qu’il ne peut pas voir
Le VL53L0X échoue sur presque exactement l’ensemble opposé de surfaces à un capteur ultrason, ce qui est toute la base du choix entre eux.
| Condition | Ce qui se passe | Pourquoi |
|---|---|---|
| Surfaces mates noires | La portée chute fortement, souvent au tiers | Très peu de la lumière 940 nm revient |
| Miroirs et métal poli | Lit loin, ou rien | Le faisceau se réfléchit en spéculaire, comme la lumière sur du verre |
| Plein soleil direct | La portée s’effondre | Le soleil est plein d’infrarouge 940 nm, noyant le retour |
| Verre | Lit ce qui est derrière, ou le verre, de façon imprévisible | Transmet en partie, réfléchit en partie |
| Plus près que ~3–5 cm | Peu fiable | Sous la distance minimale de travail du capteur |
| Au-delà de ~1,2 m aux réglages par défaut | Expire | Montez le budget de temporisation avant de le déclarer en panne |
Celle du soleil vaut d’être soulignée car la plus surprenante. Un VL53L0X marchant parfaitement en intérieur peut être presque inutile dans une véranda ensoleillée, et la panne est progressive — la portée raccourcit plutôt que les lectures devenant évidemment fausses.
Dépannage
| Symptôme | Cause probable | Solution |
|---|---|---|
init() échoue |
Câblage, ou XSHUT maintenue au bas |
Scannez le bus pour 0x29 ; vérifiez que XSHUT est haute ou flottante-haute |
| Deux capteurs, un seul marche | Les deux sur 0x29 |
Utilisez la séquence XSHUT ci-dessus à chaque démarrage |
| Adresses perdues après un cycle d’alimentation | Volatiles par conception | Rejouez la séquence d’assignation dans setup() |
| Lit 8190/8191 constamment | Aucun retour valide | Vérifiez couleur, distance de la cible et lumière ambiante |
| Portée bien plus courte que 2 m | Budget de temporisation par défaut | Montez-le à 100–200 ms |
| Marche dedans, échoue dehors | Infrarouge ambiant du soleil | Ombrez le capteur, ou utilisez l’ultrason dehors |
| Les lectures dérivent en minutes | Fenêtre salie, ou température | Nettoyez l’ouverture ; lancez l’étalonnage du capteur |
| Valeurs aberrantes occasionnelles | Bord d’une cible, ou réflexion partielle | Filtrez la médiane du flux, comme pour tout capteur de distance |
VL53L0X ou autre chose ?
| Pièce | Portée | Notable | Prenez-le quand |
|---|---|---|---|
| VL53L0X | 5 cm – 2 m | Le défaut économique et omniprésent | Télémétrie précise courte portée en intérieur |
| VL53L1X | 4 cm – 4 m | Double portée, région d’intérêt programmable | Il faut plus de portée, ou rétrécir le champ en logiciel |
| VL6180X | 5 mm – 20 cm | Très courte portée, sent aussi la lumière ambiante | Détection d’écart et proximité à l’échelle centimétrique |
| HC-SR04 | 2 cm – 4 m | Son, large cône, sans bibliothèque | Détection d’obstacles économique et indulgente ; voit les surfaces sombres |
| Sharp GP2Y0A21 | 10–80 cm | Triangulation IR analogique, une broche ADC | Pas d’I²C disponible, et une sortie non monotone acceptable |
Le VL53L1X vaut d’être signalé : c’est une amélioration directe à presque tout égard, et sa région d’intérêt programmable permet de rétrécir le champ de vision en logiciel — dirigeant effectivement le faisceau sans bouger le capteur. Si vous choisissez aujourd’hui plutôt qu’utiliser ce que vous avez, c’est généralement le meilleur achat.
Explorer le graphe
Utilisé dans ces réalisations
Projets, parcours d'apprentissage et simulateurs qui intègrent le composant VL53L0X ToF Sensor.
Comparer
Alternatives
Questions
FAQ : VL53L0X ToF Sensor
Quelle est la distance maximale du VL53L0X ?
Environ 2 mètres en mode standard — certaines cartes échangent le taux de mise à jour contre une portée plus longue. Il est le plus précis dans la bande proche ; au-delà de quelques mètres, ou en infrarouge ambiant vif comme le soleil, les lectures deviennent peu fiables. Il a aussi une zone aveugle proche sous environ 5 cm.
Quelles sont les limites du VL53L0X ?
Sa portée est courte (~2 m) face à un capteur ultrason, le plein soleil et les surfaces sombres ou miroirs la réduisent encore, et tout capteur sort avec la même adresse I²C — en faire marcher plusieurs demande donc l'astuce XSHUT pour réassigner les adresses. Gardez aussi la petite fenêtre propre ; la poussière disperse le faisceau.
Le VL53L0X marche-t-il sur surfaces noires ?
Mal. Les surfaces sombres et mates absorbent le laser infrarouge, donc la réflexion est faible et la portée utilisable chute fortement — un mur noir se lit bien plus près de la limite du capteur qu'un blanc. Les surfaces brillantes ou miroirs le trompent aussi en renvoyant le faisceau loin du récepteur.
Qu'est-ce que le capteur de distance laser VL53L0X ?
Un minuscule capteur à temps de vol qui mesure la distance avec de la lumière au lieu du son. Il tire une impulsion laser infrarouge invisible à 940 nm et chronomètre le retour de la réflexion, donnant une lecture étroite, rapide et précise au millimètre en I²C.
Temps de vol vs ultrason — lequel est meilleur ?
Un capteur à temps de vol comme le VL53L0X a un faisceau étroit et une précision millimétrique, donc il sent un point précis et les petits objets qu'un capteur ultrason manquerait. Le HC-SR04 est moins cher, porte plus loin, et son large cône aide à ne pas rater d'obstacles. Utilisez le temps de vol pour la précision, l'ultrason pour une détection économique et indulgente.
Pour aller plus loin