Medidor láser de distancias con M5Stick y UIFlow

¿Necesitas medir distancias con precisión y no tienes un medidor láser? No hay problema, te comparto este proyecto para que construyas tu propio medidor láser de distancias con M5Stick y un Hat TOF programandolo de una manera sencilla empleando UIFlow.

Introducción

Muchas personas dedicadas a la construcción y otros oficios emplean a menudo medidores de distancia muy cómodos y precisos que emplean una luz láser para hacer su medición. Estos instrumentos pueden tener un alcance de unos pocos metros hasta algunas decenas de metros, varias memorias para almacenar distintas mediciones, emplear distintas unidades y hasta calcular superficies y volúmenes.

Fig. 1. Medidor de la marca UNI-T

El principio de funcionamiento de estos medidores es bastante simple: cuentan con un diodo láser (Emisor) que envía un haz de luz hasta la superficie o el objeto cuya distancia se desea medir (Obstáculo). Parte de esa luz es reflejada y recibida por un detector que también está instalado en el medidor (Receptor). A partir del tiempo (t) entre que se emite el haz de luz y éste es recibido y conociendo su velocidad (c, velocidad de la luz), se puede determinar la distancia (d) haciendo un simple cálculo:

\boxed{d = \frac{{c}\cdot{t}}{2}}
Fig. 2. Funcionamiento de un medidor de distancias TOF

Este tiempo que tarda la luz en viajar desde el emisor hasta el objeto y volver al receptor se llama en inglés Time Of Flight (literalmente sería tiempo de vuelo o tiempo de viaje) y se abrevia como TOF, por lo que la técnica de medición y los sensores que la emplean se denominan muchas veces de la misma forma, TOF.

Este principio de funcionamiento es similar al de un medidor de distancias ultrasónico, tan popular en robots de bajo costo, solo que en este caso la medición puede verse afectada por varios factores que la hacen ser menos precisa que un medidor que usa luz láser.

Fig. 3. Medidor de distancias ultrasónico

El Hat TOF de M5Stack

Entre todos los módulos y accesorios que comercializa M5Stack para sus distintos dispositivos podemos encontrar tres que podemos usar para nuestro medidor de distancias.

Dos de ellos emplean la interfaz Grove. Uno tiene un alcance máximo de 2 metros y el otro posee un rango ampliado hasta los 4 metros.

Fig. 4. Dos módulos TOF con interfaz Grove

También existe un tercer módulo en formato HAT para M5Stick que es el que usaré en este proyecto.

Fig. 5. El Hat TOF para M5Stick

Este HAT contiene el chip especializado VL53L0X, diseñado especialmente para la función de medición de distancias, con un láser invisible para el ojo humano, el receptor y un microcontrolador con interfaz I2C. El VL53L0X es capaz de hacer mediciones en un rango máximo de 2m con gran precisión.

El programa

El TOF Hat es soportado por UIFlow (tanto por la versión 1 y como por la 2), aunque en este proyecto uso UIFlow1.

Agregando el HAT

Como sucede con otros HAT, hay que agregarglo al proyecto con el botón “+” que está en el área de interfaz. Al hacer click sobre el “+” aparecen todos los Hat reconocidos por UIFlow.

Fig. 6. Agregando el TOF Hat a UIFlow

Una vez que lo agregues aparecerá en el menú de bloques de UIFLow

Fig. 7. Bloques del TOF Hat

Bloques asociados

Como puedes ver, se añade un único bloque llamado Get Distance que devuelve la distancia medida en milímetros.

Funcionamiento

El programa del medidor realiza mediciones de distancia de manera continua y muestra el valor medido en pantalla cada 1 segundo.

En el arranque, se fija la unidad de medición a milimetros (mm) pero presionando el botón B (el botón pequeño de la derecha con el HAT hacia arriba) se puede cambiar a centimetros (cm) y pulgadas (in).

Además, para poder comparar mediciones, existe una memoria. El valor actual se guarda en la memoria presionando el botón A (el botón grande del frente). Cuando se guarda la medición actual en la memoria, se borra el valor que pudiera estar almacenado con anterioridad.

Fig. 8. El medidor en funcionamiento

Interfaz

La interfaz del medidor es sencilla. Utiliza sólo tres etiquetas o Label, para mostrar el valor medido, la unidad de medida y el valor almacenado en memoria.

Fig. 9. Interface
  • Label0: Muestra la medición actual
  • Label1: Muestra la unidad de medida (mm, cm o in)
  • Label2: Valor almacenado en memoria

Código del medidor

En la siguiente imagen puedes ver el código del medidor

Fig. 10. Código UIFlow1

Analizando el programa puedes ver que dentro de Setup se muestra la unidad de medida por defecto (mm), se inicializa la variable Factor a 1 y la variable DistanciaAnterior que funciona como memoria a 0.

La variable Factor sirve para mostrar la medición (y el valor almacenado en la memoria) en distintas unidades. Como el bloque que realiza la medición devuelve el valor en mm, si queremos mostrar el valor en la misma unidad, el factor de conversion es 1. Si queremos mostrar la medición en cm, el factor de conversión es 10, ya que 1 cm = 10 mm y finalmente si la unidad elegida es la pulgada, el factor vale 25,4 debido a que 1 pulgada = 25,4 mm.

Luego, en la parte del bucle se realiza la medición. Al valor medido (en mm) se lo divide por Factor para adecuarlo a la unidad elegida, y lo mismo se hace con el valor almacenado en la memoria DistanciaAnterior, para que se vea en la misma unidad. Finamente, se muestran estos dos valores, cada uno en su Label con dos decimales y se hace un retardo de 1 segundo.

Por otro lado hay dos eventos, para cuando se aprietan el botón A y el botón B.

Cuando se aprieta el botón A se hace un “bip” y se almacena en memoria la medición actual.

Cuando se aprieta el botón B se hace un sonido diferente y se cambia el valor de la variable Factor y la unidad de medida que se muestra en pantalla. Para eso utilizo un bloque switch -case que permite elegir entre distintas acciones en base a un valor numérico (en este caso, la variable Factor).

En cada case se modifica el valor de la variable Factor y se cambia en pantalla la etiqueta (Label) que indica la unidad de medida.

Repositorio

Este proyecto, como todos los otros que he realizado con el M5Stick están en mi repositorio de GitHub:

Mas info

Página del TOF Hat en M5Stack

Conclusiones

En este proyecto te mostré como construir con facilidad un medidor de distancias láser con un M5StickC Plus2 y el Hat TOF programado en UIFlow1. Es otra muestra de lo fácil que es usar los dispositivos de M5Stack para crear distintos tipos de proyectos de lo mas interesantes.

Se pueden hacer muchas mejoras, como promediar varias mediciones antes de mostrar el valor medido para disminuir el error o agregar mas memorias. Espero que este programa te sirva como una base a partir de la cual sigas creando tus propias versiones.

Si eres profesor o docente, este proyecto te puede servir para trabajar conceptos básicos de programación, así como unidades de medida y conversión entre ellas, además de otros temas.

En otros artículos te compartiré mas proyectos, mientras tanto si tienes alguna duda o sugerencia, puedes dejarla mas abajo en la sección de comentarios. Nos vemos!

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias