How It Works – Ultrasonic Sensor
Hello friends.
This is a complete tutorial on Ultrasonic Sensor.
What
is Ultrasonic Sensor?
Ultrasonic Sensor is a sensor which can measure distance. It is compatible with
all kinds of micro-controller, such as Arduino, raspberry pi etc.
How
does it work?
It emits an ultrasound at 40 000 Hz which travels through the air and if
there is an object or obstacle on its path It will bounce back to the module.
Considering the travel time and the speed of the sound you can calculate the
distance.
Which
model of Ultrasonic sensor is being used?
We are using The HC-SR04 Ultrasonic Module. The HC-SR04 Ultrasonic Module has 4
pins, Ground, VCC, Trig and Echo. The Ground and the VCC pins of the module
needs to be connected to the Ground and the 5 volts pins on the Arduino Board respectively
and the trig and echo pins to any Digital I/O pin on the Arduino Board.
In order to
generate the ultrasound we need to set the Trig on a High State for 10 ยตs.
That will send out an 8 cycle sonic burst which will travel at the speed sound
and it will be received in the Echo pin. The Echo pin will output the time in
microseconds the sound wave traveled.
For example, if
the object is 10 cm away from the sensor, and the speed of the sound is 340 m/s
or 0.034 cm/ยตs the sound wave will need to travel about 294 u seconds. But what
you will get from the Echo pin will be double that number because the sound
wave needs to travel forward and bounce backward.
So
in order to get the distance in cm we need to multiply the received travel time
value from the echo pin by 0.034 and divide it by 2.
Components needed for this tutorial
Ultrasonic Sensor HC-SR04
Arduino Board
Breadboard and Jump Wires
Source Codes
First we have
to define the Trig and Echo pins. In this case they are the pins number 12 and 13
on the Arduino Board and they are named trigPin and echoPin. Then we need
a Long variable, named “duration” for the travel time that we will
get from the sensor and an integer variable for the distance.
In the setup we have
to define the trigPin as an output and the echoPin as an Input and also start
the serial communication for showing the results on the serial monitor.
In the loop
first we have to make sure that the trigPin is clear so we have
to set that pin on a LOW State for just 2 ยตs. Now for
generating the Ultra sound wave we have to set the trigPin on
HIGH State for 10 ยตs. Using the pulseIn() function you have
to read the travel time and put that value into the variable “duration”.
This function has 2 parameters, the first one is the name of the echo pin and
for the second one we can write either HIGH or LOW. In this case,
HIGH means that the pulsIn() function will wait for the pin to go
HIGH caused by the bounced sound wave and it will start timing, then it will
wait for the pin to go LOW when the sound wave will end which will stop
the timing. At the end the function will return the length of the pulse in
microseconds. For getting the distance we will multiply the duration by
0.034 and divide it by 2 as we explained this equation previously. At the
end we will print the value of the distance on the Serial Monitor.
Here
is the complete source code.
/*
* Ultrasonic Sensor HC-SR04 and Arduino Tutorial
*
* By Zubaer Mahmud
* www.screwdrvr.blogspot.com
*facebook.com/driver3scr/
*/
// defines pins numbers
const int
trigPin = 12;
const int
echoPin = 13;
// defines variables
long duration;
int
distance;
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an
Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
Serial.begin(9600); // Starts the serial communication
}
void loop() {
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time
in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance= duration*0.034/2;
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);}