Bird
Raised Fist0
Arduinoprogramming~10 mins

Ultrasonic distance sensor (HC-SR04) in Arduino - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Ultrasonic distance sensor (HC-SR04)
Start
↓
Send Trigger Pulse
↓
Wait for Echo Signal
↓
Measure Echo Duration
↓
Calculate Distance
↓
Output Distance
↓
Repeat or Stop
The sensor sends a sound pulse, waits for the echo, measures the time, then calculates and outputs the distance.
Execution Sample
Arduino
const int trigPin = 9;
const int echoPin = 10;
long duration;
int 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 * 0.034 / 2;
  Serial.println(distance);
  delay(500);
}
This code triggers the sensor, measures echo time, calculates distance in cm, and prints it every half second.
Execution Table
StepActionPin StateDuration (microseconds)Distance (cm)Output
1Set trigPin LOWtrigPin=LOW
2Wait 2 microsecondstrigPin=LOW
3Set trigPin HIGHtrigPin=HIGH
4Wait 10 microsecondstrigPin=HIGH
5Set trigPin LOWtrigPin=LOW
6Measure pulse on echoPinechoPin=HIGH during pulse600
7Calculate distance60010
8Print distance1010
9Wait 500 ms
10Repeat loop
💡 Loop repeats indefinitely to update distance continuously.
Variable Tracker
VariableStartAfter Step 6After Step 7After Step 8Final
duration0600600600600
distance00101010
Key Moments - 3 Insights
Why do we set trigPin LOW before sending the HIGH pulse?
Setting trigPin LOW first ensures a clean pulse start; see execution_table rows 1-3 where LOW then HIGH creates a clear 10 microsecond pulse.
How does pulseIn measure the echo duration?
pulseIn waits for echoPin to go HIGH and measures how long it stays HIGH, shown in execution_table row 6 with duration 600 microseconds.
Why do we divide duration by 2 when calculating distance?
Sound travels to the object and back, so dividing by 2 gives the one-way distance; this is shown in the calculation at step 7.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'duration' after step 6?
A10.2 cm
B600 microseconds
C500 milliseconds
D0
💡 Hint
Check the 'Duration (microseconds)' column at step 6 in execution_table.
At which step is the trigPin set HIGH to send the ultrasonic pulse?
AStep 2
BStep 5
CStep 3
DStep 6
💡 Hint
Look at the 'Pin State' column in execution_table for when trigPin changes to HIGH.
If the echo duration doubles, how does the distance value change in variable_tracker?
ADistance doubles
BDistance halves
CDistance stays the same
DDistance becomes zero
💡 Hint
Distance is calculated from duration * 0.034 / 2, so distance changes proportionally with duration (see variable_tracker).
Concept Snapshot
HC-SR04 sensor sends a 10μs HIGH pulse on trigPin.
It listens on echoPin for the returning pulse.
pulseIn measures echo duration in microseconds.
Distance (cm) = duration * 0.034 / 2.
Repeat measurement to update distance continuously.
Full Transcript
This visual trace shows how the HC-SR04 ultrasonic sensor works in Arduino code. First, the trigPin is set LOW to prepare, then HIGH for 10 microseconds to send a sound pulse. The echoPin listens for the returning pulse, and pulseIn measures how long the echoPin stays HIGH, which is the echo duration. The code calculates distance by multiplying duration by 0.034 (speed of sound in cm/us) and dividing by 2 because the sound travels to the object and back. The distance is printed and the loop repeats every 500 milliseconds to update the reading continuously. Variables duration and distance change step-by-step as shown. Key points include why trigPin is set LOW before HIGH, how pulseIn works, and why dividing by 2 is necessary. The quizzes test understanding of these steps and variable changes.

Practice

(1/5)
1. What is the main purpose of the trigger pin on the HC-SR04 ultrasonic sensor?
easy
A. To send a short ultrasonic pulse to start distance measurement
B. To receive the echo signal from the object
C. To power the sensor
D. To reset the sensor

Solution

  1. Step 1: Understand the role of the trigger pin

    The trigger pin is used to send a short pulse that starts the ultrasonic burst.
  2. Step 2: Differentiate from echo pin

    The echo pin listens for the returning pulse, not the trigger pin.
  3. Final Answer:

    To send a short ultrasonic pulse to start distance measurement -> Option A
  4. Quick Check:

    Trigger pin sends pulse = A [OK]
Hint: Trigger pin sends pulse, echo pin listens [OK]
Common Mistakes:
  • Confusing trigger with echo pin
  • Thinking trigger powers the sensor
  • Assuming trigger resets the sensor
2. Which Arduino function is used to measure the duration of the echo pulse from the HC-SR04 sensor?
easy
A. digitalWrite()
B. pulseIn()
C. analogRead()
D. delay()

Solution

  1. Step 1: Identify function to measure pulse duration

    The pulseIn() function measures the length of a pulse on a pin.
  2. Step 2: Exclude other functions

    digitalWrite() sets pin output, analogRead() reads analog values, delay() pauses execution.
  3. Final Answer:

    pulseIn() -> Option B
  4. Quick Check:

    pulseIn measures pulse length = B [OK]
Hint: Use pulseIn() to measure echo pulse duration [OK]
Common Mistakes:
  • Using digitalWrite() to read pulse
  • Confusing analogRead() with pulse measurement
  • Using delay() instead of measuring pulse
3. What will be the output distance (in cm) if the measured echo time is 1160 microseconds? Use the formula: distance = (echoTime / 2) / 29.1.
medium
A. 80 cm
B. 40 cm
C. 10 cm
D. 20 cm

Solution

  1. Step 1: Calculate half of echo time

    Half of 1160 microseconds is 580 microseconds.
  2. Step 2: Divide by 29.1 to get distance

    580 / 29.1 ≈ 19.93 cm, approximately 20 cm.
  3. Final Answer:

    20 cm -> Option D
  4. Quick Check:

    (1160/2)/29.1 ≈ 20 cm [OK]
Hint: Divide echo time by 2 and then by 29.1 [OK]
Common Mistakes:
  • Forgetting to divide echo time by 2
  • Using wrong divisor instead of 29.1
  • Mixing units of time and distance
4. Identify the error in this Arduino code snippet for HC-SR04 distance measurement:
digitalWrite(triggerPin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerPin, LOW);
echoTime = pulseIn(echoPin, LOW);
medium
A. echoTime should be declared as int, not long
B. delayMicroseconds should be delay()
C. pulseIn should measure HIGH pulse, not LOW
D. triggerPin should be set LOW before HIGH

Solution

  1. Step 1: Check pulseIn usage

    The echo pulse is HIGH when the echo is received, so pulseIn should measure HIGH pulse.
  2. Step 2: Verify other code parts

    delayMicroseconds(10) is correct for 10 microseconds pulse; triggerPin sequence is correct; echoTime type depends on usage but not an error here.
  3. Final Answer:

    pulseIn should measure HIGH pulse, not LOW -> Option C
  4. Quick Check:

    pulseIn measures HIGH pulse = D [OK]
Hint: pulseIn(echoPin, HIGH) to measure echo pulse [OK]
Common Mistakes:
  • Measuring LOW pulse instead of HIGH
  • Using delay() instead of delayMicroseconds()
  • Setting triggerPin LOW before HIGH incorrectly
5. You want to measure distance continuously and print it every second using HC-SR04. Which code snippet correctly triggers the sensor and calculates distance in cm?
hard
A. digitalWrite(triggerPin, LOW); delayMicroseconds(2); digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); echoTime = pulseIn(echoPin, HIGH); distance = (echoTime / 2) / 29.1;
B. digitalWrite(triggerPin, HIGH); delayMicroseconds(10); digitalWrite(triggerPin, LOW); echoTime = pulseIn(echoPin, LOW); distance = echoTime * 29.1 / 2;
C. digitalWrite(triggerPin, LOW); delay(10); digitalWrite(triggerPin, HIGH); echoTime = pulseIn(echoPin, HIGH); distance = (echoTime / 2) / 29.1;
D. digitalWrite(triggerPin, HIGH); delayMicroseconds(2); digitalWrite(triggerPin, LOW); echoTime = pulseIn(echoPin, HIGH); distance = (echoTime * 2) / 29.1;

Solution

  1. Step 1: Check trigger pulse sequence

    The correct sequence is to set trigger LOW for 2 microseconds, then HIGH for 10 microseconds, then LOW again.
  2. Step 2: Verify echo measurement and distance formula

    pulseIn measures HIGH pulse duration; distance = (echoTime / 2) / 29.1 converts time to cm correctly.
  3. Final Answer:

    Code snippet C correctly triggers and calculates distance -> Option A
  4. Quick Check:

    Trigger LOW-2us-HIGH-10us-LOW, pulseIn HIGH, distance formula = C [OK]
Hint: Trigger LOW-2us, HIGH-10us, then LOW; measure HIGH pulse [OK]
Common Mistakes:
  • Skipping initial LOW trigger pulse
  • Measuring LOW pulse instead of HIGH
  • Incorrect distance formula with wrong multiplication/division
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard