Fazendo um telêmetro a laser barato para Arduino
Componentes e suprimentos
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Ferramentas e máquinas necessárias
| ||||
|
Aplicativos e serviços online
|
Sobre este projeto
Precisa de um módulo telêmetro a laser rápido e barato para seu projeto Arduino?
Claro, você pode usar módulos especializados para essa tarefa, mas a maioria deles tem um preço alto. Os módulos VL53L0X / VL53L1X são baratos, mas têm um campo de visão muito grande.
Então eu encontrei uma solução:usar uma fita métrica a laser "X-40" barata como um telêmetro a laser. Esses dispositivos custam US $ 20 ou menos e podem medir distâncias de até 40m com precisão de aproximadamente 3 mm. Mas há dois problemas - não há como obter leituras da fita e as medições são lentas - menos de 1 Hz.
Para resolver esses problemas, fiz engenharia reversa daquela fita métrica a laser e escrevi meu próprio firmware para o STM32 MCU do módulo telêmetro a laser. A velocidade de medição foi importante para mim e posso chegar a ~ 60 Hz, mas a distância máxima estável diminuiu para ~ 6 m (o alcance máximo total é de 37 m, mas não testei).
A precisão da medição da distância pode variar de 1 mm a 10 mm, dependendo da cor do alvo e da distância.
Dimensões do módulo:25x13x50 mm.
AVISO IMPORTANTE:VOCÊ PERDERÁ O FIRMWARE ORIGINAL, PORTANTO O DISPOSITIVO NÃO PODE SER USADO COMO MEDIDA DE FITA LASER MAIS TARDE!
Observe que as fitas métricas a laser "X-40" podem ter diferentes revisões do módulo telêmetro a laser, e meu firmware suporta apenas algumas delas!
"X-40" não é o único nome para fitas métricas a laser com esses módulos - eu sei que existem várias fitas métricas a laser chinesas com módulos adequados.
Etapa 1:desmontagem da fita métrica a laser
Vamos desmontar a fita métrica a laser para obter um módulo de telêmetro a laser.
Você precisa desapertar 7 parafusos da caixa:
Fita métrica a laser desmontada:
Você pode ver um pequeno módulo telêmetro a laser dentro da caixa do dispositivo. Você precisa desconectar os cabos de fita do módulo e remover o módulo da caixa:
Observe que o módulo está marcado como "701A". Meu firmware suporta apenas versões de módulo "512A" e "701A". Vários usuários confirmaram que os módulos "703A" também estão funcionando (não testei).
UPD 11/2019:
Atenção:Foi descoberto que as fitas métricas a laser "x-40" mais recentes vêm com módulos "M88B". A marcação é "88B" no PCB próximo ao MCU. Esses módulos são baseados em STM32F0 MCU (tem pacote QFN-32). Esses módulos não são suportados pelo meu firmware!
UPD 10/2021:
Atenção: adicionado suporte para módulos U85B :veja o link! Eles são usados em tipos modernos de fitas métricas a laser.
Se o seu módulo for compatível, você precisará dessoldar as linhas de alimentação do módulo.
Etapa 2:Programação do módulo telêmetro a laser
Você precisa escrever um firmware especializado para o MCU do módulo para obter a funcionalidade necessária.
1. Em primeiro lugar, você precisa soldar alguns fios para programar o MCU. Pinagem é mostrada na imagem:
Conecte os pinos 7 a 8 do conector do teclado - é necessário ligá-lo.
As linhas "GND" e "Vbat" devem ser conectadas à fonte de alimentação. A faixa de tensão de alimentação é +2,7 ... + 3,3V. Deve haver +3,5 V na linha "Vdd" quando a alimentação é fornecida ao módulo.
As linhas "GND", "SWDIO", "SWCLK", "NRST" devem ser conectadas ao programador ST-LINK. A linha "NRST" é muito importante - o firmware original do MCU está bloqueado, portanto, essa linha é necessária para entrar no modo de programação do MCU.
Alguns programadores têm essa linha e alguns (baratos) não, mas há uma solução alternativa para esse problema.
Além disso, alguns programadores (como o "ST-LINK / V2" original) precisam da linha "Vbat" para ser conectada à linha "VCC / TVCC" do programador.
Exemplo de conexões (este programador não possui linha "NRST"):
2. Instale o "utilitário ST-LINK" no PC. Se você não tem experiência no uso desse software, existem vários tutoriais na web.
Você precisa configurar o utilitário (Destino -> Configurações):
Se o seu programador tiver saída "NRST", você pode simplesmente ligar a energia e pressionar "Destino -> Conectar" no utilitário.
Se não houver essa linha, você precisará seguir estas etapas:
- Ligue a energia.
- Conecte a linha "NRST" do módulo ao GND.
- Pressione "Destino -> Conectar" no utilitário.
- Desconecte rapidamente a linha "NRST" do GND.
- O utilitário deve mostrar a conexão
Você deve ter essa imagem:
3. O flash MCU está bloqueado para leitura, então você precisa desabilitar "Proteção contra leitura". Você perderá o firmware original nesta etapa!
Abra o menu Target -> "Option Bytes". Deve haver essas configurações:
Mude "Read Out Protection" para "Disabled" e pressione o botão "Unselect all", depois pressione o botão "Apply". Tente reiniciar o módulo (desconectando a alimentação).
Pressione Alvo -> Conectar. Deve haver informações sobre a conexão bem-sucedida na janela de log e você deve ver o conteúdo da memória - preenchido com 0xFF. Agora você pode carregar o firmware personalizado para o MCU.
4. O firmware necessário é colocado aqui:https://github.com/iliasam/Laser_tape_reverse_engineering/tree/master/Code/Firmware_dist_calculation_fast
Selecione o arquivo HEX adequado para o seu módulo e baixe-o para o Flash MCU usando o "utilitário ST-LINK".
Etapa 3:conectar o módulo telêmetro a laser ao Arduino
Você precisa soldar um fio ou algum conector à almofada TX na placa:
Veja o esquema de conexão abaixo.
Em primeiro lugar, você precisa verificar se o módulo rangefinder está funcionando bem. Nesta etapa, você não precisa conectar o display OLED ao Arduino - basta conectar a linha TX do módulo telêmetro a laser à linha TX do Arduino e os cabos de força do módulo à fonte de alimentação de + 3V.
Crie um esboço vazio e carregue-o no Arduino. Abra o "Serial Monitor" no Arduino IDE. Selecione a taxa de transmissão:250000
Se o módulo rangefinder estiver funcionando bem, você obterá os mesmos dados:
Na verdade, é melhor usar um conversor USB-UART especializado para este teste. Selecione 256000 baudrate em seu utilitário (é a baudrate real de x-40 MCU).
Em segundo lugar, você precisa montar o esquema completo com display.
Conecte a linha TX do módulo telêmetro a laser à linha RX do Arduino (você precisa desconectar esse fio durante o carregamento do programa para o Arduino).
Se tudo estiver funcionando bem, você obterá o mesmo resultado:
Você pode ver o display com 3 números:
- "COUNT" - contador dos valores recebidos
- "AMPL" - amplitude do sinal. A barra simbólica ("<--->") abaixo mostra a amplitude graficamente (em escala logarítmica).
- O maior valor - distância em metros e milímetros.
Etapa 4:calibração zero
Após uma primeira partida, o módulo telêmetro a laser precisa ser calibrado.
Você precisa colocar algum objeto branco a uma certa distância do módulo. A distância para este objeto se tornará uma distância zero para o módulo rangefinder. Para iniciar o processo de calibração, você precisa conectar o teclado da fita métrica a laser e pressionar o botão mais baixo. O módulo emitirá dois bipes - no início e no final da calibração (a duração da calibração é de quase 10 segundos).
Agora você pode usar este módulo telêmetro a laser.
Links:
1. Github - resultados da engenharia reversa e código-fonte.
2. Habr.com - Artigo traduzido pelo Google sobre o processo de engenharia reversa de fita métrica a laser.
Desculpe pelo meu inglês - eu sou de um país que não fala inglês.
Código
- esboço do Arduino
Esboço do Arduino Arduino
Sem visualização (somente download).
Github
Código para a fita laserhttps://github.com/iliasam/Laser_tape_reverse_engineeringEsquemas
Esquema de montagem da placa de ensaioProcesso de manufatura
- Como medir a qualidade do ar em OpenSensors
- Para que serve um cortador a laser?
- Monitoramento de temperatura SMART para escolas
- Biblioteca de portas IO de 8 bits para Arduino
- Matriz de teclado de prototipagem de 64 teclas para Arduino
- TFT Shield para Arduino Nano - Iniciar
- Uma entrada analógica isolada para Arduino
- Arduino Breath Controller barato (USB-MIDI)
- Robô para navegação interna supercool
- Defendendo o 5G na fabricação