El módulo mini GPS/BDS de la empresa M5Stack tiene gran cantidad de aplicaciones. En este artículo te muestro como hacer un Velocimetro GPS con M5Stick programado en UIFlow para evitar que te multen por exceso de velocidad.
Introducción
Un velocímetro es un aparato que toma señales del vehículo sobre el que va montado y muestra a que velocidad se está desplazando.
En un automóvil o bicicleta, estas señales provienen de las ruedas o de algún punto de la transmisión y tienen una relación directa con la velocidad del movimiento. La medición es bastante precisa pero la instalación de los sensores o medidores puede ser un tanto compleja.
En el caso de un GPS, la velocidad se deriva de la distancia recorrida entre dos mediciones: conociendo la distancia recorrida y el tiempo empleado se puede calcular la velocidad con una simple división. Este valor puede que no sea tan exacto pero tiene la gran ventaja de que no requiere la conexión de ningún tipo de sensor.
Desde luego, emplear un GPS para realizar sólo esta función tal vez sea un despropósito, pero si ya lo tenemos para determinar la posición podemos aprovechar el dato adicional de velocidad con otros fines.
En este caso vamos a leer la información de velocidad entregada por el GPS para mostrarla en pantalla y le agregaremos un par de funciones adicionales: vamos a comparar la velocidad con un límite máximo, como el que se establece por ley en las rutas o carreteras, avisando con una alarma si lo estamos superando (para evitar multas) y además determinaremos la velocidad máxima alcanzada y también la mostraremos en pantalla para que sirva como referencia.
El módulo Mini GPS/BDS
El Mini GPS/BDS es un módulo de M5Stack que cuenta con una interfaz tipo UART que puede conectarse a través de un conector Grove con distintos dispositivos.
Como otros módulos de la misma marca, puede ser accedido desde distintas plataformas y lenguajes de programación, como Arduino, Python o UIFlow.
Los bloques disponibles en UIFlow Versión 1 son los siguientes:
Puedes encontrar un análisis detallado del funcionamiento de cada bloque en este artículo anterior.
Como puedes ver, hay varios bloques para leer los datos que entrega el GPS, entre ellos Latitud y Longitud, Fecha y hora, cantidad de satelites en vista y Velocidad. Este último es el que usaremos en este proyecto.
El programa
En la imagen que sigue puedes ver la interfaz del M5Stick. Mas abajo te explico el significado de cada elemento.
Label0: Velocidad actual leída desde el GPS.
Label1: Contiene el texto “MAX:” para indicar la velocidad máxima alcanzada.
Label2: Contiene el texto fijo “Km/h”.
Label3: Voltaje de la batería en voltios.
Label4: Velocidad máxima alcanzada.
Label5: Contiene el texto fijo “LIM:” para mostrar la velocidad límite configurada.
Label6: Valor de la velocidad límite.
Label8: Valor de la hora actual
Label9: Contiene el texto “BAT:”
(Label 7 parece que fue borrada en alguna modificación)
Los bloques del código se pueden ver a continuación:
Como puedes apreciar tiene dos eventos en amarillo: Setup con los bloques de preparación y Bucle que contiene los bloques que se repiten indefinidamente.
Debajo de Setup se configura el módulo GPS para indicar que está conectado a la UART1 y luego se establece la Time Zone a -3, que es mi zona horaria. Debes establecer este valor según tu zona horaria específica para que la hora se muestre correctamente en pantalla.
Luego se inicializa la variable Vmax (Velocidad Máxima) a 0 y Vlim (Velocidad límite a 110). Este es el valor contra el cual se compara la velocidad para determinar si se ha excedido el límite máximo. También debes cambiarla según los valores locales. (En una futura versión haré que esto se pueda modificar desde el mismo programa).
El último bloque de Setup se asegura que el color de label0 (la velocidad) sea el blanco.
Al comenzar el Bucle se actualizan distintos valores en pantalla, como el voltaje de la batería, la hora, el valor de la velocidad límite, la velocidad actual y la velocidad máxima. Merece una atención especial el caso de la velocidad actual, ya que el bloque de lectura del GPS devuelve un valor en formato texto y debe ser convertido a número (float) para su posterior comparación (si no, se produce un error). Además, se lo redondea para desestimar los decimales.
Luego entontramos dos comparaciones usando bloques si/do/sino y si/do
En la primera se compara la velocidad actual con la velocidad límite. Si la actual es superior a la límite se hace sonar una alarma y el valor de velocidad cambia a color rojo, indicando que estamos excediendo la velocidad límite. Si no es así, el color de la velocidad se mantiene en blanco y la alarma no suena.
La siguiente comparación es para actualizar el valor de la velocidad máxima. Si la velocidad actual es superior a la máxima, se actualiza el valor de velocidad máxima, si no se mantiene sin cambios.
Finalmente, se hace un retardo de 2 segundos antes de continuar, para que los valores en pantalla no cambien tan rápidamente.
Repositorio
Este proyecto, como todos los otros que he realizado con el M5Stick están en mi repositorio de GitHub:
Galería de imágenes
Estas son algunas imágenes del M5Stick montado con el módulo GPS empleando un accesorio SandwichC Brick.
El velocimetro en funcionamiento
Mas info
Página del módulo Mini GPS/BDS en M5Stack
El módulo Mini GPS/BDS en Aliexpress
Conclusiones
El M5StickC Plus2 es un dispositivo genial para programar una gran cantidad de aplicaciones. En combinación con los módulos periféricos de M5Stack se pueden crear proyectos desde los mas sencillos hasta los mas complejos sin necesidad de complicarse con el hardware.
En este artículo te mostré como aprovechar el módulo Mini GPS/BDS para una aplicación no tan convencional para un GPS, como es un velocimetro, que también sirvió para aprender un poco más sobre los fundamentos de la programación con UIFlow.
Espero que te sirva a modo de ejemplo para crear tus propios proyectos. Cualquier duda o sugerencia puedes dejarla mas abajo en la sección de comentarios. Nos vemos!