Introduction
I became interested in the topic of vibro-tactile gloves when a friend told me he had used them to reduce his symptoms of Parkinson’s Disease (PD). His glove design was based on research conducted by a neurosurgeon at Stanford University, Dr. Peter A. Tass, which showed positive results in preliminary clinical trials. To quote the Tass Lab website (Research | Peter Tass Lab | Stanford Medicine): “Early research shows that wearing a vibrating glove can reorganize misfiring signals in the brain typical of Parkinson’s and might relieve symptoms.” Their research team and an outside firm are currently conducting more clinical trials. Their technique is called vibrational Coordinated Reset (vCR).
Since the publication of the Tass papers, there have been many DIY projects to create vibration gloves for treatment of PD. This post describes my own attempt to meet the specifications of the Tass design, and to provide instructions on how to replicate it. I do not claim any neurological benefit from their use.
The term “gloves” is used loosely in this project since there are components only at the fingertips and on the wrist. These gloves produce bursts of vibration at 250 Hz randomly shuffled between the fingertips, using a pattern outlined in the Tass literature. They are battery operated and should last through a routine of several hours of operation twice a day. According to the literature, it can take weeks of use for the effects to be significant. The following is a summary of the Tass conditions for the vibration stimulation.
Specifications
Vibration Pattern (Tass)
According to publications of the Tass group (see References in the next section), vibrators in contact with the four fingertips of each hand should produce brief and low amplitude bursts at a frequency f = 250 Hz with a random assignment to the fingers. The variables in the signal are the frequency, the duration of the burst, the delay between bursts (optionally randomized or "jittered"), the number of times all 4 fingers are stimulated and the rest time between stimulations. The order in which these signals are delivered to each finger is another process choice, as well as the coordination of these signals to each hand. For example, a “mirrored delivery” can be used in which equivalent finger types of each hand received the same signal at the same time, or a “non-mirrored delivery” with no correlation between the hands.
There are many types of sensors in the human hand. The Tass team selected to preferentially stimulate touch receptors known as Pacinian Corpuscles (FAII), which are concentrated at the fingertips.
- In this project, the order of the fingers that receive vibration is shuffled every CR_PERIOD using a Fisher-Yates method that also excludes double vibrations. Examples of channel 0 – 3 for fingers IMRL are: {0,1,2,3} \(\rightarrow\) {1,0,2,3} \(\rightarrow)\ {2,0,1,3} …
- Channel-to-finger mapping modes are set in the program by: BILATERAL_MIRROR, which can be set true or false.
- Wiring on both hands is from control box connectors to corresponding fingers.
- On the right hand, channels 0-3 corresponds to the right fingers IMRL.
- On the left hand, the code reverses the channels so ch 0-3 still corresponds to left fingers IMRL.
- In mode BILATERAL_MIRROR = true, the same finger types on both hands receive simultaneous pulses in a random order.
- In the mode BILATERAL_MIRROR = false, the signals are still simultaneous between the hands, but there is no correlation of the fingers.
- Since the two hand controllers only differ in the order of the channel to connector, the units can be swapped and the same operation is maintained.
- Tass P.A. (2017) Cureus 9(8), e1535. Vibrotactile Coordinated Reset Stimulation for the Treatment of Neurological Diseases – Concepts and Device Specifications.
- Pfeifer, K.J., Kromer, J.A., Cook, A.J., Hornbeck, T., Lim, E.A., Mortimer, B., Fogarty, A.S., Han, S.S., Dhall, R., Halpern, C.H., Tass, P.A. (2021) Frontiers in physiology 12:624317. Coordinated reset vibrotactile stimulation induces sustained cumulative benefits in Parkinson’s disease.
- P.A. Tass, Neural Regeneration Research. 17(7):1495-1497 (2021) Vibrotactile Coordinated Reset Stimulation for the Treatment of Parkinson’s Disease.
- “Clinical Efficacy and Dosing of Vibrotactile Coordinated Reset Stimulation in Motor and Non-motor Symptoms of Parkinson's Disease: A Study Protocol”, 2021, https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8636796/
- Mov Disord. 2017 Nov 18;33(1):179–180. Coordinated reset vibrotactile stimulation shows prolonged improvement in Parkinson's disease – PMC doi: https://doi.org/10.1002/mds.27223
- US2021/0401664 A1, Safe and Efficient Vibrotactile Multi-channel Stimulation for the Treatment of Brain Disorders; Dec. 30, 2021
This Project
Download CAD and PCB Files:
Project Details
Electronics
- Given the complexity of the vibration pattern, a Micro Controller Unit (MCU) is essential.
- An amplifier between the MCU outputs and each exciter is required.
- Some type of visual indicator for each exciter is useful because after continuous use it can be difficult to detect the vibrations. Four green LEDs (3 mm) were used, located on top of the control box.
- There needs to be a way to adjust the volume of the stimulation. A potentiometer connected as a voltage divider is read by the MCU for this purpose.
- A typical session might be 2 hours long, twice per day, so the controller and amplifier electronics should be portable and battery powered, requiring low power consumption and a means to recharge the battery. A LiPo 1000 mAh battery was chosen that is located under the PCB in the controller box.
- Another goal of this project was to eliminate wire connections between the hands, while still coordinating the signals to each hand. This requires both controllers to have wireless communication, such as Bluetooth. To initiate the communication and start the vibration sequence, a button was added to each controller so that pressing either one will start both units simultaneously.
- The wire connection between the controllers and exciters uses compact connectors (JST-PH type), with wires that can be cut to size.
- All of these features need to fit into a compact wearable enclosure with accessible controls.
- If a control box is placed on top of the hand, it can restrict putting the hand into a pocket. If it is placed on the wrists, it can displace a watch often needed to time a session. A digital clock is optionally placed on the unit located on the wrists.
- The schematics and PCB layout were all done using KiCAD, with AI assistance. Some of the board pin connectors were listed as Do Not Populate (DNP) to create just the plated holes.
- The files were sent to JLCPCB for manufacturing and assembly. Links to the files and detailed instructions on how to order these boards are in the vCR-Glove/PCB/JLCPCH_Production folder on GitHub.
- Provides ultra-low power consumption: 5 μA in deep sleep mode while supporting lithium battery charge management
- Thumb-Sized Design: 21 x 17.5mm, Seeed Studio XIAO
- Pins can be ordered pre-soldered to the breakout board
- Download the following PCB related files from https://github.com/HobbyPhysics/vCR-Glove/commits?author=HobbyPhysics
- Gerber and drl Files (Zip Folder): DAEX_system_v1-job-1.zip
- BOM file: DAEX_system_v1_BOM.csv
- Position file: DAEX_system_v1-top-pos.csv
- If desired you can also download the KiCAD project file to view the schematics, PCB layout, and 3D rendering.
- Sign up and Log in at https://jlcpcb.com/ and click on Order.
- Upload the Gerber and drl zipped folder. This will generate top and bottom images of the PCB. Click on these to enlarge and carefully inspect, comparing with the KiCAD PCB image shown previously. Do not exit the images, just go back if needed (otherwise the session may end).
- Check that the thickness (1.65mm) and number of layers (4) is correct.
- Important: Scroll down and click on the switch to request Assemble. Otherwise, you will only get the unpopulated PCB.
- Click on Continue. Upload the BOM and the Pos files. If errors occur to inventory shortages, you may have to find substitutes for components that are in stock using their part catalog.
- It is crucial to check the orientation of all components, especially ICs, connectors and electrolytic caps. The JLC app allows you to manually adjust components, so they appear as they do in the 3D rendering shown above.
- Continue to payment. Shipping and duties tend to double the parts and labor costs. Note the delivery time.
Mechanical & Assembly
Vibrator Housing Design- Download the following files from https://github.com/HobbyPhysics/vCR-Glove/tree/main/3D_Printing/DAEX_Housing/STL :
- DAEX_lower_plate.stl
- DAEX_tapper.stl
- DAEX_upper_housing.stl
- Download the following files from https://github.com/HobbyPhysics/vCR-Glove/tree/main/3D_Printing/Electronics_Enclosure/STL :
- vCR_glove_enclosure_bottom.stl
- vCR_glove_enclosure_top.stl
- These files were generated using OpenSCAD. If you download OpenSCAD, you can view and alter the DAEX housing using the SCAD files found in
- https://github.com/HobbyPhysics/vCR-Glove/tree/main/3D_Printing/DAEX_Housing/OpenSCAD_Source
- https://github.com/HobbyPhysics/vCR-Glove/tree/main/3D_Printing/Electronics_Enclosure/OpenSCAD_Source
- To order parts, sign up and Log in at https://jlc3dp.com/ and click on Order Now.
- Click on 3D Printing, then Upload 3D models and specify all stl files. You should see images of each part.
- For each part, select Edit Specifications:
- For the 3 DAEX housing parts, select MJF (Nylon), PA12-HP Nylon, Black, surface finish Yes, thread No, and quantity 8 or more each (enough for two hands), Product Desc: select Enclosure, Plastic Enclosure. Click Save. If there is a printing risk indicated (thin walls), select yes to accept the risk.
- For the 2 enclosure parts, select Edit Specifications and select SLA Resin, Black Resin, Surface Finish Yes, thread No, and quantity 2 or more (enough for two hands), Product Desc: select Enclosure, Plastic Enclosure. Click Save. If there is a printing risk indicated (thin walls), select yes to accept the risk.
- Click on Submit Order.
- Continue to payment. Shipping and duties tend to double the parts and labor costs. Note the delivery time.
Assembly
- Tap threads into the Tapper disk hole, using a jig such as the one shown to clamp the disk and a M2.5 tap or screw. Make sure the tapped hole is axial, not crooked.
- Thread a nylon M2.5 bolt (the contactor) into the Taper hole a few threads.
- Peel off the release liner from the exciter ring and adhere it to the Tapper disk, with the cylindrical protrusion pointing into the ring hole, and the contactor bolt pointing out.
- Solder AWG 28 leads to the exciter connectors on the contactor side (red wire to red contact). For the DAEX, these contacts are fragile PCB tabs. For the PUI exciters, solder to the rivet (not the lug) on the contactor side. Clip off the lugs so the exciter can fit into the housing. For either exciter, solder quickly to avoid melting and distorting the plastic. (Image A).
- Insert the exciter + contactor into the upper housing with the contactor pointing into the housing. Push the wire into the channel around the exciter frame and out the side channels. (Image B)
- Screw down the lower plate as shown in Image C, using the self tapping M3 bolts.
- The contactor bolt should be approximately centered in the housing hole. Adjust the height of the contactor bolt to be ~ 0.5 mm above the finger groove using a small Phillips screwdriver while pressing down to avoid twisting the tapper disk off the adhesive ring. (Image D)
- Left and Right control units are identical.
- The battery is adhered to the bottom of the enclosure with double-stick foam tape (1mm thick). The existing battery connector was replaced with a JST PH 2.0mm connector, soldered and heat shrink insulated. Keep it disconnected until the wiring is complete.
- Solder pin headers to the Xiao breakout board.
- Solder short leads to the + and – Batt pads under the Xiao board BEFORE soldering the Xiao header to the PCB. Solder each lead to the corresponding pads Batt +/- on the PCB.
- Solder the Xiao nRF52840 pins to the PCB, oriented with the USB in the enclosure slot. Make sure the board is pressed flush into the PCB holes.
- Connecting wire is 28 AWG silicone insulated, used for the potentiometer, switch, and button connections. Trim each wire, remove about 3mm of insulation from the ends and tin them with solder. Solder each to the PCB, as shown below. Orient the switch so that ON is up.
- Press in the 3mm LEDs and orient their short leads to face the same direction. Secure with adhesive such as 5-minute epoxy. Solder all the cathode leads (shorter lead) together. Solder the longer anode leads and the common cathodes to the PCB as shown in the image.
- Press the battery connector into its connector, threading the wire through the PCB slot. You may have to unscrew the PCB to do this.
- Screw on the lid, making sure the LED wires do not interfere with the 4 JST connectors.
- Leads from the exciter are threaded through holes in the elastic straps for each finger. They are trimmed to a short length and tinned.
- Female JST-PH 2.0 connectors and pigtailed male connectors were purchased, described below. The exciter leads were soldered to the female connectors and insulated with shrink tubing (1/16”).
- The cables between the exciter and control unit connector are made from pigtailed JST-PH 2.0, cut to length, soldered together and insulated with shrink tubing. The leads are twisted to reduce clutter and for stiffness.
- The 4 leads can be organized between hook and loop fabric as needed.
Firmware
- Initialize components
- Check if the Start button is pressed
- Search for a companion unit using Bluetooth
- Synchronize timing with the other unit and start
- Cycle through the vibration sequence until power off
- Both hand units have identical programs (except for a left/ right setting related to finger order only). There is no primary/ secondary role.
- After Power-up (each unit):
- Starts the PWM carrier with 50% duty cycle, creating zero sine output into each amplifier.
- Disables the exciter amplifiers.
- Turns off the LEDs.
- Starts the Bluetooth (BLE) to broadcast (advertise).
- After Button is pressed on either unit (call this unit A):
- Unit A waits > 40ms for de-bouncing
- Unit A starts a timer for SCAN_TIMEOUT_MS = 5000 ms while it scans for unit B.
- If B is advertising and is detected by A:
- Unit A connects with B and sends a start message: “S”.
- Unit B acknowledges with “A”.
- Unit A receives “A” and sends “G” to unit B and calls its scheduleStart routine.
- Unit B receives “G” and calls its scheduleStart routine.
- Each scheduleStart waits for a time SYNC_DELAY_MS = 700 ms from their current local time (he start times will only differ by a few milli-seconds at most).
- Both units stop scanning and advertising.
- Both units disconnect and enable their amplifiers and start the vibration and LED sequence.
- If unit A does not get an acknowledge “A” from unit B after 250ms, it re-transmits “S” again. If there is no result after 3 attempts, unit A will disconnect and resume scanning until it finds unit B or SCAN_TIMEOUT_MS is up.
- If unit A does not detect or receive an “A” acknowledgement from unit B after SCAN_TIMEOUT_MS :
- Unit A stops scanning and advertising disconnects.
- Unit A calls scheduleStart routine and starts its vibration and LEDs after SYNC_DELAY_MS = 700 ms.
- Start time for a single unit is therefore about 5.7 seconds after the button press.
- Both units continuously monitor their button and listen for a BLE signal.
- Carrier Frequency = Clock Frequency/ TOPCOUNT = 16 MHz/ 250 = 64 kHz (fixed)
- Sine Frequency = Carrier Frequency / R/ Nsample= 64 kHz/ 4/ 64 = 250 Hz
- For Sine frequencies = 60 – 350 Hz, the integers R and Nsample are internally determined to get within 0.6% of the target frequency
Usage
- Note the wire leads to the small finger vibrator are shorter than for the other fingers. Use this to distinguish left from right units. On the left unit, the shorter lead is channel 1. On the right unit the shorter lead is channel 4.
- Place the digital clock on the desired control unit.
- Adjust the straps for each tactor to each finger using a tabletop for support. The tactor straps are elastic with hook/loop fabric. The finger should be pushed up to the curved end of the finger groove. Adjust for a snug fit, not too tight. Remove the vibrator, keeping the straps as adjusted.
- Adjust the contactor screws up or down so they protrude about 0.5mm (thickness of about 6 sheets of paper). Make the adjustment with a small Phillips screwdriver, pushing down until the contactor is at its lowest point then turning to the right to reduce the height, or to the left to increase it. You should be able to feel the contactor protruding from the hole with the power off.
- Wrap the strap for each control unit around your wrist with the controls facing toward the body. Adjust until snug but not too tight.
- Starting from left to right, place the vibrators on each finger, making the sure the wires are along the left side of the finger, above the hand and are not tangled. Adjust so that the contactors are directly under each finger. Use the top hook and loop strips to help organize the leads.
- To remove, place your hands on a tabletop and slide off each tactor. Then undo the wrist straps.
- Each control unit has a Power switch, a Start button, and a Volume control.
- To operate using both hand units:
- Turn on both unit’s power switches (up). You should see a flashing blue LED looking into the USB connector.
- Press a green Start button briefly on either unit to begin operation.
- Operation begins almost immediately with contactors vibrating and corresponding LEDs flashing.
- One finger on each hand should receive a vibration at the same time. In Mirror mode, the same finger type on each hand receives the same signal. The finger selection is random.
- Vibration amplitude is controlled by the Volume knob and can be adjusted anytime during operation.
- To end operation, turn off the Power switches (down) on both units.
- To operate a single unit:
- Turn on the power switch (up). You should see a flashing blue LED looking into the USB connector.
- Press the green Start button briefly.
- Operation begins after about 6 seconds.
- Vibration amplitude is controlled by the Volume knob and can be adjusted anytime during operation.
- Turn off the power switch to end operation.
- Recharging the batteries: Connect each unit to a USB-C charger, with the power switch ON. It will not charge if the switch is off. This prevents the battery from draining while the system is not in use. Do not push the start button.
- Session timer: Using the Arduino IDE, set TIMER_ON = true, and set TIME_LIMIT_MIN (duration in minutes) in each hand unit to automatically disable the unit after the set time. An LED will blink every 30 sec to remind you to turn the power off.
Test Method & Results
- For each DAEX (labeled 1 – 8) the PD signal vs. z0 height was measured for calibration.
- In the firmware, MAX_AMPLITUDE_COUNTS = 50 for these tests (sets the range for the volume control).
- Using the calibrations, the peak-peak z motion Zpp was measured at 4 volume levels for each DAEX, plotted below. The vertical bars indicate the min (7:00) and max (17:00) volume levels.
- All DAEX showed sinusoidal oscillation, almost inaudible, until the volume level was at the 15:00 position. At that level and beyond, the waveform was distorted (second harmonic component) and very audible. As a result, MAX_AMPLITUDE_COUNTS = 40 is recommended to keep primarily in the sinusoidal range.
- One DAEX unit showed strong distortion and erratic behavior at all volume levels and was replaced.
Conclusions
- Wireless connection between hands with synchronous stimulation
- Session timer
- Mirror and non-mirror modes, with or without pulse jitter
- Quiet sinusoidal indentation vibration, with little housing vibration
- Variable peak to peak vibration from 0.01mm – 0.09mm
- Adjustable static indentation, to meet 0.5mm requirement
- Rise time < 2ms with ~15 ms end decay time
- Vibration frequency range of 60 Hz – 350 Hz
- Random finger shuffling without double stimulation
- Low power operation with rechargeable battery
- External manufacturing of mechanical parts and assembled PCB
- Adjustable finger elastic for vibrators and wrist Neoloop straps for control units
- LED indicators to visualize pulse action
- JST connectors for wiring to control unit
- Reconfigurable using Arduino IDE
- Compact and lightweight design
- Method to measure contactor height variation in real time
- Option of multiple frequencies, single channel testing, or regular simultaneous pulsing






























































Comments
Post a Comment