The ultrasound detector uses sound waves like a bat to detect obstacles. The detector emits a burst of ultrahigh frequency sound waves and then "listens" for the sound to reflect back. The detector starts a burst when the trigger pin receives a positive pulse that is at least 10 microseconds long. In our example below we will use a trigger that is 10 milliseconds long. The echo pin goes high when the burst stops and goes back to low when the reflection is detected.
The code uses an Arduino built in function called "pulseIn()".
The command is duration = pulseIn(echoPin, HIGH);
In this case pulseIn() measures the amount of time the echoPin is HIGH.
After loading this code open the Serial Monitor and set the baud rate to 9600. Move your hand or another object in front of the detector - moving it closer and further away. The serial monitor should display the distance to the object. You will see that there are limits at both ends of the detector's range.
/*
* created by Rui Santos, https://randomnerdtutorials.com
*
* Complete Guide for Ultrasonic Sensor HC-SR04
*
Ultrasonic sensor Pins:
VCC: +5VDC
Trig : Trigger (INPUT) - Pin2
Echo: Echo (OUTPUT) - Pin 5
GND: GND
*/
int trigPin = 2; // Trigger
int echoPin = 5; // Echo
long duration, cm, inches;
void setup() {
//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// The sensor is triggered by a HIGH pulse of 10 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Read the signal from the sensor: a HIGH pulse whose
// duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// Convert the time into a distance
cm = (duration/2) / 29.1; // Divide by 29.1 or multiply by 0.0343
inches = (duration/2) / 74; // Divide by 74 or multiply by 0.0135
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
}