La vida a un haz de láser de distancia

¡Aloha mis panas! La semana pasada estuvimos midiendo las distancias con un sensor de ultrasonidos. Esos sensores que hay en muchos kits de electrónica para niños.
El problema de estos sensores es que se pueden ver afectados por ecos. Así que, mantengamos las distancias interpersonales con otros métodos más flipantes.
No sé, uno lo suficiente preciso como para medir tu casa para esa próxima reforma en la que sueñas durante todo el confinamiento. Así que: Láseres, cámara, ¡Acción!
El sensor VL53L0X: nuestro guerrero elegido
Otro tipo de sensor para medir distancias es el que utiliza la tecnología láser. Parece que el componente de este tipo más utilizado entre los makers es el VL53L0X, supongo que por su precio (He visto algunas placas listas para conectar directamente en Arduino por menos de 20€).
El VL53L0X es un componente de la empresa ST y cuyo datasheet se puede encontrar aquí. Este pequeño componente es capaz de medir hasta 2 metros (Perfecto para nuestro propósito para ayudar a la distancia social en tiempos de coronavirus) aunque hayan reflejos.
El funcionamiento es igual que en el caso de los ultrasonidos, el componente envía una luz láser al frente, en cuanto golpea con un obstáculo, que se encuentra a 2 metros o menos, el láser vuelve y con nuestro sensor lo capturamos.
Después: ¡SORPRESA! Calculamos el tiempo que ha necesitado el láser para volver y somos capaces de calcular la distancia si conocemos la velocidad de la luz. Si te interesa este tema de la velocidad de la luz, he encontrado este artículo que aclara de dónde surge esta velocidad.
Fotones, diodos, haces y cavidades
Hablábamos de un sensor que captaba el láser enviado. Para poder medir esta luz láser entrante, lo que utiliza este componente es un SPAD array (Single Photon Avalanche Diodes array). Si no sabes nada sobre láseres debes de tener los ojos haciéndote chirivías con esa palabreja. Tal vez este artículo te adentre en el mundo de los láseres, aunque yo lo dejaré todo claro en este post.
Básicamente se trata de diodos en una fila. Cada uno de estos diodos son diodos de avalancha de fotón. Que se trata de sensores que generan una señal eléctrica dependiendo de la luz láser que les llega. Esta luz se tratará de radiación gamma, rayos x, beta y alfa, ya que si fuese luz normal utilizaríamos una fotoresistencia y ya está,no? 😛
En nuestro caso lo que va a detectar es una luz láser de longitud de onda 940nm. Esta señal proviene de nuestro componente VL53L0X, que además de sensorizar la señal, también la genera (Justo igual como pasaba con los ultrasonidos).
Esta señal se genera con una VCSEL (Vertical Cavity Surface-Emitting Laser). Esta es una cavidad láser donde el haz (Podríamos llamarlo rayo en el lenguaje coloquial?) sale de unos diodos láser (Sí si, diodos como los que ya conocemos). Este haz sale de manera perpendicular al componente, es decir, el diodo está acostado sobre la base del chip y perpendicularmente surge un haz de luz.
El haz sale a una serie de espejos Bragg (Espejos hechos a capas con dos materiales ópticos diferentes) que se encuentran situados de manera perpendicular al haz.
Así, el rayo atraviesa unos pocos de estos espejos, luego pasa por una región activa (El lugar dónde se confinan partículas o cuasi-partículas que solo pueden moverse de manera perpendicular a la superficie, que es justo la misma dirección de nuestro haz ) y luego vuelve a pasar por más espejos.
De aquí, ya surge el haz láser que conocemos. Lo he explicado bastante rápido pero puedes ampliar la información en RP Photonics. Mi amigo JJ siempre me recomendó esta web para cualquier duda referente a láseres 😛
Otra vez vas a perder el vuelo…
Y ya lo tenemos todo montado para entender cómo funciona el VL53L0X. Un haz de luz de 940nm es generado por nuestros diodos láser. Tras pasar por una zona que les da energía se genera un láser que sale del componente VL53L0X.
Este láser colisiona con un objeto a menos de 2 metros y vuelve. A su vuelta es detectado por un sensor. Ahora actúa un chip que realiza los cálculos para conocer la distancia a la que se encuentra el objeto.
A diferencia con el caso de los ultrasonidos, el cálculo viene dado por el propio componente y no lo hacemos nosotros por software, lo que parece que dé un poco más de confianza en esta solución.
Debido a este cálculo, este componente es llamado por el fabricante como Time-of-Flight (ToF) ranging sensor. El ToF o tiempo de vuelo se refiere al tiempo que está el láser fuera del componente hasta que vuelve al mismo.

Información básica sobre Proteción de datos
Responsable ➥ Sergio Luján Cuenca
Finalidad ➥ Gestionar el envío de correos electrónicos con artículos, noticias y publicidad. Todo relacionado con los temas de rufianenlared.com
Legitimación ➥ Consentimiento del interesado
Destinatarios ➥ Estos datos se comunicarán a MailRelay para gestionar el envío de los correos electrónicos
Derechos ➥ Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la política de privacidad
Plazo de conservación de los datos ➥ Hasta que se solicite la supresión por parte del interesado
Información adicional ➥ Puedes encontrarla en la política de privacidad y el aviso legal
Midiendo distancias con Arduino y un láser
Para su montaje, en tu caso no comprarás el componente de ST directamente, sino que comprarás las placas ya preparadas para Arduino que permiten hacer el conexionado basándose en 4 pines:
- Vcc: Es la alimentación del circuito por lo que lo conectaremos al pin 5V de Arduino.
- GND: Es el ground del circuito y se debe de conectar al GND de Arduino.
- SCL: Serial Clock, te debería sonar de algo… Es por dónde va la señal de reloj.
- SDA: Serial Data, el lugar por dónde viajan los datos.
No sé cómo de centrado estarás, pero solo viendo SCL y SDA todos tus sentidos arácnidos deberían activarse para entender que el VL53L0X funciona por I2C. Es por este método de comunicación por el cuál transmite el valor de la distancia que ha calculado a nuestro Arduino.
Miles de librerías, no te quedes mirándolas hasta tarde…
A la hora de programar este láser con tu Arduino, lo suyo es acceder a la sección de instalación de Librerías del IDE y mirar que tenemos. Bajo el nombre ‘VL53L0X’ se encuentran varias librerías interesantes.
Yo elijo la de Pololu porque me parece más simple que otras, como la de Adafruit por ejemplo. Pero siéntete libre de utilizar cualquiera, el funcionamiento es muy similar en todos los casos. Para utilizar esta librería lo primero es crear un objeto VL53L0X:
VL53L0X laser;
Luego habrá que inicializar este láser en el setup de nuestro programa:
laser.init();
También habrá que añadir un timeout, un tiempo a partir del cuál el láser dé por perdida la medida que acaba de enviar ya que no ha rebotado con nada:
laser.setTimeout(500);
Sabemos cuando el sensor dará por perdida la recepción de la señal, ahora falta definir cada cuánto va a leer para detectar si la señal ha llegado. Para ir tomando medidas separadas en el tiempo tendremos que añadir esta línea en el setup:
laser.startContinous(tiempo);
Dónde el tiempo serán los milisegundos a esperar entre medidas. Si quisiésemos que las medidas se tomaran continuamente, llamémosle en modo “too fast too furious” (Lo más rápido posible). Pondríamos esto en el setup:
laser.startContinous();
Como ves, simplemente he eliminado el tiempo. Ahora en el loop tan solo debo de encargarme de dos cosas:
- Recuperar el valor de medida
- Asegurarme de que no ha habido un timeout y realmente la señal nunca ha sido recibida
Para ello utilizaremos esta función para recuperar el valor de la distancia en milímetros:
laser.readRangeContinuousMillimeters());
Por otra parte, debemos comprobar que no haya habido un error y el haz láser enviado no haya vuelto en el tiempo determinado:
laser.timeoutOccurred();
Esta función simplemente da un resultado booleano: true o false. true si ha habido un timeout y el láser enviado no se ha recepcionado o false si ha ido todo bien.
Y con esto ya estás listo para salir al mundo real de la programación de sensores láser VL53L0X.
Cómo quieres que te vea si no estás aquí…
En el anterior post recuerdo que dije que hoy hablaría de los infrarrojos, pero a estas alturas del post aún no ha aparecido nada… O si… El láser saca un haz a 940nm de longitud de onda. Esta longitud es infrarroja y por tanto invisible al ojo humano. Así que lo siento, con este sensor no podrás ver la luz roja típica de los láseres de los niños.
De hecho, es por esto que este sensor también es llamado en internet como sensor infrarrojo láser, porque utiliza un láser en el espectro infrarrojo para funcionar.
Pues bien, con esto yo creo que ya lo tendríamos todo, pero me gustaría darte un último highlight (O como lo digan los jóvenes modernos de ahora).
Además de medir la distancia, este sensor tiene otros usos. Por ejemplo:
- Detectar un obstáculo
- Detectar que hay una mano en un dispensador de jabón o gel desinfectante
- Reconocer gestos con la mano en una dimensión
- Detectar que hay una persona enfrente del PC y entonces encender la pantalla
Para que veas, que no solo de medir vive el VL53L0X. Y con esto me voy, que hoy ha sido un día duro con el metro arriba y abajo, ni que estuviese de reformas…