Do you know someone who is visually impaired? Or have you ever imagined how challenging this may be? Many with this disability navigate surprisingly well despite their lack of vision. However, accidents can still happen in certain circumstances. When a ceiling is low or the design of a building is foreign, one could hit their head at no fault of their own, even if they are careful. To solve this, I designed Helping Eyes!
Helping Eyes is a "visual aid" which can be mounted to any apparel to prevent injury to the visually impaired. It uses an ultrasonic range sensor to "sense" objects and sends vibrations to warn its wearer of the incoming object (or wall/ceiling). As an object comes closer, the vibration's intensity increases. Helping Eyes is inexpensive (less than 10 USD), compact (5cm by 7cm), runs on two small coin cell batteries, and can be mounted anywhere. Using this tutorial, you can build one of your own in just a few hours!
(Below is a video of the Helping Eyes mounted on a hat. You will notice some tones produced by the device when it is on. These are only audible because of my recording equipment. In person these sounds are not audible.)
Step 1: Get Parts!
You will need these parts:
-Attiny85 (with socket)
-SPST Slide Switch
-Two CR2032 batteries (with holder)
-Perfboard (5cm by 7cm)
-DC Vibration Motor (I salvaged mine from an Xbox controller)
-A mounting surface (i.e. a hat)
You will need these tools:
-Soldering Iron (with rosin)
-Hot Glue Gun
Step 2: Breadboard It!
Like all circuits, before soldering our final implementation it is good practice to build the circuit on a breadboard first. Using the schematics in step 3 and the code in step 4, build the circuit on a breadboard. Here are some references/knowledge you'll need during this step:
Once you are finished you may want to keep your breadboarded circuit in tact as a reference for when we solder!
Step 3: The Schematics
The schematic can be broken down into three parts:
1. Power Supply
2. HC SR-04
3. DC Vibration Motor
The power supply consists of two CR2032s, a diode, and a SPST switch. The CR2032s in series will give us a voltage of about 6v (provided that we are using relatively "new" batteries). From the attiny's datasheet, you will find that the absolute maximum operating voltage of an attiny is 6v. Since batteries can produce higher voltages than their rated amounts, just connecting two CR2032s in series could give us voltages higher than 6v (which would damage the attiny). To lower the voltage, I added a diode in series with the batteries. This will drop the voltage down 0.7V, to ensure our attiny never receives any voltage higher than 6v. To complete the power supply, add a SPST switch to act as an on/off switch for our circuit.
Connecting the HC SR-04 is rather straightforward. Just connect VCC to our positive voltage supply, the GROUND to ground, TRIG to the attiny85's pin 2, and ECHO to the attiny85's pin 3. (The TRIG and ECHO connections are dependent on the attiny's programmed code).
The DC vibration motor requires a transistor, and an attiny pin to function. First, connect the base of an NPN transistor to the attiny's physical pin 5. Then connect the collector to our positive voltage supply and the emitter to the positive connection on the DC motor. Finally, connect the DC motor's negative side to ground. A transistor is used to operate the DC motor because the attiny's pins do not supply enough current to power our motor, so instead we use a transistor so we can supply more current to the motor.
Step 4: The Code
The code was adopted from another instructable I wrote: Pocket-Sized Ultrasonic Ruler. I used the same logic for finding distance with the HC SR-04 as that instructable, but I added a block of "if" statements and logic for the "motor".
Our code can be broken down into three parts:
1. The setup (and on indicator)
2. Distance finding
3. The "if" block
At the beginning of the code, you will see declarations of our variables (which are subject to change based on personal preferences). There are our RANGE_FAR, RANGE_MED, and RANGE_CLOSE variables, (which define the thresholds of the distance of an object), and SENS_HIGH, SENS_MED, and SENS_LOW, (which define the sensitivity the DC motor will be when the thresholds are crossed). Then in our setup function, we call the pinMode() function to assign outputs or inputs and send some positive voltage pulses to our DC motor to tell our user the device is "on".
As mentioned before, the distance finding logic (in our loop() function) is similar to a previous instructable. It's best just to believe me that this code returns the distance (in centimeters) for us to process later.
The "if" block's purpose is to check if our distance crosses anyone of our three thresholds: RANGE_FAR, RANGE_MED, or RANGE_CLOSE. If it crosses one of those thresholds, It will send a duty cycle to the DC motor equal to either the SENS_HIGH, SENS_MED or SENS_LOW variable. (255 is a full duty cycle and 127 is 50% duty cycle). I have made all of these constant variables, feel free to change their values according to what you want your distance threshold and sensitivity to be.
Step 5: Plan the Layout!
Before we solder, let's make sure we use our perfboard space wisely to avoid having to move components later. Here are some things to consider while planning your perfboard layout:
-Give the DC vibration motor room to spin.
-Make the SPST switch easily accessible.
-Mount the HC SR-04 straightly with nothing obstructing its view.
-Make sure the batteries can be easily replaced.
When you have considered these, we can finally solder our final circuit!
Step 6: Solder!
Before soldering any components to the perfboard, be sure to hot glue your DC motor to the board. This will protect any wires from being disconnected later on.
To begin soldering, I connected all the major components to the board first (such as the motor, attiny socket, hc sr-04). Then I made the necessary connections after. However, any way you solder your circuit will work, of course.
This circuit shouldn't need too much troubleshooting since there aren't many components, but if you run into problems be sure you connected two batteries and your diode since this circuit needs more than 3v to function (due to the voltage drop of the DC motor). Refer back to the schematic, and your breadboarded circuit for help troubleshooting!
Next we can mount your new Helping Eyes to your mounting surface!
Step 7: Mount It!
Since this device is so small, it can be mounted to many surfaces (such as clothing, hats, belt buckles, etc...). I chose to mount mine to a hat to prevent against accidents involving low ceilings in homes. Because if the varieties of mounting surfaces, I will give you a list of ways to mount your Helping Eyes:
-Use Hot Glue or Epoxy
-Make the circuit using a arduino lilypad and sow it into clothing.
-Attach using velcro
-Screw it into your mounting surface
There are many ways to mount your Helping Eyes, please share your mounting alternatives below in the comments!
Step 8: Walk Safer!
Hopefully you are now an owner of a Helping Eyes visual aid! It makes a great gift, or a good addition to your collection of electronics projects. I hope you learned a bit about DC motors, ultrasonic range sensors, attinys, and using CR2032s. If you enjoyed this instructable please support me by voting for this in either the Home Improvement, Battery Powered, or Epilog contest! Thank you for your interest, and enjoy your new device!