Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-13 06:58
No momento, estou planejando alguns trabalhos de interior para a próxima primavera, mas como acabei de adquirir uma casa velha, não tenho nenhuma planta da casa. Comecei a medir distâncias de parede a parede usando uma régua, mas é lento e sujeito a erros. Pensei em comprar um telêmetro para facilitar o processo, mas encontrei um artigo antigo sobre como construir seu próprio telêmetro usando um laser e uma câmera. Acontece que tenho esses componentes em minha oficina.
O projeto é baseado neste artigo:
A única diferença é que estarei construindo o rangefinder usando um Raspberry Pi Zero W, um LCD e o módulo Raspberry Pi Camera. Também vou usar o OpenCV para rastrear o laser.
Suponho que você seja um especialista em tecnologia e que se sinta confortável usando Python e a linha de comando. Neste projeto, estou usando o Pi no modo sem cabeça.
Vamos começar!
Etapa 1: Lista de Materiais
Para este projeto, você precisará de:
- um laser barato de 6mm 5mW
- um resistor de 220 Ω
- um transistor 2N2222A ou algo equivalente
- um Raspberry Pi Zero W
- uma câmera Raspberry Pi v2
- um visor LCD Nokia 5110 ou equivalente
- alguns fios de ligação e uma pequena placa de ensaio
Usei minha impressora 3D para imprimir um gabarito que me ajudou durante os experimentos. Também pretendo usar a impressora 3D para construir um gabinete completo para o telêmetro. Você pode fazer totalmente sem.
Etapa 2: construir um gabarito de laser e câmera
O sistema assume uma distância fixa entre a lente da câmera e a saída do laser. Para facilitar os testes imprimi um gabarito no qual posso montar a câmera, o laser e um pequeno circuito de acionamento do laser.
Usei as dimensões do módulo da câmera para construir o suporte para a câmera. Usei principalmente um paquímetro digital e uma régua de precisão para fazer as medições. Para o laser, criei um orifício de 6 mm com um pouco de reforço para garantir que o laser não se mova. Tentei manter espaço suficiente para ter uma pequena placa de ensaio fixada na parte de trás do gabarito.
Usei o Tinkercad para a construção, você pode encontrar o modelo aqui:
Há uma distância de 3,75 cm entre o centro da lente do laser e o centro da lente da câmera.
Etapa 3: Conduzindo o laser e o LCD
Eu segui este tutorial https://www.algissalys.com/how-to/nokia-5110-lcd-on-raspberry-pi para acionar o display LCD com o Raspberry Pi Zero. Em vez de editar o arquivo /boot/config.txt, você pode habilitar a interface SPI usando sudo raspi-config por meio da linha de comando.
Estou usando o Raspberry Pi Zero no modo sem cabeça usando o mais recente, na data, Raspbian Stretch. Não cobrirei a instalação neste Instructable, mas você pode seguir este guia: https://medium.com/@danidudas/install-raspbian-jessie-lite-and-setup-wi-fi-without-access-to- linha de comando ou usando a rede 97f065af722e
Para ter um ponto de laser brilhante, estou usando o trilho 5V do Pi. Para isso, estarei usando um transistor (2N2222a ou equivalente) para acionar o laser usando o GPIO. Um resistor de 220 Ω na base do transistor permite corrente suficiente através do laser. Estou usando RPi. GPIO para manipular o Pi GPIO. Eu conectei a base do transistor ao pino GPIO22 (o 15º pino), o emissor ao solo e o coletor ao diodo laser.
Não se esqueça de habilitar a interface da câmera usando sudo raspi-config através da linha de comando.
Você pode usar este código para testar sua configuração:
Se tudo correr bem, você deve ter um arquivo dot-j.webp
No código, configuramos a câmera e o GPIO, depois habilitamos o laser, capturamos a imagem e desabilitamos o laser. Como estou executando o Pi no modo sem cabeça, preciso copiar as imagens do meu Pi para o computador antes de exibi-las.
Neste ponto, seu hardware deve estar configurado.
Etapa 4: Detectando o laser usando OpenCV
Primeiro, precisamos instalar o OpenCV no Pi. Você basicamente tem três maneiras de fazer isso. Você pode instalar a versão empacotada antiga com o apt. Você pode compilar a versão que quiser, mas neste caso o tempo de instalação pode ir até 15 horas e a maior parte para a compilação real. Ou, na minha abordagem preferida, você pode usar uma versão pré-compilada do Pi Zero que é fornecida por terceiros.
Por ser mais simples e rápido, usei um pacote de terceiros. Você pode encontrar as etapas de instalação neste artigo: https://yoursunny.com/t/2018/install-OpenCV3-PiZero/ Tentei muitas outras fontes, mas seus pacotes não estavam atualizados.
Para rastrear um apontador laser, atualizei o código de https://github.com/bradmontgomery/python-laser-tracker para usar o módulo da câmera Pi em vez de um dispositivo USB. Você pode usar o código diretamente se não tiver um módulo de câmera Pi e quiser usar uma câmera USB.
Você pode encontrar o código completo aqui:
Para executar este código, você precisará instalar os pacotes Python: pillow e picamera (sudo pip3 install pillow picamera).
Etapa 5: Calibração do Range Finder
No artigo original, o autor projetou um procedimento de calibração para obter os parâmetros necessários para transformar as coordenadas y em uma distância real. Usei minha mesa da sala para as calibrações e uma velha peça de kraft. A cada 10 cm ou mais, anotei as coordenadas xey em uma planilha: https://docs.google.com/spreadsheets/d/1OTGu09GLAt … Para garantir que tudo funcionou corretamente, em cada etapa, verifiquei as imagens capturadas para ver se o laser foi rastreado corretamente. Se você usar um laser verde ou se o seu laser não for rastreado corretamente, será necessário ajustar o matiz, a saturação e o limite de valor do programa de acordo.
Depois de concluída a fase de medição, é hora de realmente calcular os parâmetros. Como o autor, usei uma regressão linear; na verdade, o Google Spreadsheet fez o trabalho para mim. Em seguida, reutilizei esses parâmetros para calcular uma distância estimada e compará-la com a distância real.
Agora é hora de injetar os parâmetros no programa de telêmetro para medir distâncias.
Etapa 6: medindo distâncias
No código: https://gist.github.com/kevinlebrun/e767a46855e5fd501d820e1c5fcc527c Atualizei as variáveis HEIGHT, GAIN e OFFSET de acordo com as medições de calibração. Usei a fórmula da distância no artigo original para estimar a distância e imprimi a distância usando o display LCD.
O código irá primeiro configurar a câmera e o GPIO, então queremos acender a luz de fundo do LCD para ver melhor as medições. A entrada LCD está conectada ao GPIO14. A cada 5 segundos mais ou menos, nós iremos:
- habilitar o diodo laser
- capturar a imagem na memória
- desabilite o diodo laser
- rastreie o laser usando os filtros de alcance HSV
- gravar a imagem resultante no disco para fins de depuração
- calcule a distância com base na coordenada y
- escreva a distância no display LCD.
Embora as medidas sejam altamente precisas e precisas o suficiente para o meu caso de uso, há muito espaço para melhorias. Por exemplo, o ponto do laser é de qualidade muito ruim e a linha do laser não está realmente centralizada. Com um laser de melhor qualidade, as etapas de calibração serão mais precisas. Mesmo a câmera não está muito bem posicionada no meu gabarito, ela se inclina para baixo.
Também posso aumentar a resolução do rangefinder girando a câmera em 90º usando o full com e aumentar a resolução para o máximo suportado pela câmera. Com a implementação atual, estamos limitados a uma faixa de 0 a 384 pixels, poderíamos aumentar o limite superior para 1640, 4 vezes a resolução atual. A distância será ainda mais precisa.
Como acompanhamento, vou precisar trabalhar nas melhorias de precisão que mencionei acima e construir um gabinete para o telêmetro. O gabinete precisará ter uma profundidade precisa para facilitar as medições de parede a parede.
Em suma, o sistema atual é suficiente para mim e vai me poupar algum dinheiro fazendo meu plano de casa!