Home CodeMicropython Raspberry Pi Pico Ultrasonic ranging module HC-SR04 micropython example

Raspberry Pi Pico Ultrasonic ranging module HC-SR04 micropython example

by rp2040guy71

In this article we connect an Ultrasonic ranging module  to a raspberry Pi Pico


Ultrasonic ranging module HC – SR04 provides 2 cm – 400 cm non-contact measurement function, the ranging accuracy can reach to 3 mm. The modules includes ultrasonic transmitters, receiver and control circuit.

The basic principle of work:

(1) Using IO trigger for at least 10 us high level signal,
(2) The Module automatically sends eight 40 kHz and detect whether there is a pulse signal back.
(3) If the signal back, through high level , time of high output IO duration is the time from sending ultrasonic to returning.

Test distance = (high level time×velocity of sound (340M/S) / 2,

Electric Parameters

Working Voltage – DC 5 V
Working Current – 15mA
Working Frequency – 40 Hz
Max Range – 4 metres
Min Range – 2 centimetres
Measuring Angle – 15 degrees
Trigger Input Signal – 10uS TTL pulse
Echo Output Signal – Input TTL lever signal and the range in proportion
Dimension – 45*20*15 mm

Timing diagram

The Timing diagram is shown below. You only need to supply a short 10uS pulse to the trigger input to start the ranging, and then the module will send out an 8 cycle burst of ultrasound at 40 kHz and raise its echo.

The Echo is a distance object that is pulse width and the range in proportion .

You can calculate the range through the time interval between sending trigger signal and receiving echo signal.

Formula: uS / 58 = centimeters or uS / 148 =inch; or: the range = high level time * velocity (340M/S) / 2; we suggest to use over 60ms measurement cycle, in order to prevent trigger signal to the echo signal.

Parts Required


Name Link
Pico Raspberry Pi Pico Development Board

Aliexpress link

Connecting cables Aliexpress product link

Lysee 3D Printer Parts & Accessories – AHT20 Temperature and Humidity Sensor Module DHT11 Upgrade I2C XD Humidity Sensor Probe – (Color: Green)

Ebay link



To connect the display to your Raspberry PI Pico requires just 4 wires, you just need to wire the Vcc and GND PINs from display to VBuS and a GND PINs of RPI Pico, then Echo and Trig PINs from the module to suitable SDA and SCL PINs from Raspberry PI Pico

Here is a layout in fritzing to show this

Code Example

I use thonny for all development


# The distance is captured by a Sharpir sensor and displayed on the screen
# Insert HC-SR04 to CN6
import utime
import os
from machine import Pin

trigger = Pin(16, Pin.OUT)
echo = Pin(17, Pin.IN)

# creates a function
while True:
    # turns off trigger, then waits 2 microseconds
    # turns on trigger for 5 microseconds
    # creates a loop that checks the echo pin - if nothing is received, updates a variable called signaloff
    while echo.value() == 0:
        signaloff = utime.ticks_us()
    # creates another loop that checks echo pin - if something is received, updates a variable called signalon
    while echo.value() == 1:
        signalon = utime.ticks_us()
    # creates a variable called timepassed which stores the value of the time for the pulse to return as an echo
    timepassed = signalon - signaloff
    # creates a variable called distance to store value of timepassed as a distance in centimetres
    distance = (timepassed * 0.0343) / 2

    # prints distance in console
    print("The distance from object is ", distance, "cm")

In the repl window I saw this is

The distance from object is 35.96355 cm
The distance from object is 23.78705 cm
The distance from object is 25.57065 cm
The distance from object is 15.5379 cm
The distance from object is 15.79515 cm
The distance from object is 11.85065 cm
The distance from object is 5.64235 cm

You may also like

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More