Telêmetro Laser DIY de Baixo Custo para Arduino – Rápido, Confiável e Acessível
Componentes e Materiais
| Componente | Quantidade | |
|---|---|---|
| Arduino Nano R3 | 1 | |
| OLED Elecrow 0.96" 128x64 | 1 | |
| Trena Laser X-40 | 1 | |
| Módulo DC-DC LM2596 | 1 |
Ferramentas e Máquinas Necessárias
- Ferro de solda (genérico)
- Programador ST-LINK
Aplicativos e Serviços Online
- STMicroelectronics ST-LINK Utility
Sobre o Projeto
Precisa de um módulo telêmetro laser rápido e barato para seu projeto Arduino?
Claro, pode usar módulos especializados, mas a maioria tem preço alto. Módulos VL53L0X/VL53L1X são baratos, mas têm campo de visão muito grande.
Encontrei uma solução: usar a trena laser barata "X-40" como telêmetro laser. Esses dispositivos custam $20 ou menos e medem distância até 40m com precisão ~3mm. Mas há dois problemas: não há como obter leituras da trena e as medições são lentas - menos de 1 Hz.
Para resolver, fiz engenharia reversa da trena laser e escrevi firmware próprio para o MCU STM32 do módulo. Velocidade de medição era importante e alcancei ~60 Hz, mas distância máxima estável caiu para ~6m (alcance máximo total 37m, não testei completamente).
Precisão varia de 1mm a 10mm dependendo da cor do alvo e distância.
Dimensões do módulo: 25x13x50 mm.
AVISO IMPORTANTE: VOCÊ PERDERÁ O FIRMWARE ORIGINAL, O DISPOSITIVO NÃO PODERÁ SER USADO COMO TRENA LASER DEPOIS!
Note que trenas "X-40" podem ter diferentes revisões do módulo, e meu firmware suporta apenas algumas!
"X-40" não é o único nome - existem várias trenas laser chinesas com módulos adequados.
Passo 1: Desmontando a Trena Laser
Desmonte a trena para obter o módulo telêmetro.

Desparafuse 7 parafusos do gabinete:

Trena desmontada:

Dentro do gabinete, há um pequeno módulo telêmetro. Desconecte os cabos flat e remova o módulo:

O módulo é marcado como "701A". Meu firmware suporta apenas versões "512A" e "701A". Vários usuários confirmaram que módulos "703A" também funcionam (não testei).
ATUALIZAÇÃO 11/2019: Novas trenas "X-40" vêm com módulos "M88B". Marcação "88B" no PCB perto do MCU. Baseados em STM32F0 (pacote QFN-32). Esses módulos NÃO são suportados pelo meu firmware!
ATUALIZAÇÃO 10/2021: Adicionado suporte a módulos U85B: veja link! Usados em trenas laser modernas.

Se seu módulo é suportado, dessolde as linhas de alimentação.
Passo 2: Programando o Módulo Telêmetro
Grave firmware especializado no MCU do módulo.
- Solde fios para programar o MCU. Pinout na imagem:

Conecte pinos 7-8 do conector do teclado - necessário para alimentar.
Linhas "GND" e "Vbat" à fonte. Tensão +2.7...+3.3V. Deve haver +3.5V na linha "Vdd" quando alimentado.
Linhas "GND", "SWDIO", "SWCLK", "NRST" ao programador ST-LINK. Linha "NRST" é crucial - firmware original do MCU é travado, essa linha entra no modo programação.
Alguns programadores têm essa linha, outros (baratos) não, mas há workaround.
Alguns (como "ST-LINK/V2" original) precisam "Vbat" conectado com "VCC/TVCC" do programador.
Exemplo de conexões (programador sem linha NRST):

- Instale "ST-LINK utility" no PC. Há muitos tutoriais na web.
Configure a utility (Target → Settings):

Se seu programador tem saída "NRST", ligue a energia e pressione "Target → Connect".
Se não tem, faça:
- Ligue a energia.
- Conecte linha "NRST" do módulo ao GND.
- Pressione "Target → Connect".
- Desconecte "NRST" do GND rapidamente.
- Utility deve mostrar conexão.

- Flash do MCU está travado para leitura. Desabilite "Read Out Protection". Perderá firmware original neste passo!
Abra Target → "Option Bytes":

Mude "Read Out Protection" para "Disabled", pressione "Unselect all" e "Apply". Reinicie módulo (desconecte energia).
Pressione Target → Connect. Deve mostrar conexão bem-sucedida e memória preenchida com 0xFF. Agora grave firmware personalizado.
- Firmware necessário: https://github.com/iliasam/Laser_tape_reverse_engineering/tree/master/Code/Firmware_dist_calculation_fast
Selecione arquivo HEX adequado para seu módulo e grave no MCU Flash usando "ST-LINK utility".
Passo 3: Conectando Módulo Telêmetro ao Arduino
Solde um fio ou conector no pad TX da placa:

Veja esquemático de conexão abaixo.
Primeiro, verifique se o módulo funciona. Não precisa conectar OLED ainda - apenas conecte TX do módulo ao TX do Arduino, e alimentação do módulo a +3V.
Crie sketch vazio e carregue no Arduino. Abra "Serial Monitor" na Arduino IDE. Baud rate: 250000.
Se funcionando, você verá os dados.
Melhor usar conversor USB-UART especializado. Selecione 256000 baudrate (baudrate real do MCU X-40).
Segundo, monte esquemático completo com display.
Conecte TX do módulo ao RX do Arduino (desconecte esse fio durante upload de programa ao Arduino).
Se tudo ok, verá resultado:

Display mostra 3 números:
- "COUNT" - contador de valores recebidos
- "AMPL" - amplitude do sinal. Barra simbólica ("<---") mostra amplitude graficamente (escala logarítmica).
- Maior valor - distância em metros e milímetros.
Passo 4: Calibração Zero
Após primeiro início, módulo precisa calibração.
Coloque objeto branco a certa distância do módulo. Essa distância vira zero para o telêmetro. Para iniciar calibração, conecte teclado da trena e pressione botão inferior. Módulo bipa duas vezes - início e fim (calibração ~10 segundos).

Agora pode usar este módulo telêmetro laser.
Links:
- GitHub - resultados engenharia reversa e código fonte.
- Habr.com - artigo traduzido sobre engenharia reversa da trena laser.
Desculpe meu inglês - sou de país não falante de inglês.
Código
Sketch Arduino
Sem preview (apenas download).
GitHub
Código para a trena laser: https://github.com/iliasam/Laser_tape_reverse_engineering
Esquemáticos
Esquemático montagem em protoboard

Processo de manufatura
- Monitoramento de Qualidade do Ar com OpenSensors: Guia Arduino e Python
- Aplicações de Cortadora a Laser: Da Madeira à Aeroespacial
- Sistema Inteligente de Monitoramento de Temperatura para Escolas: Preciso, Tempo Real e Seguro
- Biblioteca Eficiente de Porta IO de 8 Bits para Arduino – Expanda o Controle Digital
- Teclado Prototípico de 64 Teclas com Arduino: Matriz com Registradores de Deslocamento
- Shield TFT 2,8" para Arduino Nano – Display SPI 320×240 de Alto Desempenho
- Circuito de Entrada Analógica Isolada para Arduino
- Controlador de Respiração Arduino Acessível com Integração USB-MIDI
- Kit de Robô de Navegação Interna Inteligente para Projetos Arduino
- Por que o 5G é Essencial para a Manufatura Inteligente Moderna