HC-SR04 Ultrasonic Measurement with Swift

This tutorial is compatible with all Raspberry Pi models with 40 GPIO pins. It may also work with the older 26 GPIO pin models with some code modification. To complete this tutorial, you will first need to install Swift-Lite on your Raspberry Pi. Details for this are in tutorial 1.


In this tutorial, we will be using a HC-SR04 Ultrasonic unit, a 330 Ohm resistor, a 470 Ohm resistor, a breadboard and some jumpers wires to connect to the Pi's GPIO pins.

The HC-SR04

The HC-SR04 uses ultrasonic pulses to measure distance in a similar way to a bat. The unit sends out a pulse and then listens for an echo. By measuring the time taken for the echo to return, we can calculate the distance to the object that reflected the pulse.

There are 4 connections on the device.

  • Power – This requires 5V
  • Ground
  • Trigger – We send a signal to this pin to start the pulse
  • Echo – This pin outputs 5V for the duration of the pulse if detected.

Special Note

The Echo pin outputs 5V. This is higher than the 3.3V rated input of the Raspberry Pi's GPIO pins. To avoid damage to the Pi, we need to reduce the 5V to under 3.3V. This can be easily achieved by using 2 resistors as a voltage divider. By using the resistors shown in the connection diagram, we can reduce the voltage to about 3V.

Other resistors can be used to achieve the same effect by using the formula:

V out = V in * Resistor 1 / ( Resistor 1 + Resistor 2)

More info on voltage dividers here.

Connecting the Hardware

Use the attached diagram to connect all the components. Take care with the order of the resistors and placement of the echo return jumper wire.


The HC-SR04 will plug straight into the breadboard as shown in the photo.

The Swift Code

The Swift code consists of a main project file piCodeUltrasonics.swift, the GPIO module file piCodeGPIO.swift and another small module file piCodeTime.swift. The GPIO module file is the same file that we used in the previous tutorial – GPIO Getting Started.

piCodeTime.swift is a small utility file that uses DispatchTime to insert delay or pause into the program. This can be used the same way as sleep or usleep.

The Main Project File

1. Include the required module files and import main libraries.

// Created with PiCode for Swift 3.0 
// A Swift-Lite project file 
// type:project 
// name:piCodeUltrasonics 
// include:piCodeTime.swift 
// include:piCodeGPIO.swift 
import Glibc 
import Foundation 
import Dispatch  

2. Detect board type and set up 2 GPIO pins, one for the “trigger” and one for the “echo“.

Read More:  HC-SR04 Ultrasonic Measurement with Swift

About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top