Início
/
Projetos Arduino
/
Projetos Squids
/
Intermediário
/
I15 - Como usar o sensor ultrassônico HC-SR04 com Arduino sem o auxílio de biblioteca
I15 - Como usar o sensor ultrassônico HC-SR04 com Arduino sem o auxílio de biblioteca
Angelo Luis Ferreira | 22/02/2022
Acessos: 13.717
Intermediário - Projeto 15
Usando o sensor ultrassônico HC-SR04 com Arduino sem biblioteca
Objetivo
Utilizar o o sensor ultrassônico HC-SR04 junto com o Arduino para medir distâncias entre o sensor e um objeto qualquer. Para o melhor entendimento dos princípios do funcionamento do HC-SR04, não vamos usar neste projeto qualquer tipo de biblioteca, podendo assim, demonstrarmos todas as etapas de atuação do sensor.
Obs.: É bom lembrar que existem bibliotecas disponíveis para simplificar a programação com este sensor. Falaremos destas bibliotecas nos próximos projetos.

Definições
Sensor de Distância Ultrassônico HC-SR04 possui função de medição sem contato entre 2 cm e 4 metros, com precisão de aproximadamente 3mm. O módulo é composto por transmissor ultrassônico, receptor e circuito de controle:
- Transmissor Ultrassônico – Emite as ondas ultrassônicas que serão refletidas pelos obstáculos;
- Um receptor – Identifica o eco do sinal emitido pelo transmissor;
- Circuito de controle – Controla o conjunto transmissor/receptor, calcula o tempo entre a emissão e recepção do sinal;
Ondas ultrassônicas: São ondas mecânicas de alta frequência, acima de 20.000 Hz, que se propaga na velocidade do som. Neste caso, o som não pode ser ouvido pelos seres humanos. O ultrassom é muito utilizado para exames clínicos, sensores, sonares, etc. O módulo HC-SR04 emite ondas com frequência de 40.000 Hz.
Princípio de funcionamento do HC-SR04: O funcionamento do HC-SR04 se baseia no envio de sinais ultrassônicos pelo transmissor do sensor, que aguarda o retorno (echo) do sinal, e com base no tempo entre envio e retorno, calcula a distância entre o sensor e o objeto detectado no circuito de controle:

Etapas de funcionamento do HC-SR04
1. O Arduino envia um pulso de trigger (gatilho) de pelo menos 10us em nível alto (HIGH);
2. Ao receber o sinal de trigger enviado pelo Arduino, o transmissor ultrassônico envia 8 pulsos de 40khz e aguarda o retorno;
3. Se algum sinal de retorno for identificado pelo receptor, o sensor gera um sinal de nível alto (HIGH), cujo o tempo de duração é igual ao tempo total entre a emissão e a recepção do sinal ultrassônico.
3.1. Esse sinal de nível alto é enviado para o Arduino através do pino de entrada echo do módulo.
3.2. Durante o tempo de emissão e recebimento do sinal ultrassônico, o pino echo ficará em nível alto.
3.3. Para capturar o tempo de duração em microssegundos do pulso em nível alto (HIGH) no pino echo usamos a função pulseIn() - leia referência Arduino.

4. Com base nesse tempo de entre o envio e o retorno do sinal ultrassônico podemos calcular a distância entre o sensor e objeto, utilizando a equação: Distância = (Tempo echo em nível alto * velocidade do som) /2
4.1. Como vimos anteriormente, o tempo echo em nível alto é o tempo que o sinal ultrassônico leva para ir e voltar até o sensor. Portanto, a distância percorrida pela onda sonora é o dobro da distância entre o sensor e o objeto.
4.2. Ao utilizarmos a função pulseIn() para determinarmos o tempo em nível alto, obteremos como resposta o valor em microssegundos. Portanto, vamos utilizar na equação acima o tempo em microssegundos e a velocidade do som em metros/microssegundo.
Observação: A velocidade do som é de aproximadamente 340,29 m/seg = 0.00034029 m/µs (metros por microssegundo).
Aplicação
Para fins didáticos e projetos onde o HC-SR04 pode ser utilizado para fazer leituras de distâncias entre o sensor e um objeto, acionar alarmes, detectar objetos e corrigir continuamente a trajetória de um robô ao detectar um obstáculo, por exemplo, entre outras aplicações em robótica.
Componentes necessários
Referência
|
Componente
|
Quantidade
|
Imagem
|
Observação
|
Protoboard
|
Protoboard 830 pontos |
1 |
 |
No mínimo utilizar protoboard com 400 pontos
|
Jumpers |
Kit cabos ligação macho / macho |
1 |
 |
|
Módulo Sensor Ultrassônico HC-SR04 |
Sensor Ultrassônico HC-SR04
|
1 |
 |
- Tensão de Alimentação 5V DC - Corrente consumida 15mA - Frequência de operação 40kHz - Distância (min) 2cm / (max) 4m - Precisão 3mm - Ângulo de medição 15graus - Sinal de entrada [Trigger] Pulso TTL (5V) de 10us - Sinal de saída [Echo] Pulso TTL (5V) proporcional à distânia detectada
(datasheet)
|
Arduino UNO |
Arduino UNO |
1 |
 |
Você poderá utilizar uma placa Arduino UNO original ou similar
|
Montagem do Circuito
Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. O Arduino deve estar totalmente desconectado da fonte de energia enquanto você monta o circuito.
Atenção
1. A montagem do módulo HC-SR04 deve seguir a configuração abaixo:
- Vcc – Deve ser conectado a um pino 5V do Arduino.
- Trig – Deve ser conectado a um pino digital configurado como saída. Utilizamos o pino 8 do Arduino.
- Echo – Deve ser conectado a um pino digital configurado como entrada. Utilizamos o pino 9 do Arduino.
- Gnd – Deve ser conectado a um pino GND do Arduino.

2. A montagem do nosso projeto foi realizada em um protoboard de 400 pontos:

Código do Projeto (Sketch)
1. Faça o download e abra o arquivo projetoI15.ino no IDE do Arduino: DOWNLOAD - projetoI15.ino
2. Se preferir, copie e cole o código abaixo no IDE do Arduino.
/*******************************************************************************
*
* I15 - Usando sensor ultrassônico sem biblioteca
* Autor: Angelo Luis Ferreira
* 28/02/2022
* http://squids.com.br/arduino
*
*******************************************************************************/
int pinTrig = 8; // pino usado para disparar os pulsos do sensor
int pinEcho = 9; // pino usado para ler a saida do sensor
float tempoEcho = 0;
// Obs. Velocidade do som = 340,29 m/s = 0.00034029 m/us
const float velocidadeSom = 0.00034029; // em metros por microsegundo
void setup(){
// Configura pinos Trig e Echo
pinMode(pinTrig, OUTPUT); // configura pino TRIG como saída
pinMode(pinEcho, INPUT); // configura pino ECHO como entrada
// Inicializa pino Trig em nível baixo
digitalWrite(pinTrig, LOW);
// Inicializa a porta serial
Serial.begin(9600);
}
void loop(){
gatilhoSensor(); // envia pulso trigger (gatilho) para disparar o sensor
tempoEcho = pulseIn(pinEcho, HIGH); // mede o tempo de duração do sinal no pino de leitura em us
// exibe no monitor serial
Serial.print("Distancia em metros: ");
Serial.println(calculaDistancia(tempoEcho), 4);
Serial.print("Distancia em centimetros: ");
Serial.println(calculaDistancia(tempoEcho)*100);
Serial.println("------------------------------------");
delay(2000); // aguarda dois segundos
}
// Funçao para enviar o pulso de trigger
void gatilhoSensor(){
// Para fazer o HC-SR04 enviar um pulso ultrassonico, nos temos
// que enviar para o pino de trigger um sinal de nivel alto
// com pelo menos 10us de duraçao
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
}
// Função para calcular a distancia em metros
float calculaDistancia(float tempoMicrossegundos){
return((tempoMicrossegundos*velocidadeSom)/2); // velocidade do som em m/microssegundo
}
Como o projeto deve funcionar
1. Ao iniciar o programa já começa a medir a distância do sensor até o obstáculo mais próximo.
2. Para visualizar as leituras da distância, abra o monitor serial do Arduino. Obs.: São realizadas leituras a cada 2 segundos.

3. Movendo o obstáculo ou o sensor, a distância entre ambos irá variar também.
4. Para verificar se as distâncias estão corretas, você pode utilizar uma régua para chegar as medidas, lembrando que a precisão da medida com o sensor é de 3mm.
4.1. Alinhe a régua na mesma posição da borda do sensor.
4.2. Coloque um objeto em um ponto da régua e faça a leitura no monitor serial. A distância exibida deverá ser o valor aproximado medido pela régua. Obs.: A leitura do sensor ultrassônico pode ser realizada entre 2cm e 4 metros.

Usando o plotter serial do Arduino (Sketch)
1. Faça o download e abra o arquivo projetoI15a.ino no IDE do Arduino: DOWNLOAD - projetoI15a.ino
2. Se preferir, copie e cole o código abaixo no IDE do Arduino.
/*******************************************************************************
*
* I15 - Usando sensor ultrassônico sem biblioteca (plotter serial)
* Autor: Angelo Luis Ferreira
* 28/02/2022
* http://squids.com.br/arduino
*
*******************************************************************************/
int pinTrig = 8; // pino usado para disparar os pulsos do sensor
int pinEcho = 9; // pino usado para ler a saida do sensor
float tempoEcho = 0;
// Obs. Velocidade do som = 340,29 m/s = 0.00034029 m/us
const float velocidadeSom = 0.00034029; // em metros por microsegundo
void setup(){
// Configura pinos Trig e Echo
pinMode(pinTrig, OUTPUT); // configura pino TRIG como saída
pinMode(pinEcho, INPUT); // configura pino ECHO como entrada
// Inicializa pino Trig em nível baixo
digitalWrite(pinTrig, LOW);
// Inicializa a porta serial
Serial.begin(9600);
}
void loop(){
gatilhoSensor(); // envia pulso trigger (gatilho) para disparar o sensor
tempoEcho = pulseIn(pinEcho, HIGH); // mede o tempo de duração do sinal no pino de leitura em us
// exibe no serial plotter
Serial.println(calculaDistancia(tempoEcho)*100);
delay(100); // leitura a cada 100us
}
// Funçao para enviar o pulso de trigger
void gatilhoSensor(){
// Para fazer o HC-SR04 enviar um pulso ultrassonico, nos temos
// que enviar para o pino de trigger um sinal de nivel alto
// com pelo menos 10us de duraçao
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
}
// Função para calcular a distancia em metros
float calculaDistancia(float tempoMicrossegundos){
return((tempoMicrossegundos*velocidadeSom)/2); // velocidade do som em m/microssegundo
}
Como o projeto deve funcionar
1. Ao iniciar o programa já começa a medir a distância do sensor até o obstáculo mais próximo.
2. Para visualizar as leituras da distância, abra o plotter serial do Arduino.

3. São realizadas leituras a cada 100 microssegundos.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando
Comentários