Introduction: Ultrasonic Sonar for the Blind and Visually Impaired

Picture of Ultrasonic Sonar for the Blind and Visually Impaired


This article is intended to show how to build and use an accessibility device I've designed to assist people who are at various levels of visual impairment. The idea behind the device is to use an ultrasonic range-finder sensor, and translate its reading into an audible indication of distance of objects up to 4 meters away, thereby giving a person who is visually impaired a better sense of their immediate surroundings. Aside from the utility of the device, several other key features of the device include that it is wearable, has a long battery life, is fairly light-weight, and is built from rather inexpensive parts.


Required parts:


  • Soldering iron and solder
  • Dremel with cutting disc or other sharp tool for removing select traces from the perma-proto board

Fair disclosure at this point, I have only tested this procedure using the oldest revision of the Raspberry Pi model B. I tentatively believe that it should work with the newer revisions since the 40p to 26p ribbon makes it GPIO pin compatible, but I know also that the power requirements vary from one revision to the next, so if you choose to use a newer revision, your mileage may vary.

Step 1: Prepare the Raspberry Pi

I've chosen to base the firmware on the Raspberry Pi for this project on Raspbian, which you can obtain here, along with installation instructions. I've created a basic shell script to help set the Pi up for its role in this project. Once you've installed the Raspbian OS, make sure your Raspberry Pi is connected to the internet and execute the following commands:

git clone

cd sonar-for-the-blind

sudo sh

Running the setup script will take a while. Its purpose is to set some python scripts to run on startup, and also to the set the filesystem to be read-only. Once it is complete, shut the Raspberry Pi down (i.e. "shutdown -h -P now"). If everything went well with the setup script, you won't need to issue the shutdown command from here on out (until you reinstall the OS or mess with fstab to undo the 'ro' setting).

For reference, the setup script and python-based software that will be doing the work on the Raspberry Pi was all developed against 2016-05-27-raspbian-jessie.

Step 2: Print 3D Printable Parts

Picture of Print 3D Printable Parts

The .STL files for the 3D printed parts are attached to this instructables article. For this step, grab the files and print the pieces. In terms of print settings, I recommend a 50% infill, with supports, and I also found enabling brims on the first layer to be helpful to support some of the taller supports.

Step 3: Break Traces on Perma-proto Board

Picture of Break Traces on Perma-proto Board

The HC-SR04 is going to live on the perma-proto board, but as the board ships, every thru-hole on the board has traces running to it. So we're going to put an end to that. Using a a dremel, a flat-head screwdriver or other sharp utensil, scratch away traces as indicated in the photograph. Take careful note of which side the numbers are printed on, or you may accidentally remove traces on the wrong end of the board.

Step 4: Assemble Perma-proto Board and Components

Picture of Assemble Perma-proto Board and Components

The components will go on the board as shown in the diagram. Note the direction of the pin header relative to the components, the notch faces away from the sensor and resistor, as we'll be using pins 23 and 24 to connect to the echo and trigger of the HC-SR04 sensor.

For reference, the connections are summarized as follows:

raspi Vcc 5v -> sensor Vcc

raspi pin 24 -> R1 (1k ohms) -> sensor echo

raspi pin 23 -> sensor trigger

raspi Gnd -> sensor Gnd

Step 5: Secure Assembled Perma-proto to Handpiece

Picture of Secure Assembled Perma-proto to Handpiece

Using 4 screws approx. 1/4 inch in length, attach the assembled perma-proto board to the 3D-printed hand piece. At this point, you may also wish to flex the leads of the sensor back a little bit, as the sensor has about a 30 degree field-of-vision, angling it slightly away from the hand may prevent occasional false readings.

Complete this piece by securing one end of the 26-pin ribbon to the header on the perma-proto board so that the ribbon runs away from the HC-SR04 sensor, and then secure the cover piece with 2x approx. 1/2 inch screws. Finally, run a single Velcro strap through the loops on the underside of the piece.

Step 6: Assemble Arm Piece

Picture of Assemble Arm Piece

The 3D printed arm piece has areas for the raspberry pi, speaker, and battery. The orientation of each object is important, note the micro-USB port of the speaker is at the back of the arm-piece. For this step, place the pieces in their respective areas of the 3D printed arm piece as shown in the image, and then secure the cover pieces. Then, run a Velcro strap through each loop of the arm-piece. For additional comfort, a second Velcro strap can be daisy-chained with the rear strap to increase the arm size that it can accommodate.

Step 7: Connect the Arm and Hand Bands

Picture of Connect the Arm and Hand Bands

Using your ribbon cable, connect the GPIO pins of the Raspberry PI to the 26 pin header of the hand piece. Be careful not to force either side if it isn't fitting, as doing so may result in bent pins on either side.

At this point, also connect the speaker to the Raspberry Pi using the provided micro-USB to USB and 3.5mm jack. Specifically, you will want to use only the 3.5mm jack and micro-USB connectors. Do not plug the speaker into the Raspberry Pi's USB ports, as this will likely prevent the Pi from booting up due to brown-out.

Step 8: Usage

Picture of Usage

Now you are ready to test the device. To turn the device on, use the USB-to-USBotg cable that was included with your battery, and run it from a USB port on the battery to the USB-otg power port of the Raspberry Pi. Also, you will need to make sure that the power switch on the speaker is in the "on" position. Bear in mind that the device is using a traditional Linux distribution under the hood, meaning that it will require a moment to boot up. In a moment, the device should begin to emit tones indicating the distance of nearby objects (up to a maximum distance of 4 meters). The sensor can be aimed in any direction to get a reading.

When you're finished with the device, there is no need to issue any type of shutdown to the Raspberry Pi, because it is using a read-only file system. To turn it off, gently remove the USB-to-USBotg cable out of the battery's USB port, and also change the position of the speaker's power switch to "off". The battery and speaker can then be recharged using most standard phone chargers.


RaedT (author)2016-06-28

that's really cool, to see through your hand which I think is much better than ultra sonic glasses as your hands are more flexible . but I want to ask you did you have problems reading from irregular surfaces say for example hand? I've worked with ultrasonics before, not sure if it's the manufactures thing or the way ultrasonics work, but I would get inconsistent readings with irregular surfaces which led me to use books and notebooks for demonstrations

LukeI2 (author)RaedT2016-06-28

Thanks RaedT! My experience with these particular sensors is fairly limited, but testing at the workbench, it seemed to detect hands pretty well -- but you're correct also that some surfaces cause irregularities. Notably, I've observed that the sensor is most reliable when aimed from a high angle / orthogonal to a flat surface, but gets spotty when aimed at a low angle to a flat surface (just to speculate, my guess is that too much of the ultrasonic pulse is being deflected rather than bouncing back for the sensor to pick up). Furthermore, there is a question of resolution, I'm not sure how small of an object profile the sensor is able to detect. These are both points with potentially significant impact to the device's usability.

Having stated that observation, this is probably a good opportunity to refine what should be the expectation when using this device: that it is not a catch all, but rather it provides some additional information about the user's environment. I do not expect at this point that it should replace a given user's existing accessibility methods or devices, but rather supplement them.

sztakacs (author)LukeI22017-07-02

Would some sort of static sensor (worn as a pendant or on the belt) possibly provide better results with a sort of self checking loop? I don't really understand the ins and outs of how this works, but I'm thinking that anything that acts as a frame of reference would improve the resolution.

RaedT (author)LukeI22016-06-29

makes sense, the greater the angle of incidence the the more spotty the reading will be. makes me wonder if I can try triggering an ultrasonic from a certain angle and see if it gets picked up by an ultrasonic that lies in the direction of reflection , something like the picture .

as for your project, I wonder what other sensors, perhaps in combination with the ultrasonic, can provide a more detailed and accurate reading of the surrounding environment with all the different variables in it, people moving ..etc maybe some motion detection, a camera with image processing?

here's a crazy idea, try putting on a blind fold for a couple of hours and try to navigate your house with the arm on, see what kind of observations and feedback you will get .

TheLoneWanderer (author)2016-09-30

thought it was the fallout powerfist lol

AshmanD (author)2016-09-18

Should refine and do a limited field test to check the usability of this device.

sztakacs (author)2016-06-27

Have you given this a field test yet? I think this is a great idea and long overdue.

LukeI2 (author)sztakacs2016-06-28

Thanks for the comment, sztakacs. No field test has been conducted yet, and to dive a little deeper, I think your question eludes to an overarching concern: What exactly is the state of this project? To answer that question, it's pretty early. This device's development level should be considered as in line with a proof-of-concept.

With that in mind, in part by posting this article, I'm hoping to solicit feedback that might eventually be used to further develop and mature the project. Already, just in producing an iteration of the hardware, shortcomings of the design have been observed. For example, the arm-piece is a bit top heavy, so it may benefit in a future iteration to have its weight distributed differently. In the meantime, I think the device offers reasonable value even in its current configuration, I'm hopeful that it will help in a practical way.

DIY Hacks and How Tos (author)2016-06-27

Nice. I love the sci-fi look that this has.

Thanks! Although not intentional, I had played through Fallout 4 before starting the project, it's possible I may have channeled the Pip Boy a bit in its design.