Distance
Interfacing HC-SR04 Distance with Raspberry Pi
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
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 |
Swipe sideways to see every column →
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.
Variants
- HC-SR04
- ~$1–3
- HY-SRF05
- ~$2–4
- JSN-SR04T
- ~$3–6
- US-100
- ~$3–5
The plain HC-SR04 is the default choice for indoor, dry, breadboard-range projects. If the sensor needs to live outdoors or in a tank, use the waterproof JSN-SR04T instead — same trigger/echo timing concept, but check its longer minimum range before swapping it in. If you want native 3.3V operation without a voltage divider, the US-100 is the more forgiving pick.
Setting Up HC-SR04 with Raspberry Pi
Library
gpiozero by Raspberry Pi Foundation
Preinstalled on Raspberry Pi OS. If missing: sudo apt install python3-gpiozero
Wiring
| Component pin | Raspberry Pi pin | Note |
|---|---|---|
| VCC | Pin 2 (5V) | The sensor needs a real 5V supply to hit its rated range — do not power it from 3.3V. |
| TRIG | GPIO23 (Pin 16) | Safe to drive directly — Pi GPIOs output 3.3V, which the sensor reads fine as a trigger HIGH. |
| ECHO | GPIO24 (Pin 18) | REQUIRED: add a voltage divider (e.g. 1kΩ in series, 2kΩ from the tap to GND) before this pin. Pi GPIOs are NOT 5V-tolerant and the raw ECHO signal can damage them. |
| GND | Pin 6 (GND) | Common ground with the 5V supply is required for the divider math to work. |
Swipe sideways to see every column →
- gpiozero's DistanceSensor already handles the trigger pulse, echo timing, and averaging internally — no manual pulseIn-style timing code needed on this board.
- The Pi's GPIOs are strictly 3.3V — the voltage divider on ECHO in the wiring above is not optional, unlike the Arduino Uno where the sensor and board share a 5V logic level.
max_distanceis in meters and defaults to 1m in gpiozero; set it to the sensor's real 4m range (as above) if you need longer readings, or tighten it if you only care about close objects and want faster timeouts.
Related Components
Related Guides & Projects
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.

ESP32 Ultrasonic Radar with Servo Sweep and Live Web Dashboard
Build a sweeping ultrasonic radar with an ESP32, SG90 servo, and HC-SR04 sensor, and watch live blips on an HTML5 canvas dashboard served straight from the chip — no app, no cloud.

Raspberry Pi GPIO Pinout: The Ultimate Reference
A comprehensive map of the 40-pin GPIO header on Raspberry Pi 4, 5, and Zero.

Interfacing HC-SR04 Ultrasonic Sensor with Arduino
Build a clean, accurate distance meter with an Arduino Uno, an HC-SR04 ultrasonic sensor, and an I2C 1602 LCD — just four wires to the display, complete code, and the theory behind every line.