Utiliser un capteur de distance laser VL53L1X pour mesurer des distances allant jusqu'à 4 mètres
Le VL53L1X est un capteur de distance à laser à temps de vol capable de mesurer des distances allant jusqu'à 4 mètres avec une grande précision. Ce capteur communique via I2C et est polyvalent pour diverses applications, telles que la robotique et l'automatisation. Dans ce tutoriel, nous allons explorer comment configurer le capteur VL53L1X avec un Arduino et lire efficacement les valeurs de distance.
Le capteur est alimenté par 3,3 V ou 5 V, et il dispose de plusieurs broches pour la communication I2C, y compris SDA et SCL. Le capteur peut mesurer des distances à une fréquence de 50 Hz, permettant des lectures de distance rapides. Ce tutoriel vous guidera à travers le processus de câblage et le code nécessaire pour faire fonctionner le capteur en douceur. Pour plus de précisions, vous pouvez consulter la vidéo (dans la vidéo à 00:00).
Matériel expliqué
Le composant principal de ce projet est le capteur de distance laser VL53L1X, qui utilise une technologie connue sous le nom de temps de vol (ToF) pour mesurer les distances. Cela signifie qu'il calcule la distance jusqu'à un objet en chronométrant le temps qu'il faut à une impulsion laser pour revenir après avoir frappé un objet. Le capteur possède une communication I2C, ce qui permet une intégration facile avec des microcontrôleurs comme Arduino. En plus du capteur, vous aurez besoin d'une carte Arduino pour le traitement. L'Arduino gérera la communication avec le VL53L1X et affichera les distances mesurées. La configuration est simple, car le capteur peut être alimenté directement à partir des broches de sortie de l'Arduino.
Détails de la fiche technique
| Fabricant | STMicroelectronics |
|---|---|
| Numéro de pièce | VL53L1X |
| Tension logique/IO | 3,3 - 5 V |
| Tension d'alimentation | 2,6 - 5,5 V |
| Courant de sortie (par canal) | Non applicable |
| Courant de crête (par canal) | Non applicable |
| Orientation sur la fréquence PWM | Non applicable |
| Seuils de logique d'entrée | 0,3 × VCC (bas), 0,7 × VCC (haut) |
| Chute de tension / RDS(on)/ saturation | Non applicable |
| Limites thermiques | 0 à 85 °C |
| Paquet | 4,9 x 2,5 x 1,6 mm |
| Remarques / variantes | Capteur de temps de vol à longue portée |
- Alimentez le capteur avec 3,3V ou 5V selon les besoins.
- Utilisez les broches I2C, SDA et SCL, pour la communication.
- Réglez le mode de distance en fonction de vos besoins (court, moyen, long).
- Assurez-vous que le capteur est calibré pour des lectures de distance précises.
- Prenez soin des conditions d'éclairage ambiant, car elles peuvent affecter les mesures.
Instructions de câblage

Pour câbler le capteur VL53L1X à un Arduino, connectez la broche VCC du capteur à la broche 5V de l'Arduino à l'aide d'un fil rouge. Connectez la broche de masse (GND) du capteur au GND de l'Arduino à l'aide d'un fil marron. Pour la communication I2C, connectez la broche SDA du capteur à la broche A4 de l'Arduino à l'aide d'un fil jaune et la broche SCL à la broche A5 à l'aide d'un fil vert. Si vous souhaitez utiliser les broches d'interruption et d'arrêt optionnelles, connectez la broche d'arrêt à la broche numérique 2 et la broche d'interruption à la broche numérique 3, mais celles-ci ne sont pas nécessaires pour un fonctionnement de base.
Exemples de code et guide étape par étape
Dans le code, nous incluons d'abord les bibliothèques nécessaires et définissons les broches pour le capteur. Nous créons une instance du capteur avec la ligne :
SFEVL53L1X distanceSensor;Cette ligne initialise le capteur, ce qui nous permet d'appeler ses méthodes plus tard dans le programme. Ensuite, nous configurons la communication I2C et initialisons le capteur :
void setup(void)
{
Wire.begin();
Serial.begin(9600);
Serial.println("VL53L1X Qwiic Test");
if (distanceSensor.begin() == 0) //Begin returns 0 on a good init
{
Serial.println("Sensor online!");
}
}Dans cet extrait, nous commençons la communication I2C avecWire.begin()et vérifiez si le capteur est correctement initialisé. Enfin, pour lire la distance, nous utilisons le code suivant dans la boucle :
void loop(void)
{
int distance = distanceSensor.getDistance(); // Get distance
Serial.print("Distance: ");
Serial.println(distance);
}Ce code récupère la mesure de distance et l'affiche sur le moniteur série. La boucle lit en continu la distance, permettant des mises à jour en temps réel. Pour un exemple de code complet, veuillez vous référer au code complet chargé en dessous de l'article.
Démonstration / Quoi attendre
Lorsque le capteur est correctement installé, vous pouvez vous attendre à ce qu'il fournisse des mesures de distance précises jusqu'à 4 mètres. Vous pourrez observer de légères fluctuations dans les relevés, en particulier dans des conditions d'éclairage variables (dans la vidéo à 10:30). Il est essentiel de s'assurer que le capteur est propre et dégagé pour obtenir des résultats précis. Si vous rencontrez des relevés inhabituels, vérifiez que le capteur est correctement alimenté et que les connexions I2C sont sécurisées. Les performances du capteur peuvent être affectées par l'environnement, notamment en cas de forte luminosité ou de surfaces réfléchissantes.
Timestamps vidéo
- 00:00 Début
- 00:40 Introduction
- 03:42 Fiche Technique Visitée
- 06:48 Têtes de broche de soldat
- 08:22 Explication du câblage
- 09:06 Code expliqué
- 11:53 Démonstration
- 16:03 Démonstration dans l'obscurité totale
/*
* This is a code example using the VL53L1X Laser Range Sensor from STMicroelectronics
* Using a library from SparkFun (see below)
*
* Watch a video instruction for this code: https://youtu.be/Sc_iVfeocvg
* A wiring diagram is available at https://robojax.com/RJT232
* Updated by Ahmad Shamshiri on November 4, 2019
* in Ajax, Ontario, Canada. www.robojax.com
*
* Get this code and other Arduino codes from Robojax.com.
Learn Arduino step by step in a structured course with all materials, wiring diagrams and libraries
all in one place.
If you found this tutorial helpful, please support me so I can continue creating
content like this.
or make a donation using PayPal http://robojax.com/L/?id=64
*
* https://www.st.com/content/ccc/resource/technical/document/user_manual/group0/98/0d/38/38/5d/84/49/1f/DM00474730/files/DM00474730.pdf/jcr:content/translations/en.DM00474730.pdf
* https://www.st.com/resource/en/datasheet/vl53l1x.pdf
*
Reading distance from the laser-based VL53L1X
By: Nathan Seidle
Revised by: Andy England
SparkFun Electronics
Date: April 4th, 2018
License: This code is public domain but you buy me a beer if you use this and we meet someday (Beerware license).
SparkFun labored with love to create this code. Feel like supporting open-source hardware?
Buy a board from SparkFun! https://www.sparkfun.com/products/14667
This example prints the distance to an object.
Are you getting weird readings? Be sure the vacuum tape has been removed from the sensor.
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Copyright (c) 2015, Majenko Technologies
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.
* * Neither the name of Majenko Technologies nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <Wire.h>
#include "SparkFun_VL53L1X.h"
//Optional interrupt and shutdown pins.
#define SHUTDOWN_PIN 2
#define INTERRUPT_PIN 3
SFEVL53L1X distanceSensor;
//Uncomment the following line to use the optional shutdown and interrupt pins.
//SFEVL53L1X distanceSensor(Wire, SHUTDOWN_PIN, INTERRUPT_PIN);
void setup(void)
{
Wire.begin();
Serial.begin(9600);
Serial.println("VL53L1X Qwiic Test");
if (distanceSensor.begin() == 0) //Begin returns 0 on a good init
{
Serial.println("Sensor online Robojax Says!");
}
Serial.print("I2C Address of VL53L1X:");
Serial.println(distanceSensor.getI2CAddress());
// set distance mode to Short or long
distanceSensor.setDistanceModeShort();
//distanceSensor.setDistanceModeLong();
}
Ressources et références
-
ExterneBibliothèque VL53L0X de Pololu (GitHub)github.com
Fichiers📁
Aucun fichier disponible.