Distance
Interfacing HC-SR04 Distance with Arduino Uno
What is the HC-SR04?
The HC-SR04 measures distance by timing how long it takes a 40kHz ultrasonic pulse to bounce off an object and return. You send it a short trigger pulse, it fires eight ultrasonic bursts, and the ECHO pin stays high for exactly as long as the round trip took — convert that time to distance and you're done. No library is strictly required since the whole protocol is just two GPIO pins and a stopwatch.
It's a great first sensor for obstacle avoidance, parking sensors, liquid-level gauges, and non-contact proximity switches. The catch that trips people up most is voltage: the sensor runs on 5V and its ECHO pin outputs a 5V pulse, which will drive a 3.3V-only board's GPIO out of spec. Every board below except the 5V-native Arduino Uno needs a simple voltage divider on ECHO — see the per-board wiring notes.
Specifications
| Operating voltage | 5 V DC |
| Operating current | ~15 mA |
| Measuring range | 2cm to 400cm |
| Accuracy | ±3mm |
| Measuring angle | ~15° effective beam angle |
| Ultrasonic frequency | 40 kHz |
| Trigger pulse width | 10 µs TTL pulse to start a measurement |
| Interface | Digital trigger/echo pulse pair — no library or bus protocol required |
HC-SR04 Pinout
| Pin | Name | Description |
|---|---|---|
| 1 | VCC | Power, 5V DC |
| 2 | TRIG | Trigger input — send a 10µs HIGH pulse to start a measurement |
| 3 | ECHO | Echo output — goes HIGH for the duration of the ultrasonic round trip. Outputs at VCC level (5V) regardless of board voltage. |
| 4 | GND | Ground |
TRIG is a standard input and is safe to drive from a 3.3V GPIO — most boards read a 3.3V HIGH as a valid trigger. ECHO is the pin that causes problems: it always swings up to the sensor's 5V supply rail, so wiring it straight into a 3.3V-only GPIO (ESP32, Raspberry Pi, STM32) risks damaging that pin over time. Use a simple resistor voltage divider on ECHO — 1kΩ in series with the signal and 2kΩ from the tap point to GND works well — to bring the HIGH level down to a safe ~3.3V before it reaches a 3.3V board.
Setting Up HC-SR04 with Arduino Uno
Library
None — uses built-in pulseIn() by Arduino core
No installation needed — TRIG/ECHO timing uses only digitalWrite(), digitalRead(), and pulseIn(), all part of the standard Arduino API.
Wiring
| Component pin | Arduino Uno pin | Note |
|---|---|---|
| VCC | 5V | — |
| TRIG | D9 | — |
| ECHO | D10 | Safe to wire directly — the Uno's GPIOs are 5V-native, so no voltage divider is needed here. |
| GND | GND | — |
Example code
- Leave at least 60ms between triggers; firing it faster than that can pick up the tail end of the previous echo and read short.
- Objects that are soft, angled sharply away from the sensor, or thinner than the beam width can absorb or deflect the ping and return no echo at all — that's a sensor limitation, not a wiring fault.
- The pulseIn() timeout above returns 0 on a missed echo instead of blocking loop() forever; tune the 30000us value down if you only care about short ranges and want faster failure detection.
Related Components
Related Guides & Projects

Arduino Uno R3 Pinout: Every Pin Explained (Digital, Analog, PWM, Power)
Complete Arduino Uno R3 pinout reference: all 14 digital pins, 6 analog inputs, PWM, UART, SPI, I2C, AREF, and power rails explained with wiring tips and common mistakes.

Ultimate Arduino Mega 2560 Pinout Guide: Complete Power & I/O Reference
Master the Arduino Mega 2560 pinout. Detailed reference for all 54 digital pins, 16 analog inputs, PWM, UARTs, SPI, I2C, interrupts, and power. Includes a printable table and practical wiring tips.

Interfacing HC-SR04 Ultrasonic Sensor with Arduino
Measure distance accurately using ultrasonic sound waves and an Arduino Uno — no complex math, no expensive hardware.
HC‑SR04 Ultrasound Distance Measurement with Arduino – Parking Alert (LCD & Buzzer)
Learn HC‑SR04 ultrasound distance measurement with Arduino Uno. Build a parking alert system with 16x2 LCD and buzzer – shows distance and beeps faster as you approach.