Home > Projects > Other Projects > Ultrasonic Range Finder

Ultrasonic Range Finder

Summary of Ultrasonic Range Finder


This article details building a non-contact range finder using an Arduino Uno R3 and an HC-SR04 ultrasonic module. The project measures distances between 2cm and 400cm with +/- 3mm accuracy, utilizing a simple four-wire connection and custom code to calculate distance based on sound wave return times.

Parts used in the Non-Contact Range Finder:

  • HC-SR04 ultrasonic module
  • Arduino Uno R3
  • Male-female jumper wires

This instructable describes how to create a non-contact range-finder using an Arduino and an HC-SR04 ultrasonic module to measure distances in the range 2cm – 400cm.

The accuracy is typically +/- 3mm depending on distance, air temperature, and humidity.

Step 1: Parts List

Very few parts are required:

  • 1 only HC-SR04 ultrasonic module or similar
  • 1 only Arduino Uno R3
  • 4 only Arduino male-female jumper wires

All items were obtained from https://www.aliexpress.com/

Step 2: Wiring Diagram

Only four wires are required to complete this project.

The wiring diagram is shown in photo1.

Step 3: Theory

The HC-SR04 ultrasonic range-finder module (photo 1) provides non-contact measurements in the range 2cm – 400cm. The accuracy is typically +/- 3mm depending on distance, air temperature, and humidity.

For greatest accuracy the target area should be at least 0.5 square meters. Best results are obtained when the transducer is pointing directly at the target. Useable results, however, are possible within an imaginary “cone” of +/- 15 degrees.

Interfacing the HC-SR04 to an Arduino is extremely simple as, apart from the two supply pins, only two wires, “Trig” (trigger) and “Echo”, are required.

A 10uS (microsecond) trigger pulse must be applied to the “Trig” pin to start each measurement.

On receipt of a trigger pulse the module emits an eight cycle “burst” at a frequency of 40kHz (kilohertz) after which the “Echo” line goes HIGH. There is a short 430uS interval between the trigger pulse and the rising edge of the “Echo” pin during which time high energy +/-10 volt charges are built up in the transmitter circuit prior to the ultrasonic burst.

The “Echo” pin drops LOW on receipt of an echo signal or 210mS whichever comes first.

[ Note:
If you block the ultrasonic signals (I used a rolled up sock against the transducers), you will observe a distance reading of 3550cm which is outside the sensor range of approximately 400cm.

Beyond 400cm the distance readings will suddenly jump to 3550cm. The reason for this follows:

In normal operation the measure() function completes its measurement in less than 25mS (423cm) then waits a further 25mS until the task scheduler next sets TaskFlag1 “TRUE”.

Should an echo not be received, the task scheduler will continue to set TaskFlag1 “TRUE” every 50mS until the HC-SR04 times out after 210mS and the Echo pin drops low. All 10uS start pulses generated by the measure() function during this time are ignored by the HC-SR04.

The timeout value of 210mS corresponds to a distance of 3550cm … hence the sudden jump in the distance reading.

The important point is that all distance readings less than 400cm are correct. ]

Typical waveforms

Waveforms for 5cm, 10cm, 20cm, and 200cm distances are shown in photos 2,3,4, and 5.

The top trace in each photo is the “Trig” pin … the lower trace in each photo is the “Echo” pin.

The duration of each “Echo” pulse can be calculated by multiplying the trace length by the “uS/div” value shown in the lower-right corner of each photo.

Calculating the distance

The exact distance can be calculated from the formula:

  • distance (cm) = pulse-length * speed-of-sound / 2 * 100 ………………………………….. (1)

This assumes that the “speed-of-sound” is 340m/S, and that the echo-distance is twice the actual distance.

The distance can also be calculated using the formula:

  • distance (cm) = pulse-length (uS) / 59 ………………………………………………………………….. (2)

The exact distance can be obtained by adjusting the constant value of 59.

[ Note:
The value of 59 for the constant is derived as follows:

The speed of sound is approximately 340m/S which is 0.034cm/uS (centimeters/microsceond).

The reciprocal of 0.034cm/uS is 29.412uS/cm which, when multiplied by 2 to allow for the return path, equals 58.824 or 59 when rounded. ]

Example 1:

Substituting a pulse-length of 2400uS into equation (1) we get:

  • distance = 2400/1000000 * 340/2 * 100 = 40.8cm

Example 2:

Substituting a pulse-length of 2400uS into equation (2) we get:

  • distance = 2400/59 = 40.7cm

Step 4: The Code

The code comprises a “measure()” function that is called once every 50mS using the task-scheduler described in instructable https://www.instructables.com/id/Multi-task-Your-…

The measure() function comprises the following code:

// ----- generate 10uS start pulse
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);

// ----- measure the distance
while (!digitalRead(Echo));   	//wait for Echo pin to go high
start_time =  micros();
while (digitalRead(Echo));  	//wait for Echo pin to go low
finish_time = micros();
time_taken = finish_time - start_time; 
Distance = ((float)time_taken)/59;

The complete code, “Ultrasonic_range_finder.ino”, is attached.

Copy the contents of this text file to an Arduino sketch, save it as “Ultrasonic_range_finder” (without the quotes), then compile and upload it to your Arduino.

Step 5: Measuring Distances

To view the distance readings click “Tools|Serial Monitor” and set the speed to 115200 bauds.

The distance readings may be calibrated by placing an object along a ruler then adjusting the constant “59” value for “Distance” until an exact reading is displayed.

  Click here   to view my other instructables.

Source: Ultrasonic Range Finder

Quick Solutions to Questions related to Non-Contact Range Finder:

  • What is the measurement range of this device?
    The device measures distances in the range of 2cm to 400cm.
  • How accurate is the distance measurement?
    The accuracy is typically +/- 3mm depending on distance, air temperature, and humidity.
  • Can I use this sensor at angles other than directly facing the target?
    Yes, usable results are possible within an imaginary cone of +/- 15 degrees from the transducer.
  • Does the sensor require many wires for connection?
    No, only four wires are required including two supply pins, Trig, and Echo.
  • What happens if no echo is received by the sensor?
    The reading suddenly jumps to 3550cm after the 210mS timeout period expires.
  • How can I calibrate the distance readings?
    You can adjust the constant value of 59 in the code until the display matches an object placed along a ruler.
  • What baud rate should I set for the Serial Monitor?
    You must set the speed to 115200 bauds to view the distance readings.
  • Is a 10uS trigger pulse necessary for operation?
    Yes, a 10uS trigger pulse must be applied to the Trig pin to start each measurement.

About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter
Scroll to Top