Original source: https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor

 

Hardware Required

1×Arduino UNO or Genuino UNO
1×USB 2.0 cable type A/B
1×Ultrasonic Sensor
1×Jumper Wires
1×Breadboard

About Ultrasonic Sensor

Ultrasonic sensor HC-SR04 is used to measure the distance to an object by using ultrasonic waves.

Pinout

The ultrasonic sensor HC-SR04 includes four pins:

  • VCC pin needs to be connected to VCC (5V)
  • GND pin needs to be connected to GND (0V)
  • TRIG pin this pin receives the control signal (pulse) from Arduino.
  • ECHO pin this pin sends a signal (pulse) to Arduino. Arduino measures the duration of pulse to calculate distance.
  • Ultrasonic Sensor Pinout

How It Works

This section is the in-depth knowledge. DON'T worry if you don't understand. Ignore this section if it overloads you, and come back in another day. Keep reading the next sections.

  1. Micro-controller: generates a 10-microsecond pulse on the TRIG pin.
  2. The ultrasonic sensor automatically emits the ultrasonic waves.
  3. The ultrasonic wave is reflected after hitting an obstacle.
  4. The ultrasonic sensor:
    • Detects the reflected ultrasonic wave.
    • Measures the travel time of the ultrasonic wave.
  5. Ultrasonic sensor: generates a pulse to the ECHO pin. The duration of the pulse is equal to the travel time of the ultrasonic wave.
  6. Micro-controller measures the pulse duration in the ECHO pin, and then calculate the distance between sensor and obstacle.

See animated GIF image here (you may need to wait a moment for loading)

    How Ultrasonic Sensor Works

How to Get Distance From Ultrasonic Sensor

To get distance from the ultrasonic sensor, we only need to do two steps (1 and 6 on How It Works part)

  • Generates a 10-microsecond pulse on TRIG pin
  • Measures the pulse duration in ECHO pin, and then calculate the distance between sensor and obstacle

Distance Calculation

We have:

  • The travel time of the ultrasonic wave (µs): travel_time = pulse_duration
  • The speed of the ultrasonic wave: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/µs

So:

  • The travel distance of the ultrasonic wave (cm): travel_distance = speed × travel_time = 0.034 × pulse_duration
  • The distance between sensor and obstacle (cm): distance = travel_distance / 2 = 0.034 × pulse_duration / 2 = 0.017 × pulse_duration

Arduino - Ultrasonic Sensor

Arduino's pins can generate a 10-microsecond pulse and measure the pulse duration. Therefore, we can get the distance from the ultrasonic sensor by using two Arduino's pins:

  • One pin is connected to TRIG PIN to generate 10µs pulse to TRIG pin of the sensor
  • Another pin is connected to ECHO PIN measure pulse from the sensor

Wiring Diagram

Arduino Ultrasonic Sensor Wiring Diagram

Image is developed using Fritzing

How To Program

  • How to generate a 10-microsecond pulse in Arduino's pin, for example, pin 9:
digitalWrite(9, HIGH);
delayMicroseconds(10);
digitalWrite(9, LOW);
  • How to measures the pulse duration (µs) in Arduino's pin, for example, pin 8:
    duration_us = pulseIn(8, HIGH);
    
  • How to calculate distance (cm):
    distance_cm = 0.017 * duration_us;
    

Arduino Code

/*
 * Created by ArduinoGetStarted, https://arduinogetstarted.com
 *
 * Arduino - Ultrasonic Sensor HC-SR04
 *
 * Wiring: Ultrasonic Sensor -> Arduino:
 * - VCC  -> 5VDC
 * - TRIG -> Pin 9
 * - ECHO -> Pin 8
 * - GND  -> GND
 *
 * Tutorial is available here: https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor.php
 */

int trigPin = 9;    // TRIG pin
int echoPin = 8;    // ECHO pin

float duration_us, distance_cm;

void setup() {
  // begin serial port
  Serial.begin (9600);

  // configure the trigger pin to output mode
  pinMode(trigPin, OUTPUT);
  // configure the echo pin to input mode
  pinMode(echoPin, INPUT);
}

void loop() {
  // generate 10-microsecond pulse to TRIG pin
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  // measure duration of pulse from ECHO pin
...
Read more »