Random Nerd Tutorials

Complete Guide for Ultrasonic Sensor HC-SR04 with Arduino


This post is all about the Ultrasonic Sensor HC – SR04. I’ll explain how it works, show you some features and share an Arduino Project example you can follow to integrate in your projects. We provide a schematic diagram on how to wire the ultrasonic sensor, and an example sketch to use with the Arduino.


The HC-SR04 ultrasonic sensor uses sonar to determine distance to an object like bats do. It offers excellent non-contact range detection with high accuracy and stable readings in an easy-to-use package.

From 2cm to 400 cm or 1” to 13 feet. Its operation is not affected by sunlight or black material like sharp rangefinders are (although acoustically soft materials like cloth can be difficult to detect). It comes complete with ultrasonic transmitter and receiver module.


  • Power Supply :+5V DC
  • Quiescent Current : <2mA
  • Working Current: 15mA
  • Effectual Angle: <15°
  • Ranging Distance : 2cm – 400 cm/1″ – 13ft
  • Resolution : 0.3 cm
  • Measuring Angle: 30 degree
  • Trigger Input Pulse width: 10uS
  • Dimension: 45mm x 20mm x 15mm

How Does it Work?

The ultrasonic sensor uses sonar to determine the distance to an object. Here’s what happens:

  1. The transmitter (trig pin) sends a signal: a high-frequency sound.
  2. When the signal finds an object, it is reflected and…
  3. … the transmitter (echo pin) receives it.

The time between the transmission and reception of the signal allows us to know the distance to an object. This is possible because we know the sound’s velocity in the air.



  • VCC: +5VDC
  • Trig : Trigger (INPUT)
  • Echo: Echo (OUTPUT)
  • GND: GND

Where to buy?

You can check the Ultrasonic Sensor HC-SR04 sensor on Maker Advisor and find the best price.


Arduino with HC – SR04 Sensor

This sensor is really cool and popular among the Arduino tinkerers. So, here we provide an example on how to use the HC-SR04 ultrasonic sensor with the Arduino. In this project the ultrasonic sensor reads and writes the distance to an object in the serial monitor.

The goal of this project is to help you understand how this sensor works. Then, you can use this example in your own projects.

Note: There’s an Arduino library called NewPing that can make your life easier when using this sensor.

Parts Required

You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!


Follow the next schematic diagram to wire the HC-SR04 ultrasonic sensor to the Arduino.


The following table shows the connections you need to make:

Ultrasonic Sensor HC-SR04 Arduino
Trig Pin 11
Echo Pin 12

Source code

Upload the following code to your Arduino IDE.

How the Code Works

First, you create variables for the trigger and echo pin called trigPin and echoPin, respectively. The trigger pin is connected to digital pin 11, and the echo pins is connected to digital pin 12:

int trigPin = 11; 
int echoPin = 12;

You also create three variables of type long: durationcm and inch. The duration variable saves the time between the emission and reception of the signal. The cm variable will save the distance in centimeters, and the inch variable will save the distance in inches.

long duration, cm, inches;

In the setup(), we initialize the serial port at a baud rate of 9600, and set the trigger pin as an output and the echo pin as an input.

//Serial Port begin
Serial.begin (9600);
//Define inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);

In the loop(), we trigger the sensor by sendind a HIGH pulse of 10 microseconds. But, before that, we give a short LOW pulse to ensure we’ll get a clean HIGH pulse:

digitalWrite(trigPin, LOW);
digitalWrite(trigPin, HIGH);
digitalWrite(trigPin, LOW);

Then, we read the signal from the sensor – a HIGH pulse whose duration is the time in microseconds from the sending of the signal to the reception of its echo to an object.

duration = pulseIn(echoPin, HIGH);

Finally, we just need to convert the duration to a distance. We can calculate the distance by using the following formula:

distance = (traveltime/2) x speed of sound

The speed of sound is: 343m/s = 0.0343 cm/uS = 1/29.1 cm/uS

Or in inches: 13503.9in/s = 0.0135in/uS = 1/74in/uS

We need to divide the traveltime by 2 because we have to take into account that the wave was sent, hit the object, and then returned back to the sensor.

cm = (duration/2) / 29.1;
inches = (duration/2) / 74;

Finally, we print the results in the Serial Monitor:

Serial.print("in, ");

Source code with NewPing

You can also use the the NewPing library. Download the library here.

After installing the NewPin library, you can upload the code provided below.

How the Code Works

Getting the distance to an object using the NewPing library is much simpler.

You start by including the NewPing library:

#include <NewPing.h>

Then, define the trigger and echo pin. The trigger pin is connected to the Arduino digital pin 11, and the echo to pin 12. You also need to define the MAX_DISTANCE variable to be able to use the library.

#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200

Then, you create a NewPing instance called sonar:


In the setup(), you initialize the Serial communication at a baud rate of 9600.


Finally, in the loop(), to get the distance you just need to use the ping_cm() method on the sonar object. This will give you the distance in centimeters.

unsigned int distance = sonar.ping_cm();

If you want to get the distance in inches you can use sonar.ping_in() instead.


NOTE: “If the HC-SR04 does not receive an echo then the output never goes low. Devantec and Parallax sensors time out after 36ms and I think 28ms respectively. If you use Pulsin as above then with no return echo the program will hang for 1 second which is the default timeout for Pulsin. You need to use the timeout parameter.

The HC-SR04 barely works to 10 feet giving a total path length of 20 feet and a path time of about 20ms so set the timeout to something above that, say 25 or 30ms.

If you put a resistor, say 2k2 between E and T then only connect to T you can use the HC-SR04 from just one Arduino pin. Look up single pin operation of ultrasonic sensors.

Also if you are using a HC-SR04 with a PicAxe you need to up the clockspeed to at least 8MHz otherwise they don’t see the start of the echo pulse so pulsin never starts. The HC-SR04 works fine with a BS2.” by David Buckley

Thanks to my friend David to leave such an helpful comment!

Wrapping Up

In this post we’ve shown you how the HC-SR04 ultrasonic sensor works, and how you can use it with Arduino. For a project example, you can build a Parking Sensor with LEDs and buzzer.

If you are a beginner to the Arduino, we recommend following our Arduino Mini Course that will help you getting started quickly with this amazing board.

If you like Arduino, you may also like:

You can find all our Arduino projects and tutorials here.

We hope you found this useful. Share this post with a friend that also likes electronics!

MicroPython Programming with ESP32/ESP8266 eBook

Learn how to program the ESP boards with MicroPython, including projects, tips, and tricks! The registrations are open for a limited time, so SIGN UP NOW »

Recommended Resources

Home Automation using ESP8266 »
Build IoT projects and home automation gadgets with the ESP8266 Wi-Fi module.

Build a Home Automation System »
Learn how to build a automation system using open-source hardware and software from scratch.

Arduino Step-by-Step Projects »
Build 25 cool Arduino projects with our course even with no prior experience!

Leave a Comment:

Add Your Reply

⏰ Registrations are open for "MicroPython Programming with ESP32 and ESP8266" eBook