There are some projects which seem similar, but this one
creates 2D sound image, which can provide X,Y position and
approximate dimensions of each obstacle, in two horizontal
There are four pairs of standard ultrasonic range finder
speaker/microphone pairs, and they emit short pings, about 100
ms each. Stereo signal is amplified and sampled by MCU in 45 ms
period, which covers about 7.6 m diameter. Then the sampled
sequence is played at about 20x slower rate, which will last
about 900 ms. That gives the 1Hz repeat rate.
If the ultrasonic frequency is 40 KHz, the reproduced tone will
be lowered to 40/20=2 KHz, which is unpleasant for permanent
listening. Luckily, the reproduced frequency is unique, so it is
easy to lower the frequency without affecting timings, by
emitting sampled slices in lower sample rate.
User will hear reflected pings at timings which depend on
distance (Y position) to the obstacles, and binaural effect of
the stereo sound will determine the X position of each obstacle.
At the same time the sound volume will roughly depend on the
There are two equal stereo sets, one of which covers the
horizontal plane, and the other one is pointed about 30°
downwards, to detect lower objects (stairs, pavement, holes).
Those two sequences can be played simultaneously, with different
I will surely make the prototype and put the results here. The
main problem for me will be how to purchase the wide angle
ultrasonic speaker/microphone pairs, as most of them are
typically quite narrow. The optimal characteristics would be
Lembertian, but I wonder is there such ultrasonic transducer on
I shall also add 2- or 3-axis magnetometer, so the MCU will play
one more short tone signal (with some other frequency) after
every (or every Nth) ping-play sequence. Its stereo position
will denote North (or South, with two short tone signals). I
think that it might also help a blind person in orientation.
... some very early background of this project ...
About 40 years ago, I was the young licensed ham radio operator,
and one of our radio club members was blind. He had the problem
of adjusting his transmitter to the peak output, as he couldn't
see the instrument dial. We made some very rudimentary voltage
controlled oscillator for him, which was squealing and whirring
more than producing normal oscillator tone. But he was
delighted, as he could also hear some more transmitter
parameters in that awful sound. We did our best, but no one of
us (except him) could ever hear anything meaningful in that
That makes me think that it is more helpful to give the visually
impaired person the raw audio information, than to clean and
shape it, like the sonar range finders do.
I used some old OCR project with PIC24EP512GP806 to build the
first prototype. All necessary resources are here - two 10-bit
ADCs for sampling, two PWM registers and 52K data memory for
sampled sequence. Here it is:
I used two HC_SR04 ultrasonic range finders (two euros each:),
removed MCU, modified DC offset from 2.5 to 1.65V (added one more
resistor in parallel with R15 on the picture, which is R16 on the
schematics) for analog output signal picked from pin 7 of 324 opamp,
and replaced the connector, as I needed one more pin for output
signal. Driver is still 3232 (U3), driven from my MCU. I planned to
use four T/R pairs, for low objects detection, but I gave up. Even
with two channels, the audio signal is too confusing.I used two
HC_SR04 ultrasonic range finders (two euros each:), removed MCU,
modified DC offset from 2.5 to 1.65V (added one more resistor in
parallel with R15 on the picture, which is R16 on the schematics)
for analog output signal picked from pin 7 of 324 opamp, and
replaced the connector, as I needed one more pin for output signal.
Driver is still 3232 (U3), driven from my MCU. I planned to use four
T/R pairs, for low objects detection, but I gave up. Even with two
channels, the audio signal is too confusing.
Here is the schematics of the older version of HC_SR04, I don't
have the new one (there is the new version on the photo). My
modifications are in red colour.
And here is my PCB. I rearranged it a little, replaced
board-to-board with cable connectors, removed some components
and added LDO and two diodes for analog voltage limiting.
I wrote the firmware in assembler, with
following parameters (all of them are easily adjustable and will
be the subject of additional experiments):
Ultrabeep signal: 40 KHz, total of
1 ms (40 pulses)
Sample rate: 875 KHz, which is 1.14
Sampling period: 22.725 ms (20000 left and 20000 right channel
DAC (PWM) rate: 15.5 KHz, total of
Sound slowing factor: 56.3
Audio frequency: 711 Hz (which is
40KHZ lowered by 1/56.3 factor)
Measured total current consumption (MCU
and two HC_SR04s) @ 5V is 107 mA.
Then I performed some experiments.
Generally it works as expected, but I was disappointed not with
the unit, but with me. I can hear sound reflexes (there a lot of
them in my room), detect walls and some other flat areas, but it
is hard for me to "see" anything more specific. I tried it
outside also, I could hear some trees and parked cars, but only
in two or three meters range.
There must be some dynamic and
MCUcontrolled AGC, and high power transmitter. The amplitude
difference in signals reflected from near and far objects is too
It was amazing how easy it is to detect
stairs - there is the fast tap-tap-tap-tap signal, you can even
count them. But it is quite annoying to listen to one frequency
for more than half an hour. I must add some filters to get the
Is it really useful for blind person? I
am not sure, at least at this stage. I don't know any visually
impaired person, but I shall try to find somebody who wants to
join this experiment. I hope that he will not expect too much, I
would not like to dissapoint him.
For the next step, I am planning some
fine digital signal processing. Signal shaping, filters, AGC,
high quality ultrasound transmitters and receivers, more
powerfull drivers, low noise preamps, magnetometer, blah,