VL53L0X: sensor de distancia láser de alta precisión

VL53L0X

En algunos de tus proyectos habrás necesitado medir distancias. Pues debes saber que el VL53L0X es un dispositivo que permite medirlas con una alta precisión. Además, su reducido tamaño y el bajo precio que tiene lo hacen ideal para tus proyectos DIY, en especial para integrar con Arduino.

Existen muchos dispositivos que pueden medir distancias, algunos de ellos son distanciómetros basados en ultrasonidos que emiten un sonido y al rebotar con el objeto permite saber con bastante exactitud la distancia que hay. Pero si quieres la más alta de las precisiones, para ello necesitas un distanciómetro óptico. Este tipo de dispositivos de medida se basa en láser, como es el caso del VL53L0X.

¿Qué es el ToF?

ToF principio (esquema)

Cámara de tiempo de vuelo o ToF (Time-of-Flight) es una técnica utilizada para medir distancias. Se basa en la óptica, midiendo el tiempo transcurrido entre la emisión de un haz luminoso y la recepción. Pueden ser sensores CCD, CMOS, y los pulsos pueden ser infrarrojos, láser, etc. El sistema estará sincronizado para comenzar la medición de tiempo justo cuando se lanza el pulso y parar el contador cuando reciben el rebote por el sensor.

De esa forma, se puede calcular la distancia con bastante precisión. Tan solo hace falta una circuitería lógica adicional integrada en el chip para realizar los cálculos desde que se lanza el haz hasta que se recibe y así determinar cuál es la distancia. El principio es bastante sencillo.

Artículo relacionado:
ESP8266: el módulo WIFI para Arduino

Este tipo de dispositivos se emplean en robótica para permitir al robot o drone evitar obstáculos, saber a qué distancia se encuentran de un objetivo, para detectar movimiento o proximidad, para sensores para automóviles usados para distintas aplicaciones, para implementar un metro electrónico, como un actuador para que Arduino haga algo cuando detecte cierta proximidad de un objeto, etc.

Qué es el VL53L0X y datasheet

VL53L0X

El VL53L0X emplea ese principio para medir distancias por infrarrojo láser de última generación. Junto con un procesador, como Arduino, puede ser una potente herramienta para medir. Concretamente el chip puede captar distancias de entre 50mm y 2000mm, es decir, entre 5 centímetros y 2 metros.

Para medir distancias más cercanas probablemente necesites una variante de este chip denominada VL6180X que permite medir un rango de entre 5 y 200 mm, es decir, entre medio centímetro y 20 centímetros. Si quieres encontrar un dispositivo similar pero basado en ultrasonidos por cualquier motivo técnico, entonces deberías mirar el HC-SR04, otro módulo bastante barato y popular entre los makers.

El chip VL53L0X ha sido diseñado para funcionar incluso cuando la luz ambiental es bastante elevada. Ten en cuenta que al trabajar de forma óptica, mientras mayor sea la “contaminación” luminosa del ambiente, más complicado será captar adecuadamente el rebote de la señal. Pero en este caso no presenta demasiado problema. Además, el sistema de compensación que integra le permite medir incluso si lo usas tras un cristal protector.

Eso lo transforman en uno de los mejores sensores de distancias que encontrarás en el mercado. Con una precisión bastante superior a los sensores basados en ultrasonidos o infrarrojos (IR). El motivo de ser tan preciso es que el láser no se verá afectado por ecos o reflectancia de objetos como ocurre en los otros casos.

Actualmente puedes encontrarlo integrado en mulos con algunos extra por unos 16€ o en placas más simples de poco más de 1€ o 3€ en otros casos. Ya sabes que lo encontrarás en tiendas como eBay, AliExpress, Amazon, etc. Los fabricantes de estos dispositivos son varios, por lo que si necesitas conocer los detalles del modelo que has comprado lo mejor es que compruebes el datasheet del fabricante que has elegido. Por ejemplo:

El VL53L0X tiene dentro del chip el emisor del pulso láser y el sensor para captar el haz que vuelve. En este caso el emisor es un láser de 940nm de longitud de onda y de tipo VCSEL (Vertical Cavity Surface-Emitting Laser). En cuanto al sensor de captación es un SPAD (Single Photon Avalanche Diodes). También integra una electrónica interna denominada FlightSenseTM que calculará la distancia.

El angulo de medición o FOV (Field of View) es de 25º en este caso. Eso se traduce a un área de medición de 0,44m de diámetro a una distancia de 1m. Aunque el rango de medición dependerá de las condiciones del entorno. Si se hace en el interior es un poco superior a si se hace en el exterior. También dependerá de la reflectancia del objeto al que apuntes:

Reflectancia objetivo Condiciones Interior Exterior
Objetivo blanco Típico 200cm 80cm
Mímimo 120cm 60cm
Objetivo gris Típico 80cm 50cm
Mínimo 70cm 40cm

Además, el VL53L0X tiene varios modos de funcionamiento que puede variar los resultados. Esos modos se resumen en la siguiente tabla:

Modo Timing Alcance Precisión
Por defecto 30ms 1.2m Ver la tabla siguiente
Alta precisión 200ms 1.2m +/- 3%
Largo alcance 33ms 2m Ver la tabla siguiente
Alta velocidad 20ms 1.2m +/- 5%

Según esos modos, tenemos varias precisiones estándar y de largo alcance que tienes en esta tabla:

Interior Exterior
Reflectancia objetivo Distancia 33ms 66ms Distancia 33ms 66ms
Objetivo blanco a 120cm 4% 3% a 60cm 7% 6%
Objetivo gris a 70cm 7% 6% a 40cm 12% 9%

Pinout y conexión

VL53L0X diagrama del chip

 

Para que todo eso funcione adecuadamente necesita una interfaz con el exterior. Y eso se consigue a través de unos pines o conexiones. El pinout del VL53L0X es bastante simple, solo dispone de 6 pines. Para su integración con Arduino se puede hacer la comunicación mediante I2C.

Para alimentarlo, puedes conectar los pines así:

  • VCC a 5v de Arduino
  • GND a GND de Arduino
  • SCL a un pin analógico de Arduino. Por ejemplo A5
  • SDA a otro pin analógico. Por ejemplo A4
  • Los pines GPI01 y XSHUT no los tienes que usar por el momento.

Integración con Arduino

VL53L0X conectado a Arduino

Al igual que para otros muchos módulos, para el VL53L0X también tienes bibliotecas (p.e. la de Adafruit) de código disponibles que puedes usar para trabajar con ciertas funciones cuando escribes el código fuente para manejar tu proyecto en Arduino IDE. Si es tu primera vez con Arduino, te recomiendo nuestro manual de programación.

Un ejemplo de código simple para que tome medidas y muestre el valor de la medición a través del puerto serie para que puedas verlo desde la pantalla de tu PC mientras tengas la placa Arduino conectada es:


#include "Adafruit_VL53L0X.h"
 
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
 
void setup() {
  Serial.begin(9600);
 
  // Iniciar sensor
  Serial.println("VL53L0X test");
  if (!lox.begin()) {
    Serial.println(F("Error al iniciar VL53L0X"));
    while(1);
  }
}
 
 
void loop() {
  VL53L0X_RangingMeasurementData_t measure;
    
  Serial.print("Leyendo sensor... ");
  lox.rangingTest(&measure, false); // si se pasa true como parametro, muestra por puerto serie datos de debug
 
  if (measure.RangeStatus != 4)
  {
    Serial.print("Distancia (mm): ");
   Serial.println(measure.RangeMilliMeter);
  } 
  else
  {
    Serial.println("  Fuera de rango ");
  }
    
  delay(100);
}

En la propia biblioteca de Adafruit tienes más ejemplos de uso si lo necesitas…

Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.