This project was commissioned by Mark from Nova Scotia. It cost $USD 471.88 in parts, and took 66.5 hours to build.
If you're like me, your first exposure to this device was in news articles that had pictures of blind people using it to "see" a low-resolution image by displaying it on an electrode grid on their tongue. The device also has applications in various types of rehabilitation -- the "BrainPort" variant can be used to treat balance deficits through vestibular sensory substitution, and apparently just sending pulses through every electrode of an electrotactile tongue stimulation device (combined with relevant exercies, e.g. balance training) can improve some neurological conditions, which puzzles me.
Anyway, as is always the case for my medical hardware clone projects, the manual for the commercial version I found lists an absurdly high price -- more than $5000 USD, excessively high given the actual cost of parts ($471.88 USD as of 2018-09-14). There are many different commercial designs of this technology, with
varying grid resolutions and maximum output specifications (I saw output voltage maxima ranging from 19v to 50v, the output then being routed through a roughly 1kOhm resistor and a 0.1uF DC-blocking capacitor). This is not an exact copy of any one commercial version; it's designed to emulate several different commercial designs, and has a completely new mode (Dexterity training) at the request of the commissioner.
Step 1: Output Modes
The device described here has three output modes:
1. BrainPort balance emulator
The BrainPort was developed based on the earlier Tongue Display Unit (TDU). For training balance, the BrainPort is used to display a 2x2 pattern on a 10x10 tongue electrode grid. The pattern on the tongue electrode grid acts somewhat as if it were a physical object moved by gravity; it stays in the center of the grid if the user's head is held up straight. If the user leans forward, the pattern moves toward the front of the user's tongue, and if the user leans to the right, the pattern moves toward the right side of the user's tongue. The same holds for leaning left or back (the pattern will move from the center of the grid towards the left or back of the user's tongue).
2. PoNS emulator
Unlike the BrainPort or Tongue Display Unit, the PoNS output does not carry any information and cannot be modulated by an external signal. To paraphrase the paper in the previous link, after the researchers found that balance training with the BrainPort improved performance even for months after the device was removed from the mouth, they suspected that electrotactile stimulation itself could somehow facilitate neurorehabilitation, even without information being fed through the tongue display. The first version of the PoNS device had a square electrode grid like the device described here, but it's worth noting that subsequent versions (starting with version 2 in 2011) of PoNS device do not have a square output electrode grid, using rather a vaguely crescent-moon shaped one that fits along the front of the tongue and has 144 electrodes.
3. Dexterity mode
Specifically requested by the commissioner, dexterity mode tracks the flexion of the first and second knuckles of each finger on the right hand. Ten active electrodes are displayed along the front of the tongue if the hand is unflexed, each active electrode corresponds to a joint. As the joints are flexed, the corresponding active electrodes move from the front to the back of the tongue, providing electrotactile feedback which describes the user's hand position.
Step 2: Parts List
[Total cost: $471.88 USD as of 2018-09-14]
10x 47K ohm 0603
3x Ribbon cables female-to-female, 40 wires/cable
5x Tongue electrode grid circuit boards
5x Output driver circuit boards
2x Arduino uno
2x XL6009 Boost modules
1x 6AA holder
1x 9v battery clip
1x Power switch
1x VMA203 keypad/screen
1x Accelerometer, ADXL335 module
10x Flex sensors, spectra symbol flex 2.2"
50ft. 24 AWG wire
2x Gloves (only sold in pairs)
Step 3: Circuit Boards
I ordered circuit boards through Seeed Studio FusionPCB. The .zip files included in this step are the required gerber files. The driver boards can be made with Seeed's default settings, but the tongue electrode grid requires higher precision (5/5 mil clearance) and gold plating (ENIG -- though you could get hard gold instead if you want them to last longer, and if you've got an extra $200). I also got the tongue electrode grid fabricated with the thinnest circuit board option, 0.6mm, which makes it slightly flexible.
Because of the high cost of flexible polyimide circuit boards, we opted to use a rigid board for this prototype. Others reading these instructions who want to have this device fabricated on polyimide should bear in mind the required precision is 5mil traces / 5mil clearance, which Seeedstudio will not provide in flex PCB. You can -probably- get away with having it fabricated on the 6mil/6mil process Seeed uses for polyimide, but expect some of the boards to be defective, and examine / test each one. Also, a run of flexible polyimide boards costs about $320, last I checked.
After receiving the tongue electrode boards, you'll need to cut off the excess material. I used a dremel clone with an abrasive cut-off disc.
Step 4: Output Driver Arduino
The output driver Arduino controls the output circuit boards to drive the electrodes based on the serial input from the frame generator Arduino. Note that half the outputs are plugged in as an inverted image of the others, so the output driver code is a little weird to take this into account.
Step 5: Frame Generator Arduino
The frame generator Arduino takes data from the position-sensing glove and the accelerometer and converts it into the output frame data which will ultimately control the tongue display. The frame generator Arduino also has the VMA203 Keypad/button module plugged into it, and controls the device's user interface. The driver code within the frame generator Arduino is full of magic numbers (literal values used without explanation in the code) based on the outputs of the individual flex sensors -- which vary widely -- and the accelerometer.
Step 6: Sensor Multiplexer Circuit
I have more analog sensors than analog inputs, so I needed to use a multiplexer.
Step 7: Output Driver Circuit
Attached here as a .pdf because otherwise Instructables will compress it so much it becomes illegible.
Step 8: System Layout
Note: Both the BrainPort and PoNS devices activate multiple electrodes simultaneously. As wired and coded here, this device only activates one electrode at a time. Each output circuit board has separate chip select and output enable lines, so this design _can_ be set up to activate multiple electrodes at once, I just haven't wired it to do so.
Step 9: Preparing the Flex Sensor Glove
The flex sensors' pins are very fragile, and easily torn off. The exposed surface of the flex sensors is also susceptible to short-circuits. I soldered wires to the flex sensors and then fully surrounded the junctions with hot-glue to protect them from damage. The flex sensors were then attached to a glove with the middle of each sensor placed across the knuckle whose flexion was to be measured. Naturally, the commercial version of this is sold for more than $10,000.
Step 10: Physical Assembly
Because the hundred wires from the driver circuit boards to the tongue electrode grid are so numerous, they become relatively inflexible as an aggregate.To train balance with this device you need to be able to move your head freely while keeping the tongue electrode grid in place on the tongue. For these reasons, it made the most sense to mount the driver circuit boards to a helmet.