Ultrasonic cane final project

How I designed an ultrasonic cane to extend the range of a cane for the blind.

Prototype of ultrasonic cane
Great things start with humble beginnings

In Cedar Creek High School's engineering program (in 2015, that is), your senior year's engineering project is spent on a single project. After choosing a partner for the project and shooting through a few dozen impractical or unsolvable problems for seniors with a meer $100 budget, we settled our scope to a single issue: canes for the blind

We saw current technology being cheaper and more accessible now more than ever, so why were the only afforadable options for the blind still stuck in the early 1900s, a white cane that was only a few feet high?

For several weeks, we bounced around ideas to solve this problem, but ultimately settled on the most practical solution. Our solution was control board with a small microcontroller attatched to the handle of a cane with an ultrasonic sensor at the tip which would vibrate at detection of an object within a set range.

The Hardware

Given the scale of this project (and our massive $100 budget), we decided to go with off the shelf components for this build.

While a dedicated circuit board and microcontroller would be more ideal and compact solution, this was beyond the scope of a senior year project. In addition, this project could be open sourced in order provide the highest accessiblity and repairability to the blind and their caretakers.

Arduino Mega 2560
We decided on an off the shelf board to keep the scope within reach.

Because of these concerns, we ended up with the Arduino Mega as the baord for this project given it's massive commmiunity, support and documentation.

Motor for Arduino Mega 2560

We also sourced a few vibration motors (for 6 total motors). Our final intention would be to have 3 handle on each side of the handle that could vibrate if something was to the immediate left or right of the tip of the cane.

Generic HC-SR04 Ultrasonic sensor

Finally, we selected a generic ultrasonic sensor for the project. Operating at 5 Volts and an angle of measure of 15 degrees, it would be more than sufficient for out small project. Given it's power requirements, it could also be safetly powered by the Arduino Mega's built in power pins.

Two sensors were intended to be used at the tip of the cane pointing out at 30 degrees and -30 (330) degrees, for optimal coverage on either side to properly extend the range out that the user can detect.

Testing, Testing, 1, 2, 3...

Arduino IDE with code for ultrasonic sensors and it's results
Arduino IDE with code for ultrasonic sensors and it's results

After wiring everything rudimentarily to a breadboard, we tested all the equipment seperately.

Using the Arduino IDE, I could plug the Arduino Mega into a computer with a USB cable, which also provided power, and load programs onto the Arduino directly. Using this method, I wrote up a few small scripts to test each piece of equipment invidually. The motors worked perfectly, wherein we could change the strength of each motor as well as control each motor seperatly, so deliver on our goal of vibratiing stronger based on distance to the detected obstacle.

Generic HC-SR04 Ultrasonic sensor

We tested the sensors accuracy by measuring the accuracy of the sensors with differently shaped objects at different distances. We tested using a small cardboard box, a large shoebox, and a small metal trash can.

Results and conclusion

According to the testing, the sensors were always accurate within 5 cm, at a range between 0 cm and 200 cm. We knew a range of 200 cm (6.5 ft) would be the best maximum range of the sensor before the readings began to be inaccurate, so we set the range between 0 cm and 200 cm, as the minimum and maximum distances to read.

The largest issue with this project came from combining the equipment of the sensors and motors together. While all the equipment worked fine seperately, trying to mix things together would crash everything. We tested every sensor, motor and pin on the Arduino indidiaully, trying to diagnose the issue but ultimately could not figure out the cause for these errors.

We even presented our dilemeas during our bi-monthly meeting with Lockheed Martin engineers, who we were partnered with in our high school for our engineering program.

Every engineer we met with was equally as perplexed as we werer, but praised our diagnotic approach and our efforts into solving this problem (which after years of hindsight, I believe may have been a hardware defect on the Arduino board).

I still consider this a valuable experience in the lengths we went through and the goals we were actually able to accomplish, as well as the validation from working engineers at Lockheed Martin that our troubles were something they also faced daily.