Medir distancia con precisión con Arduino y sensor láser VL53L0X y VL6180X


¿Qué es un VL53L0X?

El VL53L0X es un sensor de distancia infrarrojo láser de última generación, que podemos emplear junto con un procesador como Arduino para medir distancias de 50mm a 2000 mm de forma precisa. Para rangos más cercanos, la variante VL6180X tiene un rango de 5mm a 200mm.

El VL53L0X es capaz de operar incluso con elevada luz ambiental infrarroja, e incorpora un sistema de compensación de la medición que lo permite hacer funcionar incluso detrás de un cristal protector.

Es uno de los mejores sensores de distancia disponibles. Tiene una precisión superior que los sensores de ultrasonidos e infrarrojos, y no se ve alterado por las condiciones del ambiente como los ecos o la reflectancia de los objetos.

Por otro lado el ángulo de medición es relativamente estrecho. Esto es una ventaja en la mayoría de circunstancias, donde deseamos leer la distancia justo en frente del sensor. Aunque también puede ser una desventaja, por ejemplo, a la hora de detectar obstáculos.

Anuncio:

Precio

Los sensores VL53L0X son algo más caros que otros sensores de distancia, aunque a cambio tiene unas prestaciones superiores. Podemos encontrar módulos con VL53L0X por 3,90€ en vendedores internacionales de eBay y AliExpress.

¿Cómo funciona un VL53L0X?

El VL53L0X es un sensor ToF (Time of flight). Su funcionamiento consiste en enviar un pulso láser de luz infrarroja y medir el tiempo necesario en el haz en volver al sensor.

El integrado incorpora un emisor laser 940nm VCSEL (Vertical Cavity Surface-Emitting Laser), un detector SPAD (Single Photon Avalanche Diodes) y la electrónica interna (denominada FlightSenseTM) que realiza los cálculos necesarios.

El ángulo de medición o FOV (Field of View) es de 25º. Esto se traduce en un área de medición de 0.44m de diámetro a una distancia de 1m.

El rango de medición depende de las condiciones del entorno (interior, o exterior), de las características del objetivo y del modo de funcionamiento. En general, tenemos dos modos. El estandard es de 50 a 1200mm, y un modo ampliado hasta 2000mm. Para rangos más cercanos, la variante VL6180X tiene un rango de 5mm a 200mm.

Reflectancia objetivoConditionsIndoorOutdoor
Objetivo blancoTipico200cm80cm
Minimo120cm60cm
Objetivo grisTipico80cm50cm
Minimo70cm40cm

En cuanto a precisión, nuevamente depende del entorno, objetivo, y modo de funcionamiento. La siguiente tabla muestra valores típicos de rango y precisión según los distintos modos de funcionamiento del VL53L0X.

ModoTimingAlcancePrecisión
Default30ms1.2mVer tabla siguiente
Alta precisión200ms1.2m+/- 3%
Largo alcance33ms2mVer tabla siguiente
Alta velocidad20ms1.2m+/- 5%

Esto se traduce en las siguientes precisiones de referencia para los modos de funcionamiento estandard y de largo alcance.

IndoorOutdoor
Reflectancia objetivoDistancia33ms66msDistancia33ms66ms
Objetivo blancoa 120cm4%3%a 60cm7%6%
Objetivo grisa 70cm7%6%a 40cm12%9%

Que se sintetiza en la siguiente gráfica, para el modo de funcionamiento estandard.

Para mayor detalle consultar el Datasheet del fabricante, que incorpora información detallada sobre modos de funcionamiento, rango de medición y precisión, entre otros muchos datos interesantes.

Esquema de montaje

La conexión de los módulos que integran el VL53L0X es sencilla, ya que la comunicación se realiza a través de I2C. Por tanto, simplemente alimentamos el módulo desde Arduino mediante GND y 5V y conectamos el pin SDA y SCL de Arduino con los pines correspondientes del sensor.

El esquema, visto desde Arduino, sería el siguiente.

Ejemplos de código

Para realizar la lectura del sensor VL53L0X usaremos la librería desarrollada por Adafruit, disponible en este enlace.

La librería incorpora varios ejemplos de uso. El siguiente código toma lecturas de la distancia y muestra los resultados por puerto serie.

Si te ha gustado esta entrada y quieres leer más sobre Arduino puedes consultar la sección
tutoriales de Arduino

Anuncio:

Previous Adaptar 3.3V a 5V (y viceversa) en Arduino con Level Shifter
Next Instalar sistema operativo en Raspberry Pi con Noobs
1000
13 Comment threads
9 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
15 Comment authors
newest oldest
Fernando

Muy buen trabajo

Jorge

Mis felicitaciones y gratitud por el interesantísimo blog.

Qué sensor láser recomendarías para distancias de hasta 15 metros?
Estoy con un proyecto que es un medidor de distancias para habitaciones.
Muchas gracias de nuevo.

Pedro

Me gustaria saber si este tipo de laser son de luz roja como los punteros laser de toda la vida, o es algun tipo de laser inofensivo para la vista.

Un saludo

Lucas

Hola, cual seria la precisión del sensor? La unidad mínima de medida. Gracias, saludos.

Dani Pous

Felicidades por tu trabajo,como siempre super interesante. Tengo una duda que estoy buscando por toda Internet, en mi proyecto necesito conectar dos o más sensores de este tipo (como mucho un tercero) y no encuentro ni como tendría que hacer las conexiones ni como llegar a programarlo he visto que podría conectarlos en serie pero no estoy muy seguro. Si me pudieras echar una mano te lo agradecería.
Un abrazo y gracias de antemano.

Pedro

Buenas,

Estoy probando el codigo con mi sensor y solo consigo ver por serial: VL53L0X test no muestra nada mas por serial, no se si es que el sensor no consigue iniciar bien o que le ocurre.

Un saludo,
Pedro

Marco

Excelente información muchas gracias por compartirla, yo no tengo conocimiento en electrónica sin embargo tu publicación fue muy ilustrativa. Debo encarar un proyecto en el que necesito medir distancias y tener registros de las mediciones periódicamente, tener lecturas cada 5 minutos por ejemplo. Mas que visualizar la distancia; me interesa registrarla en algún dispositivo y descargarla una vez al mes por ejemplo. Te agradecería mucho si me puedes dar algunas pautas sobre que debo investigar o que dispositivos debo usar. Gracias !!

dani

Hola!

Tengo un miniproyecto en la mente y creo que este módulo puede encajar. Mi idea es poder detectar el paso de una persona por la linea del laser.

Crees que este módulo es el indicado o es mejor otra opción? Estaba pesando el el KY-008 con un detector, pero serían necesarios dos arduinos.

Muchas gracias!

raul

una pregunta, quiero medir cierta distancia, siendo como base un liquido, también funciona ? o tiene que ser un solido como base para que pueda medir, porque entiendo que su funcionamiento es calculando el tiempo de rebote del infrarrojo

Angel

me uno tambien a tu pregunta..el ultrasonico creo podia hacer esto, pero lo probe y se me estropeo al mes por las condiciones atmosfericas donde lo puse..este sensor puede ser mejor??..sds

Gregorio

Gracias por compartir esta información. Tengo una duda ¿sería aplicable para medir la cantidad de agua de un depósito cerrado? Actualmente lo mido por ultrasonidos (distancia desde la tapadera hasta la superficie del agua), pero tiene el problema de que se estropean los sensores debido a la condensación del agua. No se si el láser mediría hasta la superficie o al ser traslúcida siempre mediría fondo?
Gracias anticipadas

Rafael

Hola, quería saber si este sensor sería más preciso que el sharp GP2Y0A02 ya que actualmente estoy realizando pruebas de distancia con un brazo robótico entre 10 y 50 cm y las medidas que obtengo con el sharp no son muy buenas.

Johancodk

Hola, quisiera saber si con este sensor se puede leer hasta décimas de la distancia o se requiere otro de mayor precisión ? Estoy por medir el grosor de una tableta y quisiera usar uno de estos sensores, pero requiero hasta décimas, alguna recomendación ?

Jose Manuel

Gracias por tu trabajo, son geniales tu tutoriales.