This project was for someone I know who is blind. If you can’t see your surrounds then coming into contact with things is always a surprise, she is elderly so it’s not easy to use a cane, which is the low-tech surprisingly effective way of orientating yourself if you can’t see.
Initially I thought the idea was original, but a little Googling shows it certainly isn’t and more sophisticated versions are available commercially, like the minigude and K sonar. But for the low cost ~ £15 of a PIC and a few bits it’s worth a go to see if the basic principle works, assistive tech seems very variable in effectiveness depending on the user.
Bats use ultrasonic pulses to locate things by emitting a pulse of high frequency sound and listening for the echo. More recently ultrasonic ranging has become a big thing in the robotics field. These modules turn the analogue interfacing into a microcontroller-friendly length of pulse digital signal. I bought a SR04 from ebay for less than £3, which does much of the hard work.
You apply 5V, pulse the trig for 10μs and get a pulse of varying duration from Echo. It’s surprising easy to turn that into a tone rising in frequency as you get closer. Start a timer on the leading edge of the echo return, and when the training edge comes, copy the count into the duration control of another timer (copy into the PICs CCP module which controls the period of TMR1) Then toggle a pin when the CCP module resets TMR1.
You have to do a little error checking to catch timeouts or when the distance is too large, the signal gets more reliable as you get closer to an object, which is good. I was able to find doors and follow a wall using it. It works better when the ultrasonic sensors are vertical, the beam spread is narrower. It does not help you find things on the floor.
I was surprised how little it takes to make one of these now – all you need is the HC04, a 16f628 and a piezo speaker, and it runs 5mA off a 9V battery regulated down to 5V.
PIC code on Github
This works better in real-world application held vertically, not horizontally. but I didn’t know that when I made the video.