Utilisation d’un télémètre laser VL53L0X avec Arduino
Dans ce tutoriel, nous allons explorer comment utiliser le télémètre laser VL53L0X avec un Arduino. Cet appareil vous permet de mesurer les distances avec précision à l’aide d’un laser, ce qui le rend idéal pour diverses applications telles que la robotique et l’automatisation. À la fin de ce tutoriel, vous disposerez d’une configuration fonctionnelle capable de mesurer les distances et de les afficher sur le moniteur série.

Pour notre projet, nous utiliserons la bibliothèque de VL53L0X Adafruit, qui simplifie le processus d’interfaçage avec le capteur. Cette bibliothèque fournit les fonctions nécessaires pour initialiser le capteur, lire les mesures et gérer les erreurs qui peuvent survenir. Vous pouvez vous référer à la vidéo pour un guide visuel sur la configuration (en vidéo à 02:15).
Le matériel expliqué
Les principaux composants de ce projet comprennent le télémètre laser VL53L0X et la carte Arduino. Le VL53L0X est un capteur de temps de vol qui utilise un laser pour mesurer des distances allant jusqu’à 2 mètres avec une grande précision. Il fonctionne via le protocole I2C, permettant une communication facile avec l’Arduino.
La carte Arduino sert de microcontrôleur qui traite les données de la VL53L0X. Il envoie des commandes au capteur et reçoit les mesures de distance, qui peuvent ensuite être affichées ou utilisées dans d’autres applications. Un câblage correct est crucial pour garantir des lectures précises du capteur.
Détails de la fiche technique
| Fabricant | STMicroelectronics |
|---|---|
| Numéro de pièce | VL53L0X |
| Tension de fonctionnement | 2,6 V à 3,5 V |
| Gamme | 30 mm à 2000 mm |
| Exactitude | ±3 % typique |
| Interface | I2C |
| Plage de température | -40 °C à +85 °C |
| Consommation de courant | <1 mA (veille), 20 mA (actif) |
| Colis | VFLGA-8 |
- Assurez-vous que le capteur est correctement alimenté (2,6 V à 3,5 V).
- Maintenez les paramètres d’adresse I2C corrects pour éviter les conflits.
- Gardez le capteur propre pour des mesures de distance précises.
- Utilisez des résistances de traction appropriées sur les lignes I2C si nécessaire.
- Évitez la lumière directe du soleil sur le capteur pour des lectures fiables.
Instructions de câblage

Pour câbler le capteur VL53L0X à l’Arduino, connectez la broche VCC du capteur à la broche 5V de l’Arduino. La broche GND doit être connectée à la terre (GND) de l’Arduino. Pour la communication I2C, connectez la broche SDA de l’VL53L0X à la broche A4 de l’Arduino, et connectez la broche SCL à la broche A5. Si vous utilisez un autre modèle Arduino, reportez-vous aux affectations de broches SDA et SCL spécifiques à cette carte.
Par exemple, sur l’Arduino Mega, vous connecteriez SDA à la broche 20 et SCL à la broche 21. Assurez-vous que toutes les connexions sont sécurisées pour éviter les problèmes de communication. Si le capteur ne répond pas, vérifiez le câblage et assurez-vous que l’Arduino est correctement alimenté.
Exemples de code et procédure pas à pas
Vous trouverez ci-dessous un extrait de la fonction de configuration qui initialise le capteur de VL53L0X :
void setup() {
Serial.begin(9600);
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
}Ce code initialise la communication série et tente de démarrer le capteur VL53L0X. Si le capteur ne démarre pas, il imprimera un message d’erreur et arrêtera le programme.
Ensuite, voici un extrait de la fonction de boucle qui lit la mesure de distance :
void loop() {
VL53L0X_RangingMeasurementData_t measure;
lox.rangingTest(&measure, false);
if (measure.RangeStatus != 4) {
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}Ce bloc lit en permanence la mesure de distance du capteur et l’imprime sur le moniteur série. Si la mesure est hors plage, il l’indique en conséquence.
Démonstration / À quoi s’attendre
Lorsque vous exécutez le programme, vous devriez voir les mesures de distance affichées sur le moniteur série. Les lectures doivent être mises à jour toutes les 100 millisecondes. Si le capteur pointe vers un objet, il affichera la distance en millimètres. Si l’objet est hors de portée, il l’indiquera également. Assurez-vous de tester le capteur dans sa plage spécifiée pour des résultats optimaux (en vidéo à 10:00).
Horodatages vidéo
- 00:00-Introduction
- 02:15- Configuration du câblage
- 05:30- Explication du code
- 10:00-Manifestation
/*
* Cet exemple montre comment utiliser le mode continu pour effectuer des mesures de portée avec le VL53L0X.
*
* Obtenez ce code et d'autres codes Arduino sur Robojax.com. Apprenez Arduino étape par étape dans un cours structuré avec tout le matériel, des schémas de câblage et des bibliothèques, le tout à un seul endroit.
*
* Si vous avez trouvé ce tutoriel utile, s'il vous plaît, soutenez-moi afin que je puisse continuer à créer du contenu comme celui-ci.
*
* ou faites un don via PayPal http://robojax.com/L/?id=64
*
* Ce code est "EN L'ÉTAT" sans garantie ni responsabilité. Libre d'utilisation tant que vous conservez cette note intacte. Ce code a été téléchargé depuis Robojax.com. Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, ou (à votre convenance) toute version ultérieure.
*
* Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIABILITÉ ou d'ADÉQUATION À UN BUT PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.
*
* Vous devriez avoir reçu une copie de la Licence Publique Générale GNU avec ce programme. Sinon, consultez <https://www.gnu.org/licenses/>.
*
* Droits d'auteur (c) 2015, Majenko Technologies Tous droits réservés.
*
* La redistribution et l'utilisation sous forme source et binaire, avec ou sans modification, sont autorisées à condition que les conditions suivantes soient remplies :
*
* Les redistributions de code source doivent conserver l'avis de droit d'auteur ci-dessus, cette liste de conditions et le disclaimer suivant.
*
* Les redistributions sous forme binaire doivent reproduire l'avis de droit d'auteur ci-dessus, cette liste de conditions et le disclaimer suivant dans la documentation et/ou d'autres supports fournis avec la distribution.
*
* Ni le nom de Majenko Technologies ni les noms de ses contributeurs ne peuvent être utilisés pour approuver ou promouvoir des produits dérivés de ce logiciel sans autorisation écrite spécifique préalable.
*
* CE LOGICIEL EST FOURNI PAR LES DÉTENTEURS DE DROITS D'AUTEUR ET LES CONTRIBUTEURS "EN L'ÉTAT" ET TOUTES GARANTIES EXPRESSES OU IMPLICITES, Y COMPRIS, SANS LIMITATION, LES GARANTIES IMPLICITES DE COMMERCIABILITÉ ET D'ADÉQUATION À UN BUT PARTICULIER SONT DÉCLARÉES Caduques. EN AUCUN CAS LE TITULAIRE DES DROITS D'AUTEUR OU LES CONTRIBUTEURS NE PEUVENT ÊTRE TENUS RESPONSABLES DE TOUT DOMMAGE DIRECT, INDIRECT, ACCESSOIRE, SPÉCIAL, EXEMPLAIRE OU CONSÉCUTIF (Y COMPRIS, SANS LIMITATION, L'ACQUISITION DE BIENS OU SERVICES DE SUBSTITUTION ; PERTE D'UTILISATION, DE DONNÉES OU DE PROFITS ; OU INTERRUPTION D'ACTIVITÉ) QUEL QU'EN SOIT LE CAUSE ET SUR TOUTE THÉORIE DE RESPONSABILITÉ, QUE CE SOIT EN VERTU D'UN CONTRAT, D'UNE RESPONSABILITÉ STRICTE OU DÉLICTUELLE (Y COMPRIS LA NÉGLIGENCE OU AUTRE) DÉCOULANT DE QUELQUE MANIÈRE DE L'UTILISATION DE CE LOGICIEL, MÊME SI AVISÉ DE LA POSSIBILITÉ D'UN TEL DOMMAGE.
*/
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(9600);
// attendre que le port série s'ouvre pour les appareils USB natifs
while (! Serial) {
delay(1);
}
Serial.println("Robojax Test");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// pouvoir
Serial.println(F("VL53L0X API Simple Ranging example\n\n"));
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
Serial.print("Reading a measurement... ");
lox.rangingTest(&measure, false); // passez 'true' pour obtenir l'impression des données de débogage !
if (measure.RangeStatus != 4) { // les pannes de phase ont des données incorrectes
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
Ressources et références
-
Externe
Fichiers📁
Aucun fichier disponible.