Código de búsqueda

Uso de un sensor de distancia láser VL53L1X para medir distancias de hasta 4 metros.

Uso de un sensor de distancia láser VL53L1X para medir distancias de hasta 4 metros.

El VL53L1X es un sensor de distancia láser de tiempo de vuelo capaz de medir distancias de hasta 4 metros con alta precisión. Este sensor se comunica a través de I2C y es versátil para diversas aplicaciones, como robótica y automatización. En este tutorial, exploraremos cómo configurar el sensor VL53L1X con un Arduino y leer valores de distancia de manera efectiva.

VL53L1X_módulo

El sensor se alimenta con 3.3V o 5V, y tiene múltiples pines para comunicación I2C, incluyendo SDA y SCL. El sensor puede medir distancias a una frecuencia de 50Hz, lo que permite lecturas de distancia rápidas. Este tutorial te guiará a través del proceso de cableado y el código necesario para operar el sensor sin problemas. Para mayor aclaración, puedes consultar el video (en el video a :00).

Hardware Explicado

El componente principal de este proyecto es el sensor de distancia láser VL53L1X, que utiliza una tecnología conocida como tiempo de vuelo (ToF) para medir distancias. Esto significa que calcula la distancia a un objeto midiendo cuánto tiempo tarda un pulso láser en regresar después de golpear un objeto. El sensor cuenta con comunicación I2C, lo que permite una fácil integración con microcontroladores como Arduino. Además del sensor, necesitarás una placa Arduino para el procesamiento. El Arduino se encargará de la comunicación con el VL53L1X y mostrará las distancias medidas. La configuración es sencilla, ya que el sensor puede alimentarse directamente desde los pines de salida del Arduino.

Detalles de la hoja de datos

Fabricante STMicroelectronics
Número de parte VL53L1X
Voltaje de lógica/entrada/salida 3.3 - 5 V
Tensión de suministro 2.6 - 5.5 V
Corriente de salida (por canal) No aplicable
Corriente de pico (por canal) No aplicable
Orientación sobre la frecuencia PWM No aplicable
Umbrales de lógica de entrada 0.3 × VCC (bajo), 0.7 × VCC (alto)
Caída de tensión / RDS(on)/ saturación No aplicable
Límites térmicos 0 a 85 °C
Paquete 4.9 x 2.5 x 1.6 mm
Notas / variantes Sensor de tiempo de vuelo de larga distancia

  • Alimente el sensor con 3.3V o 5V según sea necesario.
  • Utiliza los pines I2C, SDA y SCL, para la comunicación.
  • Ajusta el modo de distancia según tus necesidades (corto, medio, largo).
  • Asegúrese de que el sensor esté calibrado para lecturas de distancia precisas.
  • Maneje las condiciones de luz ambiental con cuidado, ya que pueden afectar las mediciones.

Instrucciones de cableado

VL53L1X_wiring

Para conectar el sensor VL53L1X a un Arduino, conecta el pin VCC del sensor al pin de 5V en el Arduino usando un cable rojo. Conecta el pin de tierra (GND) del sensor al GND del Arduino usando un cable marrón. Para la comunicación I2C, conecta el pin SDA del sensor al pin A4 del Arduino usando un cable amarillo y el pin SCL al pin A5 usando un cable verde. Si deseas usar los pines de interrupción y apagado opcionales, conecta el pin de apagado al pin digital 2 y el pin de interrupción al pin digital 3, pero estos no son necesarios para el funcionamiento básico.

Ejemplos de código y guía paso a paso

En el código, primero incluimos las bibliotecas necesarias y definimos los pines para el sensor. Creamos una instancia del sensor con la línea:

SFEVL53L1X distanceSensor;

Esta línea inicializa el sensor, lo que nos permite llamar a sus métodos más adelante en el programa. A continuación, configuramos la comunicación I2C e inicializamos el sensor:

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

En este extracto, comenzamos la comunicación I2C conWire.begin()y verifica si el sensor se ha inicializado correctamente. Finalmente, para leer la distancia, usamos el siguiente código en el bucle:

void loop(void)
{
  int distance = distanceSensor.getDistance(); // Get distance
  Serial.print("Distance: ");
  Serial.println(distance);
}

Este código recupera la medición de distancia y la imprime en el monitor serial. El bucle lee continuamente la distancia, lo que permite actualizaciones en tiempo real. Para un ejemplo de código completo, consulte el código completo cargado debajo del artículo.

Demostración / Qué Esperar

Cuando el sensor está configurado correctamente, puedes esperar que proporcione mediciones de distancia precisas de hasta 4 metros. Es posible que observes ligeras fluctuaciones en las lecturas, especialmente en condiciones de iluminación variable (en el video a las 10:30). Es esencial asegurarse de que el sensor esté limpio y sin obstrucciones para obtener resultados precisos. Si encuentras lecturas inusuales, verifica que el sensor esté alimentado correctamente y que las conexiones I2C estén seguras. El rendimiento del sensor puede verse afectado por el entorno, particularmente en luz brillante o superficies reflectantes.

Marcas de tiempo del video

  • 00:00 Comienzo
  • 00:40 Introducción
  • 03:42 Ficha técnica visitada
  • 06:48 Encabezados de pines de soldadura
  • 08:22 Explicación del cableado
  • 09:06 Código explicado
  • 11:53 Demostración
  • 16:03 Demostración en Completa Oscuridad

Imágenes

VL53L1X Distance Sensor
VL53L1X Distance Sensor
VL53L1X_module
VL53L1X_module
VL53L1X_wiring
VL53L1X_wiring
259-code example using the VL53L1X Laser Range Sensor
Idioma: C++
/*

 * 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();

}

Recursos y referencias

Archivos📁

No hay archivos disponibles.