O sensor funciona basicamente da seguinte maneira:
- Um sinal de 10 microsegundos é enviado ao sensor.
- O sensor automaticamente envia o sinal e recebe de volta.
- Se o sinal voltar o tempo gasto é retornado pelo circuito.
Requisitos de hardware.
1 Arduino
1 HC-SR04
Circuito.
O circuito é muito simples, basta conectar o VCC do sensor aos 5v do Arduino, GND ao GND, Echo a porta digital 10 e Trig a porta digital 12.
Imagem desenvolvida com o Fritzing
Código.
#define triggerPin 12
#define echoPin 10
void setup() {
// Configura a saída serial para recuperar a leitura do sensor
Serial.begin(9600);
// Configura a porta digital em modo saida
pinMode(triggerPin, OUTPUT);
// Configura a porta digital em modo entrada
pinMode(echoPin, INPUT);
}
void loop() {
// Envia um sinal de 10ms ao sensor
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
// O sensor calcula o tempo gasto entre o envio e o recebimento
// do sinal e retorna um pulso com esta duração
long duration = pulseIn(echoPin, HIGH);
// Converte o tempo para distancia em centimetros
float cm = microsecondsToCentimeters(duration);
// Informa a distancia na serial
Serial.println(cm, DEC);
delay(1000);
}
float microsecondsToCentimeters(long microseconds){
// Converte o tempo de microsegundos para segundos
float seconds = (float) microseconds / 1000000.0;
// Com a velocidade do som de 340m/s calcula-se a
// distancia percorrida
float distance = seconds * 340;
// Divide o resultado por dois pois o tempo é calculado
// considerando a ida e a volta do sinal
distance = distance / 2;
// Converte o resultado em metros para centimetros
distance = distance * 100;
return distance;
}
Referências.