Índice:

Comparando os telêmetros sonar LV-MaxSonar-EZ e HC-SR04 com Arduino: 20 etapas (com imagens)
Comparando os telêmetros sonar LV-MaxSonar-EZ e HC-SR04 com Arduino: 20 etapas (com imagens)

Vídeo: Comparando os telêmetros sonar LV-MaxSonar-EZ e HC-SR04 com Arduino: 20 etapas (com imagens)

Vídeo: Comparando os telêmetros sonar LV-MaxSonar-EZ e HC-SR04 com Arduino: 20 etapas (com imagens)
Vídeo: Review: Why is so cool the Flip32 / Naze32 flight controller board? 2024, Novembro
Anonim
Comparando os telêmetros sonar LV-MaxSonar-EZ e HC-SR04 com o Arduino
Comparando os telêmetros sonar LV-MaxSonar-EZ e HC-SR04 com o Arduino
Comparando os telêmetros sonar LV-MaxSonar-EZ e HC-SR04 com o Arduino
Comparando os telêmetros sonar LV-MaxSonar-EZ e HC-SR04 com o Arduino

Acho que muitos projetos (especialmente robôs) requerem, ou podem se beneficiar, medir a distância de um objeto em tempo real. Os telêmetros de sonar são relativamente baratos e podem ser facilmente conectados a um microcontrolador como o Arduino.

Este Instructable compara dois dispositivos range-finder de sonar fáceis de adquirir, mostrando como conectá-los ao Arduino, qual código é necessário para ler os valores deles e como eles 'se comparam' entre si em diferentes situações. A partir disso, espero que você obtenha uma visão dos prós e contras dos dois dispositivos que o ajudarão a usar o dispositivo mais apropriado em seu próximo projeto.

Eu queria comparar o dispositivo extremamente popular HC-SR04 (olho de inseto) ao dispositivo menos comum LV-MaxSonar-EZ para ver quando eu poderia querer usar um em vez do outro. Gostaria de compartilhar minhas descobertas e configuração para que você possa experimentar os dois e decidir qual usar em seu próximo projeto.

Por que esses dois …

Por que o HC-SR04? O 'Bug-Eye' HC-SR04 é extremamente popular - por alguns motivos:

  • É barato - $ 2 ou menos se comprado a granel
  • É relativamente fácil fazer interface com
  • Muitos, muitos projetos usam - por isso é bem conhecido e bem compreendido

Por que o LV-MaxSonar-EZ?

  • É muito fácil fazer interface com
  • Tem um formato bom / fácil de incorporar em um projeto
  • Possui 5 versões que atendem a diferentes requisitos de medição (ver ficha técnica)
  • É (normalmente) muito mais preciso e confiável do que o HC-SR04
  • É acessível - $ 15 a $ 20

Além disso, espero que você encontre partes e peças no código do Arduino que escrevi para a comparação, úteis em seus projetos, mesmo além de aplicativos range-finder.

Premissas:

  • Você está familiarizado com o Arduino e o IDE do Arduino
  • O Arduino IDE está instalado e funcionando em sua máquina de desenvolvimento de preferência (PC / Mac / Linux)
  • Você tem uma conexão do IDE do Arduino ao seu Arduino para fazer upload e executar programas e se comunicar

Existem Instructables e outros recursos para ajudá-lo com isso, se necessário.

Suprimentos

  • Localizador de alcance HC-SR04 'Bug-Eye'
  • LV-MaxSonar-EZ (0, 1, 2, 3, 4 - estou usando um '1', mas todas as versões têm a mesma interface)
  • Arduino UNO
  • Placa de ensaio sem solda
  • Cabeçalho do pino - 7 pinos 90 ° (para o dispositivo MaxSonar, veja * abaixo para usar 180 °)
  • Jumper de cabo plano - 5 fios, macho-macho
  • Jumper de cabo de fita - 2 fios, macho-macho
  • Fio jumper - macho-macho
  • Fio de conexão - vermelho e preto (para alimentação do Arduino para placa de ensaio e placa de ensaio para dispositivos)
  • Computador com Arduino IDE e cabo USB para conectar ao Arduino UNO

* O MaxSonar não vem com um cabeçalho anexado, então você pode usar um cabeçalho que seja mais apropriado para o seu projeto. Para este Instructable, usei um cabeçalho de 90 ° para facilitar a conexão à placa de ensaio. Em alguns projetos, uma plataforma de 180 ° (reta) pode ser melhor. Incluí uma foto para mostrar como fazer isso para que você não precise trocá-los. Se você preferir usar um cabeçalho de 180 °, você precisará de um jumper de cabo de fita macho-fêmea de 7 fios adicional para conectar como minha foto mostra.

Repositório Git Hub: arquivos de projeto

Etapa 1: a perseguição …

A caçada…
A caçada…

Antes de entrarmos em detalhes sobre como conectar as coisas para que você possa fazer seus próprios experimentos com esses dois dispositivos fantásticos, gostaria de descrever algumas coisas que espero que este Instructable o ajude.

Como o dispositivo MaxSonar é menos usado e menos compreendido em comparação com o dispositivo HC-SR04, eu queria mostrar:

  • Como conectar o dispositivo MaxSonar a um microcontrolador (neste caso, um Arduino)
  • Como fazer medições das diferentes saídas do dispositivo MaxSonar
  • Compare a interface do dispositivo MaxSonar com o dispositivo HC-SR04
  • Teste a capacidade de medir a distância de objetos com superfícies diferentes
  • Por que você pode escolher um dispositivo em vez do outro (ou usar ambos em conjunto)

Espero que este Instructable ajude você nesta perseguição …

Etapa 2: Primeiros passos - Configuração do Arduino-breadboard

Primeiros passos - Configuração do Arduino-Breadboard
Primeiros passos - Configuração do Arduino-Breadboard

Se você tem feito protótipos com o Arduino, provavelmente já tem uma configuração do Arduino-Breadboard com a qual se sente confortável. Em caso afirmativo, tenho certeza de que você pode usá-lo para este Instructable. Se não, foi assim que configurei o meu - fique à vontade para copiá-lo neste e em projetos futuros.

  1. Eu prendo o Arduino UNO e uma pequena placa de ensaio sem fio a um pedaço de plástico de 3-3 / 8 "x 4-3 / 4" (8,6 x 12,0 cm) com pés de borracha na parte inferior.
  2. Eu uso um fio de conexão 22 AWG vermelho e preto para conectar + 5V e GND do Arduino à faixa de distribuição de energia da placa de ensaio
  3. Incluo um capacitor de tântalo de 10 µF na faixa de distribuição de aterramento para ajudar a reduzir o ruído de energia (mas este projeto não exige isso)

Isso fornece uma boa plataforma que é fácil de usar como protótipo.

Etapa 3: Conecte o LV-MaxSonar-EZ

Ligue o LV-MaxSonar-EZ
Ligue o LV-MaxSonar-EZ
Ligue o LV-MaxSonar-EZ
Ligue o LV-MaxSonar-EZ
Ligue o LV-MaxSonar-EZ
Ligue o LV-MaxSonar-EZ

Com um cabeçalho de 90 ° soldado no dispositivo MaxSonar, é fácil conectá-lo à placa de ensaio. O cabo de fita de 5 pinos então conecta o MaxSonar ao Arduino como visto no diagrama. Além do cabo de fita, uso pequenos pedaços de fio vermelho e preto do barramento de distribuição de energia para fornecer energia ao dispositivo.

Fiação:

MaxSonar Arduino Cor
1 (BW) Power-GND Amarelo
2 (PW) Digital-5 Verde
3 (AN) Analog-0 Azul
4 (RX) Digital-3 Roxa
5 (TX) Digital-2 Cinza
6 (+5) +5 BB-PWR Rail vermelho
7 (GND) GND BB-PWR Rail Preto

Observação:

Não deixe que o número de conexões usadas neste Instructable o impeça de considerar o MaxSonar para o seu projeto. Este Instructable usa todas as opções de interface MaxSonar para ilustrar como funcionam e compará-los entre si e com o dispositivo HC-SR04. Para um determinado uso (usando uma das opções de interface), um projeto geralmente usará um ou dois dos pinos de interface (mais alimentação e aterramento).

Etapa 4: Conecte o HC-SR04

O HC-SR04 normalmente vem com um cabeçalho de 90 ° já conectado, por isso é fácil conectá-lo à placa de ensaio. O cabo de fita de 2 pinos então conecta o HC-SR04 ao Arduino como visto no diagrama. Além do cabo de fita, uso pequenos pedaços de fio vermelho e preto do barramento de distribuição de energia para fornecer energia ao dispositivo.

HC-SR04 Arduino Cor
1 (VCC) +5 BB-PWR Rail vermelho
2 (TRIG) Digital-6 Amarelo
3 (ECO) Digital-7 laranja
4 (GND) GND BB-PWR Rail Preto

Etapa 5: Conecte o seletor de opções 'HC-SR04'

Quando comecei este projeto, minha intenção era simplesmente testar as diferentes opções de interface do dispositivo MaxSonar. Depois de colocá-lo em funcionamento, decidi que seria bom compará-lo ao onipresente dispositivo HC-SR04 (bugeye). No entanto, eu queria ser capaz de executar / testar sem ele incluído, então adicionei uma opção / teste no código.

O código verifica um pino de entrada para ver se o dispositivo HC-SR04 deve ser incluído na leitura e saída da medição.

No diagrama, isso é mostrado como um switch, mas na placa de ensaio eu simplesmente uso um fio jumper (como pode ser visto nas fotos). Se o fio estiver conectado ao GND, o HC-SR04 será incluído nas medições. O código 'puxa para cima' (torna a entrada alta / verdadeira) no Arduino, de modo que, se não for puxado para baixo (conectado ao GND), o HC-SR04 não será medido.

Embora este Instructable tenha se transformado em uma comparação dos dois dispositivos, decidi deixar isso para ilustrar como você pode incluir / excluir diferentes dispositivos / opções em seu projeto.

Tábua de pão Arduino Cor
GND BB-PWR Rail Digital-12 Branco

Etapa 6: Fazendo tudo funcionar …

Fazendo tudo funcionar …
Fazendo tudo funcionar …
Fazendo tudo funcionar …
Fazendo tudo funcionar …
Fazendo tudo funcionar …
Fazendo tudo funcionar …

Agora que tudo está conectado - é hora de fazer as coisas funcionarem!

Conforme mencionado em 'Suposições' - não vou explicar como o IDE do Arduino funciona ou como programar um Arduino (em detalhes).

As seções a seguir detalham o código do Arduino incluído neste projeto.

Descompacte o arquivo completo em um local usado para o desenvolvimento do Arduino. Carregue o código `MaxSonar-outputs.ino` em seu IDE Arduino e vamos começar!

Etapa 7: Layout do projeto

O projeto contém informações sobre o dispositivo LV-MaxSonar-EZ, o diagrama de circuito, um README e o código do Arduino. O diagrama de circuito está no formato Fritzing, bem como uma imagem PNG. O README está no formato Markdown.

Etapa 8: Código de introdução …

Neste Instructable, não posso passar por todos os aspectos do código. Cubro alguns dos detalhes de alto nível. Eu encorajo você a ler o comentário de nível superior no código e se aprofundar nos métodos.

Os comentários fornecem muitas informações que não vou repetir aqui.

Existem algumas coisas que quero apontar no código de 'configuração' …

  • O `_DEBUG_OUTPUT` - variável e instruções #define
  • Definições dos 'pinos' do Arduino usados para a interface
  • Definições dos fatores de conversão usados nos cálculos

A depuração é usada em todo o código e mostrarei como ela pode ser ativada / desativada dinamicamente.

As 'definições' são usadas para os pinos e conversões do Arduino para facilitar o uso desse código em outros projetos.

Depurando …

A seção 'Debugging' define uma variável e algumas macros que facilitam a inclusão de informações de depuração na saída serial sob demanda.

A variável booleana `_DEBUG_OUTPUT` é definida como falsa no código (pode ser definida como verdadeira) e é usada como um teste nas macros` DB_PRINT… `. Ele pode ser alterado dinamicamente no código (como visto no método `setDebugOutputMode`).

Globais …

Após as definições, o código cria e inicializa algumas variáveis globais e objetos.

  • SoftwareSerial (consulte a próxima seção)
  • _loopCount - usado para gerar um cabeçalho a cada 'n' linhas
  • _inputBuffer - usado para coletar entrada serial / terminal para opções de processo (depuração ativado / desativado)

Etapa 9: Software Arduino-Serial …

Uma das opções de interface MaxSonar é um fluxo de dados serial. No entanto, o Arduino UNO fornece apenas uma única conexão de dados serial, que é usada / compartilhada com a porta USB para se comunicar com o IDE do Arduino (computador host).

Felizmente, há um componente de biblioteca incluído no IDE do Arduino que usa um par de pinos de E / S digital do Arduino para implementar uma interface de E / S serial. Uma vez que a interface serial MaxSonar usa 9600 BAUD, esta interface de 'software' é perfeitamente capaz de lidar com a comunicação.

Para aqueles que usam um Arduino-Mega (ou outro dispositivo que possui várias portas seriais HW), sinta-se à vontade para ajustar o código para usar uma porta serial física e eliminar a necessidade do SW-Serial.

O método `setup` inicializa a interface` SoftwareSerial` a ser usada com o dispositivo MaxSonar. Apenas o recebimento (RX) é necessário. A interface é 'invertida' para corresponder à saída do MaxSonar.

Etapa 10: Código - Configuração

Conforme descrito acima, o método `setup` inicializa a interface` SoftwareSerial`, bem como a interface serial física. Ele configura os pinos de E / S do Arduino e envia um cabeçalho.

Etapa 11: Código - Loop

O código `loop` é executado através do seguinte:

  • Gerar um cabeçalho (usado para depuração e plotadora)
  • Acione o MaxSonar para fazer uma medição
  • Leia o valor MaxSonar Pulse-Width
  • Leia o valor MaxSonar Serial-Data
  • Leia o valor analógico MaxSonar
  • Marque a opção 'HC-SR04' e, se habilitado:

    Acione e leia o dispositivo HC-SR04

  • Envie os dados em um formato delimitado por tabulação que pode ser usado pelo plotter serial
  • Espere até que tenha decorrido tempo suficiente para que outra medição possa ser feita

Etapa 12: Código - acione o MaxSonar. Leia o valor PW

O MaxSonar possui dois modos: 'acionado' e 'contínuo'

Este Instructable usa o modo 'acionado', mas muitos projetos podem se beneficiar do uso do modo 'contínuo' (consulte a ficha técnica).

Ao usar o modo 'acionado', a primeira saída válida é da saída Pulse-Width (PW). Depois disso, o resto das saídas são válidas.

O `tiggerAndReadDistanceFromPulse` pulsa o pino do gatilho no dispositivo MaxSonar e lê o valor de distância de largura de pulso resultante

Observe que, ao contrário de muitos outros dispositivos de sonar, o MaxSonar lida com a conversão de ida e volta, de modo que a distância lida é a distância até o alvo.

Este método também atrasa o suficiente para que as outras saídas do dispositivo sejam válidas (serial, analógica).

Etapa 13: Código - Leia o valor de série MaxSonar

Após o MaxSonar ter sido acionado (ou quando no modo 'contínuo'), se a opção de saída serial estiver habilitada (através do controle 'BW - Pin-1'), um fluxo de dados serial no formato "R nnn" é enviado, seguido por um RETORNO DE CARRO '\ r'. O 'nnn' é o valor em polegadas do objeto.

O método `readDistanceFromSerial` lê os dados seriais (da porta serial do software) e converte o valor 'nnn' em decimal. Inclui um tempo limite à prova de falhas, caso um valor serial não seja recebido.

Etapa 14: Código - Leia o valor analógico MaxSonar

A porta analógica MaxSonar fornece continuamente uma tensão de saída proporcional à última distância medida. Este valor pode ser lido a qualquer momento após a inicialização do dispositivo. O valor é atualizado dentro de 50 ms da última leitura de distância (modo disparado ou contínuo).

O valor é (Vcc / 512) por polegada. Portanto, com um Vcc do Arduino de 5 volts, o valor será de ~ 9,8 mV / in. O método `readDistanceFromAnalog` lê o valor da entrada analógica do Arduino e o converte em um valor de 'polegada'.

Etapa 15: Código - Acione e leia o HC-SR04

Embora existam bibliotecas para ler o HC-SR04, descobri que algumas delas não são confiáveis com vários dispositivos que testei. Eu descobri que o código que incluí no método `sr04ReadDistance` é simples e mais confiável (tanto quanto o dispositivo HC-SR04 barato pode ser).

Este método configura e aciona o dispositivo HC-SR04 e, em seguida, espera para medir a largura do pulso de retorno. Medir a largura de pulso inclui um tempo limite para lidar com o problema do HC-SR04 de uma duração de pulso muito longa quando ele não consegue encontrar um alvo. Uma largura de pulso maior que uma distância alvo de ~ 10 pés é considerada como nenhum objeto ou um objeto que não pode ser reconhecido. Se o tempo limite for atingido, um valor '0' será retornado como a distância. Esta 'distância' (largura de pulso) pode ser ajustada usando os valores #define.

A largura de pulso é convertida em uma distância de ida e volta antes de ser retornada como a distância para o objeto.

Etapa 16: Código - Suporte para plotadora serial IDE Arduino

Código - Suporte para plotadora serial IDE Arduino
Código - Suporte para plotadora serial IDE Arduino

Agora, para a saída!

O método `loop` aciona a coleta da medição de distância dos dois dispositivos - mas o que fazemos com ele?

Bem, é claro, vamos enviá-lo para que possa ser visto no console - mas queremos mais!

O Arduino IDE também fornece a interface Serial Plotter. Usaremos isso para fornecer um gráfico em tempo real da distância até nosso objeto a partir das saídas de nossos dois dispositivos.

O plotter serial aceita um cabeçalho que contém rótulos de valor e, em seguida, várias linhas de valores delimitados para serem plotados como um gráfico. Se os valores forem produzidos regularmente (uma vez a cada 'tantos segundos'), o gráfico fornece uma visualização da distância até o objeto ao longo do tempo.

O método `loop` emite os três valores do MaxSonar e o valor do HC-SR04 em um formato separado por tabulação que pode ser usado com o plotter serial. Uma vez a cada 20 linhas, ele produz o cabeçalho (apenas no caso de o plotter serial ser ativado no meio do fluxo).

Isso permite visualizar assim a distância até o obstáculo e também ver a diferença nos valores retornados pelos dois equipamentos.

Etapa 17: Código - Depurando …

Código - Depurando …
Código - Depurando …
Código - Depurando …
Código - Depurando …

A depuração é uma necessidade. Como você pode rastrear um problema quando algo não funciona conforme o esperado?

Uma primeira linha de compreensão geralmente consiste em algumas saídas de texto 'simples' que podem indicar o que está acontecendo. Eles podem ser adicionados ao código quando e onde necessário para rastrear um problema e, em seguida, removidos quando o problema for resolvido. No entanto, adicionar e remover o código é demorado e, por si só, pode levar a outros problemas. Às vezes, é melhor habilitá-lo e desabilitá-lo dinamicamente, deixando o código-fonte sozinho.

Neste Instructable, incluí um mecanismo para habilitar e desabilitar as instruções de depuração de impressão (saída serial) dinamicamente a partir da entrada lida do Arduino IDE Serial Monitor (em uma próxima versão, o Serial Plotter deverá fornecer essa entrada também).

O booleano `_DEBUG_OUTPUT` é usado em vários #define métodos de impressão que podem ser usados dentro do código. O valor da variável _DEBUG_OUTPUT é usado para habilitar a impressão (envio de saída) ou não. O valor pode ser alterado dinamicamente dentro do código, como o método `setDebugOutputMode` faz.

O método `setDebugOutputMode` é chamado do` loop` com base na entrada recebida da entrada serial. A entrada é analisada para ver se corresponde a "debug on / off | true / false" para habilitar / desabilitar o modo de depuração.

Etapa 18: Conclusão

Espero que esta configuração simples de hardware e o código de exemplo possam ajudá-lo a entender as diferenças entre os dispositivos HC-SR04 e LV-MaxSonar-EZ. Ambos são muito fáceis de usar e acredito que cada um tem seus benefícios. Saber quando usar um em vez de outro pode ser fundamental para um projeto bem-sucedido.

BTW - Eu sugeri uma maneira muito fácil de usar para medir com precisão a distância de um objeto usando o LV-MaxSonar-EZ … Você pode usar a saída analógica (um fio) e o modo de medição contínua para ler a distância quando necessário usando o simples código em `readDistanceFromAnalog` diretamente da entrada analógica do Arduino. Um fio e (condensado) uma linha de código!

Etapa 19: Conexão MaxSonar alternativa (usando cabeçalho de 180 °)

Conexão Alternativa MaxSonar (usando Cabeçalho 180 °)
Conexão Alternativa MaxSonar (usando Cabeçalho 180 °)
Conexão alternativa MaxSonar (usando cabeçalho de 180 °)
Conexão alternativa MaxSonar (usando cabeçalho de 180 °)
Conexão Alternativa MaxSonar (usando Cabeçalho 180 °)
Conexão Alternativa MaxSonar (usando Cabeçalho 180 °)

Como mencionei, o MaxSonar não vem com um cabeçalho conectado. Assim, você pode usar qualquer conexão que seja mais apropriada para o seu projeto. Em alguns casos, uma plataforma de 180 ° (reta) pode ser mais apropriada. Se for esse o caso, gostaria de mostrar rapidamente como você pode usar isso com este Instructable. Esta ilustração mostra um MaxSonar com um cabeçalho reto conectado à placa de ensaio com um cabo de fita macho-fêmea e, em seguida, conectado ao Arduino conforme descrito no restante do artigo.

Etapa 20: Código Arduino

O código do Arduino está na pasta 'MaxSonar-outputs' do projeto no Sonar Range-Finder Comparison

Recomendado: