Sensores ultrassônicos HC-SR04 em uma placa Arduino Uno

Colocado sobre

Sensores ultrassônicos HC-SR04 em uma placa Arduino Uno

A leitura em um sensor HC-SR04 em uma placa Arduino é relativamente fácil, mas e se você quiser ler em vários sensores? Como fazer isso de maneira eficiente? Este artigo explica, usando um exemplo, como você pode ler com eficiência em 4 sensores e como pode expandir isso para vários sensores.

Construa 4 sensores ultrassônicos HC-SR04 em uma placa Arduino Uno Construa 4 sensores ultrassônicos HC-SR04 em uma placa Arduino Uno

O que é um HC-SR04

O HC-SR04 é uma placa break-out com sensores ultrassônicos. Neste sinal estão dois objetos cilíndricos, um dos quais está marcado com a letra “T”, que significa “Transmissor”, que significa “transmissor”, enquanto o outro está marcado com a letra “R” para “Receptor”, que significa “receptor”. O transmissor envia uma onda sonora ultrassônica e o receptor “escuta” essa onda sonora colidir com um objeto e ser refletida de volta. O tempo decorrido entre a transmissão e a recepção indica a que distância aquele objeto está do sensor. Morcegos, golfinhos, baleias e sonares em navios funcionam de acordo com um princípio semelhante, e esse princípio é frequentemente chamado de "localização de eco".

Placa de fuga HC-SR04 Placa de fuga HC-SR04

Você pode ouvir uma onda sonora ultrassônica

A menos que você tenha as orelhas do seu cachorro, você não pode ouvir ondas sonoras ultrassônicas. O HC-SR04 usa uma onda sonora com frequência de 40kHz, enquanto um ouvido humano pode ouvir apenas 16kHz e os mais jovens podem ouvir até 20-22kHz. Muito abaixo da frequência de uma onda sonora ultrassônica.

Além disso, uma onda sonora ultrassônica não é uma onda de rádio (como as ondas de um smartphone) e é totalmente inofensiva à saúde.

Como funciona o HC-SR04

Como mencionado anteriormente, o HC-SR04 emite um som ultrassônico, que colide com um objeto e retorna ao sensor. O sensor conta o tempo decorrido entre o envio e o recebimento desse sinal. Se você conhece a velocidade do som, pode calcular a distância entre o sensor e o objeto. Obviamente, o som não viaja infinitamente longe e, como a onda sonora do sensor é relativamente fraca, a faixa de medição também é bastante limitada. O HC-SR04 pode medir distâncias de até aproximadamente 400 cm (4 m). O “ângulo de visão” ou “ângulo de medição” do sensor também não é infinito. Objetos fora de um ângulo de 15° não podem ser detectados pelo sensor. É por isso que às vezes é interessante usar vários sensores, que você coloca em um círculo, por exemplo. Desta forma, você pode aumentar o ângulo de medição.

Leia o sensor

Para ler o HC-SR04 você precisa gerar um pulso de início no pino “trigger” do sensor. A resposta do sensor aparecerá em seu pino “eco”. Ambos os pinos são conectados aos pinos de E/S digitais do Arduino .

Acionar

Para gerar um pulso de início, você deve concluir as seguintes etapas

  1. O pino de disparo deve estar baixo por pelo menos 2µs (microssegundos).
  2. O pino de disparo deve então ser alto por 10µs
  3. Pino de gatilho para baixo

Com o Arduino , você pode fazer isso facilmente com o seguinte trecho de código:

HC-SR04 "Trigger"

Eco

A resposta que aparece no pino de eco do sensor é um pulso cuja duração é igual ao tempo entre a transmissão e a recepção da onda sonora ultrassônica, expressa em µs (microssegundos). Uma possibilidade de medir tal pulso no Arduino é com a função “pulseIn”:

Meet "echo"

Calcular distância

Claro, depois de tudo isso você só sabe o tempo de viagem da onda sonora, mas isso não significa que você sabe a distância. Felizmente, a velocidade do som é conhecida e a distância pode ser calculada com isso:

distância [m] = velocidade_som [m/s] * tempo [s]

e a velocidade do som é 343m/s, então

distância [m] = 343 [m/s] * tempo [s]

No entanto, o HC-SR04 fornece o tempo em µs e, para facilitar a contagem, a distância em cm seria mais conveniente, mas com alguns cálculos a fórmula pode ser ajustada para

distância [cm] = 0,0343 [cm/µs] * tempo [µs]

O único problema que resta agora é que o tempo indicado pelo HC-SR04 é o tempo que o pulso viaja para frente e para trás, e como apenas a distância até o objeto é útil, basta dividir o tempo por 2 :

distância = 0,0343 * (tempo/2)

Configuração de teste simples

Uma configuração de teste rápido para testar a operação do HC-SR04 pode ser realizada com o seguinte esquema e código:

Um sensor HC-SR04 no Arduino Uno Um sensor HC-SR04 no Arduino Uno

Eenvoudige code voor het testen van een HC-SR04 op een Arduino Uno

Multi HC-SR04

A partir daqui fica um pouco mais difícil. Como a função “pulseIn” pausa o código e não é suficientemente precisa, o código estendido usa registradores de porta e interrupções. Se isso soa estranho, você pode encontrar mais informações no site do autor deste artigo: http://kunoichi.be/projects/
(o site está disponível apenas em inglês)

Vários sensores

Para usar vários sensores, você pode proceder de três maneiras:

  1. gatilho separado por sensor; eco separado por sensor
  2. gatilho comum; eco separado por sensor
  3. gatilho separado por sensor; eco comum

gatilho separado por sensor; eco separado por sensor

A maneira mais fácil, e menos eficiente, é conectar cada gatilho e pino de eco de cada sensor a um pino separado no Arduino .
Em outras palavras, 2 pinos no Arduino por sensor.

gatilho comum; eco separado por sensor

Outra forma é conectar todos os triggers dos sensores e conectá-los a 1 pino do Arduino . O pino de eco de cada sensor deve então ser conectado a um pino separado no Arduino . A vantagem, assim como a desvantagem, é que todos os sensores enviam sua resposta ao mesmo tempo. Existe a possibilidade dos sensores interferirem entre si, e você também precisa de um pino de interrupção separado para cada sensor (o Arduino Uno tem apenas 2). Você poderia usar pinos comuns, mas a precisão cairia um pouco.

gatilho separado por sensor; eco comum

Se a leitura super rápida não for necessária, você ainda pode obter uma precisão muito boa com o terceiro método e não tem a desvantagem de os sensores interferirem uns nos outros.
Cada pino de disparo do sensor é conectado separadamente ao Arduino , e todos os pinos de eco são conectados a 1 único pino Arduino . Este pino é chamado de pino de interrupção. Como você decide qual gatilho é controlado, você sabe qual é a resposta do sensor ao pino de eco comum.
Esta é a maneira mais eficiente de usar vários sensores HC-SR04 em uma única placa Arduino .

Esquema

Uma pequena desvantagem com o método de pino de eco comum é que os sensores podem interferir uns com os outros neste pino, mas isso pode ser facilmente remediado usando diodos. A estrutura do sistema é a seguinte:

Esquema 4x sensores HC-SR04 no pino de eco comum Esquema 4x sensores HC-SR04 no pino de eco comum

O diagrama de tempo mostra como os sinais progridem.

  1. O pulso de início (trigger) para o sensor 4 é enviado.
  2. Isso responde ao pino de eco.
  3. O pulso de início (trigger) para o sensor 3 é enviado.
  4. Ele responde ao mesmo pino de eco, mas como o pulso inicial é monitorado, sabe-se de qual sensor vem a resposta.
  5. O pulso de início (trigger) para o sensor 2 é enviado.
  6. ...
  7. Repita a partir do passo 1

O resto é literalmente copiar/colar e pode ser facilmente estendido para vários (ou menos) sensores dessa maneira.

Gráfico de tempo 4 gatilhos, 1 eco Gráfico de tempo 4 gatilhos, 1 eco

O código para leitura dos sensores é o seguinte:
(A explicação do código é fornecida por meio de campos de comentários no próprio código)

Uitbreidbare code voor het uitlezen van meerdere sensoren

Embora este não seja o método mais rápido, e com longas distâncias e muitos sensores o tempo de espera pode ser relativamente alto, este método oferece algumas vantagens

  • apenas 1 pino de interrupção necessário
  • muito facilmente expansível
  • sensores não interferem uns com os outros
  • uso ideal do número de sensores versus pinos de E/S disponíveis

Nota sobre a fonte de alimentação

Como o pino de 5 V no Arduino pode fornecer corrente limitada, é recomendável fornecer uma fonte de alimentação extra de 5 V CC para alimentar os sensores. Por esta razão, uma “fonte de alimentação Breadbard” está incluída na lista de componentes, mas, em essência, ela pode ser substituída por qualquer fonte de alimentação de 5 V CC.

Componentes

Os componentes utilizados neste projeto estão todos disponíveis em Opencircuit, e estão listados abaixo:

postado por Local na rede Internet

Comentários

Webwinkelkeur Kiyoh Trustpilot Opencircuit