O sensor ultrassônico é capaz de detectar objetos e medir suas proximidades com precisão. Isso é possível graças a um receptor e um emissor de ondas sonoras que o compõem. Ambos trabalham com ondas de alta frequência (faixa de 40.000 Hz), as quais os ouvidos humanos não são capazes de detectar.
Após a colisão do sinal emitido ao alvo, o mesmo é refletido de volta na direção do sensor, o tempo levado durante este processo é marcado pelo cronômetro embutido no próprio sensor e dessa forma é possível saber quanto tempo o sinal levou desde a sua emissão até o seu retorno.
A partir disso, é possível descobrir a distância entre o sensor e o obstáculo, tendo em vista que tempo é igual à distância dividida pela velocidade: d = ( V * t ) / 2. A divisão por dois existe pois o tempo medido pelo sensor é na realidade o tempo para ir e voltar, ou seja, duas vezes a distância que desejamos descobrir. O sensor possui quatro pinos, sendo dois deles utilizados para alimentação do sensor (VDD e GND), outro utilizado para disparar o sinal ultrassônico (TRIG) e outro para medir o tempo que ele leva para retornar ao sensor (ECHO).
O sensor ultrassônico HC-SR04 consegue detectar a distancia entre um alvo, que esteja acima de 2cm, e abaixo de 4m. Ele deve estar na linha de visão direta da superfície do objeto para receber um eco sonoro adequado.
// baixar biblioteca ‘Ultrassonic’
#include "Ultrasonic.h" //inclusão da biblioteca necessária
const int echoPin = 13; //pino digital utilizado pelo echo(recebe)
const int trigPin = 12; //pino digital utilizado pelo trig(envia)
Ultrasonic ultrasonic(trigPin,echoPin); //inicializando os pinos do arduino
int distancia; //variável inteira
String result; //variável string
void setup(){
pinMode(echoPin, INPUT); //define o echoPin como entrada
pinMode(trigPin, OUTPUT); //define o trigPin como saida
Serial.begin(9600); //inicia a transmissao para monitor serial
}
void loop(){
hcsr04(); // faz a chamada do método "hcsr04()"
//imprime a distancia no monitor serial
Serial.print("Distancia= ");
Serial.print(result);
Serial.println("cm");
}
//método responsável por calcular a distância
void hcsr04(){
digitalWrite(trigPin, LOW); //seta o pino 12 com um pulso baixo "low"
delayMicroseconds(2); //intervalo de 2 microssegundos
digitalWrite(trigPin, HIGH); //seta o pino 12 com pulso alto "high"
delayMicroseconds(10); //intervalo de 10 microssegundos
digitalWrite(trigPin, LOW); //seta o pino 12 com pulso baixo "low" novamente
distancia = (ultrasonic.Ranging(CM)); //função ranging, faz a conversão para centimetros, e armazena na variavel "distancia"
result = String(distancia); //variável result recebe a distância convertido de inteiro para string
delay(500); //intervalo de 500 milissegundos
}