Introduction: Moonwalk: a Haptic Feedback Prosthetic
Moonwalk is a pressure-sensitive prosthetic device for individuals with impaired tactile sensation (neuropathy-like symptoms). Moonwalk was designed to help individuals receive helpful haptic feedback when their feet come into contact with the ground, so that they can improve balance + mobility.
Designed & made open-source by Akshay Dinakar.
To see more projects & creations, visit www.akshaydinakar.com/lab, the non-profit design studio of Akshay Dinakar Design.
Facebook: www.facebook.com/akshaydinakar | Instagram: @AkshayDinakarDesign
This prosthetic device uses a velostat sensor (attached via medical adhesion, nanosuction, or fabric sleeve to any relevant part of the body) to read in pressure values via analog pins on an appropriate microcontroller. Once the pressure value reaches a certain limit, a specified haptic signal is activated, alerting the user that they have made contact with a surface.
The intent of this project is to create a low-cost prosthetic device to enhance the independence + mobility of any individual with numbness in a part of their body. I have personal experience with family members who experience this condition, and wanted to create an accessible solution that others with limited engineering experience could assemble on their own. Due to the individualization of symptoms and variety in electronic component availability, it is challenging to create a device that works for a range of use cases. However, I am proud to release Moonwalk as a solution that can be used on any limb / affected part of the body, compatible with an array of form factors (whichever is most appropriate for the user).
For aesthetic considerations and professional finish, I have used advanced fabrication techniques including soldering, silicone molding / casting, and 3D-printing to assemble this prosthetic. However, simple breadboarding and sewing techniques also get the job done.
Nearly 20 million individuals in the U.S. alone experience neuropathy, a common side effect of diabetes, cancer, & arthritis. Neuropathy is characterized by a mixture of sharp tingling pains and numbness in the hands and feet of individuals, as a result of peripheral nerve damage. Neuropathy can severely limit mobility by reducing sensations of touch when feet and hands come into contact with surfaces. However, haptic feedback in the form of vibrations on unaffected parts of the body can help individuals regain balance by linking the feedback to their proprioceptive sense.
Microcontroller (any of the below options are fantastic):
- Arduino Nano (smallest physical size, but will require extra electronic components for charging)
- Adafruit Flora (go-to option for wearables - flat form factor and has built-in charging)
- Adafruit Feather (has plenty of extra features that we don't need, but a very compact form & built-in charging). I will be using this microcontroller for this tutorial. There are different versions of Feather than include BLE, WiFi, or Radio chips – any will work.
- LRA vibration motor (capable of providing much more customizable vibration sensation than the typical ERM vibration motor). Any vibration motor under 3V will work, but an LRA will be the strongest vibration output (we are using a simplified circuit to make our design compact [powering the vibration motor directly from the microcontroller), and most microcontrollers have current limitations that weaken the vibration strength).
Haptic Motor Driver (interfaces between the microcontroller and the vibration motor):
- Haptic Motor Driver (DRV2605L, manufactured by Texas Instruments and distributed by Adafruit).
Li-Po Battery (somewhere in the 100 - 350 mAh range should be plenty):
- 22 AWG Silicone Wire (the silicone provides a great balance of flexibility and durability for the wire, and is the right diameter).
- Velostat is a pressure-sensitive surface that changes resistance when squeezed or compressed.
- Any type of tape (duct, Scotch, electrical, masking) will work, but I recommend a transparent & wide packaging tape. You will only need a few inches.
Aluminum Foil (You only need about 4x4 inches)
- Arduino IDE (Free to download & use, get it here & install: https://www.arduino.cc/en/main/software)
Step 1: Assemble Your Velostat Pressure Sensor
It's simpler than you think.
1. Cut your velostat to size. Use a pair of scissors to trim your velostat sheet to whatever size sensor you need. If you're using this prosthetic for feet, make it the size of a heel. If you're using it for hands or fingers, make it the dimensions of whatever skin you want to cover.
2. Cut aluminum foil to size. Cut two pieces of aluminum foil to the same dimensions as the piece of velostat. Sandwich the piece of velostat in-between the two pieces of aluminum foil. The aluminum foil serves as a conductive layer.
3. Strip silicone wire. Using wire strippers, strip 3-4 inches of exposed wire off of two silicone wire segments. Each silicone wire should be about 15-20 inches long (make them both the same length for aesthetic appeal). Place each stripped wire on a side of the aluminum foil. The overall sandwich order is now: stripped wire 1, aluminum foil 1, velostat, aluminum foil 2, stripped wire 2.
4. Tape pressure sensor together. Tape over your component sandwich and cut away any extra bits of tape, such that everything is securely attached together. It is extremely important that the velostat is cleanly separating the two sides of the sandwich (the aluminum foil / stripped wire on the bottom should NOT be in contact with any part of the top conductive surfaces).
5. Braid the wire. To keep the wires together and prevent them from flopping around during user movement, twirl them together (the more times you twirl, the more secure they will be). This is also good electrical engineering practice when you have groups of long wires going from the same start to end point.
Step 2: Connect Your Components
Time to connect all your individual electronic parts. I soldered all my components together, but it's also possible to use a breadboard (in that case, you will still need to solder pins onto your microcontroller and haptic motor driver).
1. Solder Pressure Sensor to Microcontroller: Connect one of your braided wires to an Analog (A1) pin of your microcontroller, and solder the remaining braided wire to the Ground (Gnd) pin.
2. Solder Vibration Motor to Haptic Motor Driver: Solder the red (positive) wire of your vibration motor to the + terminal, and the blue (ground) wire to the - terminal of the haptic motor driver.
3. Solder Haptic Motor Driver to Microcontroller: Using two very short silicone wire segments, solder the following pins on the haptic motor driver to the microcontroller.
- VIN -> 3V
- GND -> GND
- SCL -> SCL
- SDA -> SDA
*The haptic motor driver uses a type of communication system called I2C to "talk" to the microcontroller. The SCL and SDA pins are the pathways for this communication to take place.
4. Connect Battery: Plug in the Li-Po battery header to the microcontroller. If your battery has some charge, it may light up a LED on the microcontroller. First signs of life! :)
Step 3: Programming Your Electronics
If you haven't downloaded and installed the Arduino IDE yet, now's the time. I like to "pseudocode" my program in words before I start coding, so that I have already figured out what I need to write in C++.
Here's what our prosthetic software code is doing:
- Many times per second, our microcontroller reads in the pressure value that the sensor is detecting, and if the pressure value is strong enough (in other words, the sensor is in contact with the ground), we activate whatever vibration pattern we want from the haptic motor driver. The attached code accomplishes this base functionality, but it's easy to customize your motor to provide vibrations of various patterns or strength, based on different values the pressure sensor detects (i.e. light contact vs. strong contact).
*I assume a basic knowledge of using the Arduino IDE, installing libraries and uploading code to a connected micro-controller. If you're completely new to Arduino, use these tutorials to get up to speed.
1. Download and install the Adafruit DRV files in the same folder that your Arduino sketch is in.
2. Download, upload, and run the LevitateVelostatCode program on your microcontroller (be sure to set the variables appropriately based on the sensitivity of your velostat sensor. You can calibrate the CLIFF & CUTOFF values by opening up the Arduino Serial Monitor and testing out different pressure limits, for the use case you need.
3. Congrats! You already have a functioning prosthetic device. The rest is all aesthetics & deciding how you want to attach it to the user's body.
Step 4: Form Factor + Aesthetics
It's up to you where and how you want Moonwalk to attach to the user's body. My originally envisioned use case was for foot contact detection, so the pressure sensor naturally fit under the user's heel.
To keep the electronics nice and compact, I designed and fabricated a housing container (3D-printed and silicone molded, to allow for flexible contact with the skin). I have attached the 3D files (in .STL form) to this Instructable.
*For maximum vibration, it is important that the LRA motor (which functions by quickly generating vibrations from a z-axis spring) is in direct contact with surfaces that touch the skin (unlike an ERM, if an LRA is floating in midair, your skin won't feel anything). For my design, it makes most sense to attach the electronics via a nanosuction / gel pad (these can be easily purchased online and are great for multiple uses on skin), medical tape, or a cloth sleeve. In theory, you could also slip Moonwalk underneath elastic / spandex clothing, if it is used on the leg or thigh.
Step 5: The Finished Prosthetic!
I hope my design serves some utility for you. Please feel free to tweak, remix, and improve this base design – and don't be a stranger! I can be contacted through my website (www.akshaydinakar.com/home).