Intro: Haptic Glove for the Blind
The Haptic glove is a device for the blind and/or visually impaired that provides the wearer with information about obstacles in their immediate surroundings. The glove uses two ultrasonic sensors that report the distance and orientation of objects. Depending on what these sensors detect, vibration motors placed throughout the glove vibrate in unique patterns to convey this information to the user.
Step 1: List of Supplies
- #1201: Vibrating Mini Motor Disc - ERM (x4) [$1.95 ea.]
- #2305: Adafruit DRV2605L Haptic Motor Controller (x4) [$7.95 ea.]
- #659: FLORA - Wearable electronic platform - Arduino-compatible [$14.95]
- HC-SR04 Ultrasonic Distance Sensors (x2) [$2.99 ea.]
- #2717: TCA9548A I2C Multiplexer [$6.95]
- #3287: 3 AA battery holder with JST connector [$2.95]
- #1608: Adafruit Perma-Proto Quarter-sized Breadboard PCB - Single [$2.95]
- Ribbon cable
- 200 and 220 ohm resistors
- Velcro strips [$2.98]
- #615: Needle set - 3/9 sizes - 20 needles [$1.95]
- Neoprene, or any other durable fabric
Total Cost: $78.31
Most components were purchased from Adafruit.com
Step 2: Breadboarding
The first step is to connect all of your components using a breadboard so that you can make sure they are all working properly before fixing them onto the final product. The following circuit diagram and image will give you an idea of where everything needs to be connected. Here is a breakdown of what each component does:
This is the microcontroller, which is the part that is programmable. It also provides power to all the components from the battery. I initially hooked everything up to an Arduino Uno since it has a 5v supply, but then replaced it with a FLORA and 3 AA batteries (4.5v).
Haptic Motor Controller
These controllers connect directly to each vibration motor and allow you to program each vibration motor independently of one another, while also having the advantage of including a pre-fixed library of vibration effects. These are not critical to the function of the glove, but it makes it a lot easier to program since you do not need to program your own vibration patterns from scratch.
This simply acts as a sort of expander since there aren't enough SCL/SDA pins on the FLORA to accommodate all the haptic motor controllers. It also allows you to communicate with each haptic motor controller independently by assigning a unique address to each one.
These are what provide the user with the haptic feedback. They vibrate in certain patterns depending on how you program them. More on how they work here.
These sensors are what measure the distance of objects in front of them. They do this by sending out a "trigger" signal, which bounces off of any nearby objects and returns as an "echo" signal. The program is then able to interpret the delay time and calculate approximate distance. Be sure to label them "left" and "right" so that you don't get confused later. More on how they work here.
Step 3: Coding
Now that everything is connected, you can download the code to your FLORA and test it. Download the file below and the necessary libraries (linked below). This example code has the functions listed in the table above.
To test the code, place a large flat object less than 6 inches away from the ultrasonic sensor on the right. The on-board RBG should rapidly blink blue. As you move the object further away, the blinking should become less rapid. Simultaneously, one of the vibration motors (which will later be placed on the thumb) will vibrate rapidly when the object is less than 6 inches away and begin vibrating with less power the further you move the object away. This same pattern should hold for the left ultrasonic sensor, only with an orange light instead of blue
I had added an additional feature, which is that the RBG should blink pink and the middle finger and palm vibration sensors should vibrate when both sensors detect an object less than 6 inches away. However, this feature is not very reliable. I kept the middle finger and palm vibration motors in the final design in case people want to come up with a more creative function for them.
*DO NOT* plug the FLORA board into the computer via usb while the external battery is still connected! Always unplug it from the external battery first.
*BEFORE* downloading the example code provided here, you will need to download the following libraries/drivers:
If the code doesn't seem to be running or your sensors/motors aren't responding:
- Make sure you have selected the correct COM port in the Arduino program.
- Ensure your vibration motors are fully connected to the breadboard/haptic motor controllers. The wires connecting them are very thin and can easily loosen.
- Double check that you haven't mixed up the SCL/SDA wires (multiplexer) or the ECHO and TRIG wires (ultrasonic sensor). It will not work if these are switched.
- If everything is functioning normally when plugged in via usb, but glitching when connected to the external batteries, it is probably time to replace them with fresh batteries.
Step 4: Soldering Data Connections
Now that the code is confirmed to be working, you can begin assembly of the final product. I started by first drawing out all the connections on the outline of a hand, in order to visualize all the final connections. I focused on all the data connections first, and then wired up the power and ground lines at the end. Also at this stage I forgot to solder the resistors to the ECHO and GND pins of the ultrasonic sensors (oops), so they're not in the image. I ended up adding them when I hooked up the ultrasonic sensors to the power "hub" at the center of the glove.
I started by soldering all the connections to the FLORA, and made my way up through the multiplexer, the haptic motor controllers, and the vibration motors. I reinforced my connections with hot glue, heat shrink tubing, and electrical tape.
In all the images the wire color corresponds to the following connections:
GREEN: motor (-)
GRAY: motor (+)
BROWN: ultrasonic sensor echo
ORANGE: ultrasonic sensor trig
Step 5: Fabricating the Glove
The glove is made up of the following components:
- Main glove body (which holds the palm vibration)
- 3 finger straps (pinky, middle, thumb), which hold 3 of the vibration motors
- Arm strap to hold the battery pack
I decided on a finger-less glove design for simplicity's sake, and you can see the general template above. This sketch is not to scale, and you'll probably have to adjust the sizing to fit your hand. It is meant to be worn on the left hand. I first traced out the design onto the underside of some fabric, and then used an Xacto knife to cut it out. I formed the finger pieces by cutting out strips of fabric long enough to wrap around my fingers, and sewing on Velcro straps to hold them in place. I then made pouches to house the vibration motors and sewed them to the finger straps as well as to the middle of the underside of the main glove body (near the palm).
This design requires minimal sewing, and I only sewed in these scenarios:
- Adhere/reinforce the Velcro strips to the fabric.
- Sew the vibration motor pouches onto the finger straps and main glove body.
- Construct the battery pouch on the arm strap.
Step 6: Assemby (Part 1)
Now that the glove was assembled and all the wiring completed, I began adhering the electric components to the glove. For this step, I followed the drawing I made earlier and laid out all the pieces. I then began to sew them on using twine. I ended up placing the haptic motor controllers on the left side of the glove instead of the top because it made more sense that way once I began assembly.
Step 7: Assembly (Part 2 - PWR + GND)
Finally, I connected all my components to power and ground. To do this, I set up a ground and power rail on my small breadboard, by connecting it to the gnd and pwr of the FLORA. I connected my haptic motor controllers and multiplexer to these rails. I then connected my ultrasonic sensors to pwr and gnd, but also took advantage of the extra space on the breadboard to add the resistors I had forgotten earlier. These resistors are essential as they create a divider that lowers the voltage of the ECHO signal, which goes back to the FLORA.
It was a little precarious to solder the gnd and pwr connections after everything was already sewn down, so you might want to do all the soldering first. It made sense for me to wait because I still wasn't entirely sure what the final layout of all the components was going to be.
Using some Gorilla glue, I adhered a small scrap of wood to the glove to elevate the breadboard, and added Velcro to adhere the breadboard to the wood (see image above). I did this so that I could easily lift it up and check for shorts.
The last step is to hot glue your ultrasonic sensors to either side of the raised breadboard.
And YOU'RE DONE!