Cómo hacer un telémetro láser económico para Arduino
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Herramientas y máquinas necesarias
| ||||
|
Aplicaciones y servicios en línea
|
Acerca de este proyecto
¿Necesita un módulo de telémetro láser rápido y económico para su proyecto Arduino?
Por supuesto, puede utilizar módulos especializados para esta tarea, pero la mayoría tienen un precio elevado. Los módulos VL53L0X / VL53L1X son económicos, pero tienen un campo de visión muy grande.
Así que encontré una solución:usar una cinta métrica láser barata "X-40" como telémetro láser. Estos dispositivos cuestan $ 20 o menos y pueden medir distancias de hasta 40 m con una precisión de ~ 3 mm. Pero hay dos problemas:no hay forma de obtener lecturas de la cinta y las mediciones son lentas, menos de 1 Hz.
Para resolver esos problemas, hice ingeniería inversa de esa cinta métrica láser y escribí mi propio firmware para el MCU STM32 del módulo del telémetro láser. La velocidad de medición fue importante para mí y puedo alcanzar ~ 60 Hz, pero la distancia estable máxima disminuyó a ~ 6 m (el rango máximo total es 37 m, pero no lo probé).
La precisión de la medición de distancia puede variar de 1 mm a 10 mm según el color y la distancia del objetivo.
Dimensiones del módulo:25x13x50 mm.
AVISO IMPORTANTE:PERDERÁ EL FIRMWARE ORIGINAL, POR LO QUE EL DISPOSITIVO NO PUEDE UTILIZARSE COMO UNA MEDIDA DE CINTA LÁSER MÁS TARDE.
Tenga en cuenta que las cintas métricas láser "X-40" pueden tener diferentes revisiones del módulo del telémetro láser, ¡y mi firmware solo admite algunas de ellas!
"X-40" no es el único nombre para una cinta métrica láser con estos módulos; sé que existen varias cintas métricas láser chinas diferentes con módulos adecuados.
Paso 1:Desmontaje de la cinta métrica láser
Desarmemos la cinta métrica láser para obtener un módulo de telémetro láser.
Necesita desatornillar 7 tornillos de la caja:
Cinta métrica láser desmontada:
Puede ver un pequeño módulo de telémetro láser dentro de la carcasa del dispositivo. Debe desconectar los cables planos del módulo y quitar el módulo de la carcasa:
Tenga en cuenta que el módulo está marcado como "701A". Mi firmware solo admite las versiones de módulo "512A" y "701A". Varios usuarios confirmaron que los módulos "703A" también funcionan (no lo probé).
UPD 11/2019:
Atención:Se descubrió que las cintas métricas láser "x-40" más nuevas vienen con módulos "M88B". La marca es "88B" en la PCB cerca de la MCU. Que los módulos se basan en STM32F0 MCU (tiene el paquete QFN-32). ¡Los módulos no son compatibles con mi firmware!
UPD 10/2021:
Atención: soporte agregado de módulos U85B :ver enlace! Se utilizan en tipos modernos de cintas métricas láser.
Si su módulo es compatible, debe desoldar las líneas eléctricas del módulo.
Paso 2:Programación del módulo de telémetro láser
Debe escribir un firmware especializado en la MCU del módulo para obtener la funcionalidad necesaria.
1. En primer lugar, debe soldar algunos cables para programar la MCU. Pinout se muestra en la imagen:
Conecte los pines 7-8 del conector del teclado; es necesario encenderlo.
Las líneas "GND" y "Vbat" deben estar conectadas a la fuente de alimentación. El rango de voltaje de alimentación es de +2,7 ... + 3,3 V. Debe haber +3,5 V en la línea "Vdd" cuando se suministra energía al módulo.
Las líneas "GND", "SWDIO", "SWCLK", "NRST" deben conectarse al programador ST-LINK. La línea "NRST" es muy importante:el firmware original de la MCU está bloqueado, por lo que esta línea es necesaria para ingresar la MCU al modo de programación.
Algunos programadores tienen esta línea y algunos (económicos) no, pero hay una solución para este problema.
Además, algunos programadores (como el "ST-LINK / V2" original) necesitan que la línea "Vbat" se conecte con la línea "VCC / TVCC" del programador.
Ejemplo de conexiones (este programador no tiene línea "NRST"):
2. Instale la "utilidad ST-LINK" en la PC. Si no tiene experiencia en el uso de ese software, hay muchos tutoriales en la Web.
Necesita configurar la utilidad (Destino -> Configuración):
Si su programador tiene salida "NRST", puede simplemente encenderlo y presionar "Destino -> Conectar" en la utilidad.
Si no tiene esa línea, debe seguir los siguientes pasos:
- Encienda la energía.
- Conecte la línea "NRST" del módulo al GND.
- Presione "Destino -> Conectar" en la utilidad.
- Desconecte rápidamente la línea "NRST" del GND.
- La utilidad debe mostrar la conexión
Debes obtener esa imagen:
3. El flash de la MCU está bloqueado para lectura, por lo que debe deshabilitar la "Protección de lectura". ¡Perderá el firmware original en este paso!
Abra el menú Destino -> "Bytes de opción". Debe haber tales configuraciones:
Cambie "Protección de lectura" a "Deshabilitado" y presione el botón "Deseleccionar todo", luego presione el botón "Aplicar". Intente reiniciar el módulo (desconectando la energía).
Presione Destino -> Conectar. Debe haber información sobre la conexión exitosa en la ventana de registro y debe ver el contenido de la memoria, lleno de 0xFF. Ahora puede cargar firmware personalizado en la MCU.
4. El firmware necesario se coloca aquí:https://github.com/iliasam/Laser_tape_reverse_engineering/tree/master/Code/Firmware_dist_calculation_fast
Seleccione el archivo HEX adecuado para el módulo suyo y descárguelo en la MCU Flash utilizando la "utilidad ST-LINK".
Paso 3:Conexión del módulo del telémetro láser al Arduino
Necesita soldar un cable o algún conector a la almohadilla TX en la placa:
Vea el esquema de conexión a continuación.
En primer lugar, debe verificar que el módulo del telémetro funcione bien. En este paso, no necesita conectar la pantalla OLED al Arduino; simplemente conecte la línea TX del módulo del telémetro láser a la línea TX del Arduino y las líneas eléctricas del módulo a la fuente de alimentación de + 3V.
Cree un boceto vacío y cárguelo en el Arduino. Abra "Monitor de serie" en el IDE de Arduino. Seleccione la velocidad en baudios:250000
Si el módulo del telémetro funciona bien, obtendrá los mismos datos:
De hecho, es mejor utilizar un convertidor USB-UART especializado para esta prueba. Seleccione 256000 velocidad en baudios en su utilidad (es la velocidad en baudios real de la MCU x-40).
En segundo lugar, debe ensamblar el esquema completo con pantalla.
Conecte la línea TX del módulo del telémetro láser a la línea RX del Arduino (debe desconectar ese cable durante la carga del programa en el Arduino).
Si todo funciona bien, obtendrá el mismo resultado:
Puede ver la pantalla con 3 números:
- "COUNT":contador de los valores recibidos
- "AMPL":amplitud de la señal. La barra simbólica ("<--->") a continuación muestra la amplitud gráficamente (en escala logarítmica).
- El valor más grande:distancia en metros y milímetros.
Paso 4:calibración cero
Después de un primer inicio, es necesario calibrar el módulo del telémetro láser.
Debe colocar algún objeto blanco a cierta distancia del módulo. La distancia a este objeto se convertirá en una distancia cero para el módulo del telémetro. Para iniciar el proceso de calibración, debe conectar el teclado desde la cinta métrica láser y presionar el botón más bajo. El módulo emitirá dos pitidos:al inicio y al final de la calibración (la duración de la calibración es de aproximadamente 10 segundos).
Ahora puede utilizar este módulo de telémetro láser.
Enlaces:
1. Github:resultados de ingeniería inversa y código fuente.
2. Habr.com:artículo traducido en Google sobre el proceso de ingeniería inversa con cinta métrica láser.
Lo siento por mi inglés, soy de un país que no habla inglés.
Código
- Bosquejo de Arduino
Boceto de Arduino Arduino
Sin vista previa (solo descarga).
Github
Código para la cinta láser https://github.com/iliasam/Laser_tape_reverse_engineeringEsquemas
Esquema de montaje de la placa de pruebasProceso de manufactura
- Cómo medir la calidad del aire en OpenSensors
- ¿Para qué se utiliza una cortadora láser?
- Monitoreo SMART de temperatura para escuelas
- Biblioteca de puertos IO de 8 bits para Arduino
- Matriz de teclado de prototipos de 64 teclas para Arduino
- TFT Shield para Arduino Nano - Iniciar
- Una entrada analógica aislada para Arduino
- Controlador de respiración Arduino barato (USB-MIDI)
- Trucos para controlar motores de CC
- Robot para navegación interior supercogedora
- Argumentos a favor de 5G en la fabricación