Getting Started with the HC-SR04 Ultrasonic sensor

The HC-SR04 is a popular ultrasonic distance sensor that is low cost and accurate, making it a great choice for hobbyists and students who want to build robots or other projects that require distance measurement. Here is a basic introduction to the HC-SR04:

  • Principle of operation: The HC-SR04 works by emitting ultrasonic waves from its transmitter and then measuring the time it takes for the waves to bounce off an object and return to the receiver. This time can be used to calculate the distance to the object using the speed of sound in air, which is approximately 343 meters per second (or 0.0343 centimeters per microsecond) at room temperature.
  • Pinout: The HC-SR04 has four pins: VCC (5V), GND (ground), TRIG (trigger), and ECHO (echo). VCC and GND are connected to the power supply and ground respectively, while TRIG is used to trigger the sensor to emit a pulse and ECHO is used to receive the pulse back.
  • Timing diagram: To use the HC-SR04, you need to send a pulse to the TRIG pin that is at least 10 microseconds long. This will cause the sensor to emit a burst of ultrasonic waves. The ECHO pin will then go high when the sensor detects the waves returning and will remain high for a duration that is proportional to the distance to the object. You can measure this duration using a microcontroller or other circuit and convert it to distance using the formula: distance = (time * speed of sound) / 2.
  • Accuracy: The HC-SR04 is generally quite accurate, with a range of up to 4 meters and a resolution of 0.3 centimeters. However, it is important to note that the accuracy can be affected by factors such as temperature, humidity, and the shape and size of the object being detected.
  • Limitations: While the HC-SR04 is a great sensor for many applications, it does have some limitations. For example, it may not work well in environments with a lot of noise or in situations where the object being detected is very small or thin. Additionally, it may not work well on surfaces that absorb or scatter ultrasonic waves, such as soft fabrics or rough surfaces.

Overall, the HC-SR04 is a versatile and affordable distance sensor that can be used in a wide range of applications. With its ease of use and high accuracy, it is a great choice for hobbyists and students who want to experiment with robotics, automation, and other electronic projects.

Project description

In this project I will introduce you to the HC-SR04 Ultrasonic sensor.  It works by sending sound waves from the transmitter, which then bounce off of an object and then return to the receiver.  You can determine how far away something is by the time it takes for the sound waves to get back to the sensor.  Let’s get right to it!

Connections

The connections are very simple:

  1. VCC to 5V
  2. GND to GND
  3. Trig to pin 9
  4. Echo to pin 10

You can actually connect Trig and Echo to whichever pins you want, 9 and 10 are just the ones I’m using.

Working

First we define the pins that Trig and Echo are connected to.

const int trigPin = 9; const int echoPin = 10;

Then we declare 2 floats, duration and distance, which will hold the length of the sound wave and how far away the object is.

float duration, distance;

Next, in the setup, we declare the Trig pin as an output, the Echo pin as an input, and start Serial communications.

void setup() {   pinMode(trigPin, OUTPUT);   pinMode(echoPin, INPUT);             Serial.begin(9600); }

Now, in the loop, what we do is first set the trigPin low for 2 microseconds just to make sure that the pin in low first. Then, we set it high for 10 microseconds, which sends out an 8 cycle sonic burst from the transmitter, which then bounces of an object and hits the receiver (Which is connected to the Echo Pin).

void loop() {    

digitalWrite(trigPin, LOW);     

delayMicroseconds(2);          

digitalWrite(trigPin, HIGH);    

delayMicroseconds(10);        

digitalWrite(trigPin, LOW);

When the sound waves hit the receiver, it turns the Echo pin high for however long the waves were traveling for. To get that, we can use a handy Arduino function called pulseIn() . It takes 2 arguments, the pin you are listening to(In our case, the Echo pin), and a state(HIGH or LOW). What the function does is waits for the pin to go whichever state you put in, starts timing, and then stops timing when it switches to the other state. In our case we would put HIGH since we want to start timing when the Echo pin goes high. We will store the time in the duration variable. (It returns the time in microseconds)

duration = pulseIn(echoPin, HIGH);

Now that we have the time, we can use the equation speed = distance/time , but we will make it time x speed = distance because we have the speed. What speed do we have? The speed of sound, of course! The speed of sound is approximately 340 meters per second, but since the pulseIn() function returns the time in microseconds, we will need to have a speed in microseconds also, which is easy to get. A quick Google search for “speed of sound in centimeters per microsecond” will say that it is .0343 c/μS. You could do the math, but searching it is easier. Anyway, with that information, we can calculate the distance! Just multiply the duration by .0343 and then divide it by 2(Because the sound waves travel to the object AND back). We will store that in the distance variable.

distance = (duration*.0343)/2;

The rest is just printing out the results to the Serial Monitor.

Serial.print(“Distance: “);       

Serial.println(distance);         

 delay(100); } 

Code

const int trigPin = 9;

const int echoPin = 10; 

float duration, distance;

void setup() {

  pinMode(trigPin, OUTPUT);

  pinMode(echoPin, INPUT);

  Serial.begin(9600);

}

 

void loop() {

  digitalWrite(trigPin, LOW);

  delayMicroseconds(2);

  digitalWrite(trigPin, HIGH);

  delayMicroseconds(10);

  digitalWrite(trigPin, LOW);

 

  duration = pulseIn(echoPin, HIGH);

  distance = (duration*.0343)/2;

  Serial.print(“Distance: “);

  Serial.println(distance);

  delay(100);

}