For IEEE Spectrum’s special issue this past June, my colleague Ariel Bleicher visited Tad Starner’s lab at Georgia Tech and tried out an intriguing kind of wearable technology: a computerized glove equipped with five vibration motors, one perched atop each finger. Wearing the glove for a couple of hours while attending to other tasks, she acquired sufficient “muscle memory” to play 61 notes of Beethoven’s “Ode to Joy” with hardly any effort.
Of course, learning to play a more complicated piano melody would take more than just a couple of hours wearing such a glove. But her success immediately got me thinking about a problem I’d been grappling with: how to get my kids to learn to touch-type.
Even my youngest, an 11-year-old boy, is pretty quick on the keyboard. But his hands move all over the place, and he rarely uses his pinkies. As I’m an accomplished touch typist, this irritates me, and I am forever hounding him to go back to what my eighth-grade typing teacher used to call the “home position” and use his eight fingers and two thumbs properly. Of course, my son just ignores my urgings.
Introducing a bit of technology, I thought, might be just the ticket to ensure cooperation. So while my wife was sewing eight diminutive vibration motors into the fingers of a pair of cycling gloves, I set about working on the hardware and software for a haptic typing tutor.
The first challenge was how to drive the 14-millimeter-diameter vibration motors I had purchased on eBay (US $13.85 for a set of 10, including shipping). I briefly considered using MOSFET transistors to drive the motors, but I decided to follow Starner’s example instead based on the “if it ain’t broke, don’t fix it” principle: He used Darlington transistor arrays for this purpose. So I used two ULN2003s, one for the four motors on each hand. These chips handle the job without fuss: Each 14-pin IC contains seven Darlington transistor pairs along with diodes to protect against voltage spikes when you switch off inductive loads such as motors. It was a simple matter to wire the inputs to these arrays to an Arduino Nano plugged into a prototyping board and connect the outputs to each glove with short lengths of Cat 5 cable.
Admittedly, the result wasn’t nearly as slick as Starner’s fully wearable setup. But my kids would be seated at the computer anyway, so a short leash running from each glove to the prototyping board holding the Nano isn’t a practical impediment.
I programmed the Arduino to activate a given motor for a quarter of a second corresponding to each character I sent to the microcontroller’s serial port—a “1” would vibrate the motor pressing on the left pinkie, a “2” for the left ring finger, a “3” for the left middle finger, and so forth. That was dead simple. The tougher job was to write a program that would run on a laptop computer so that my kids would associate the stimulation of their fingers with the correct sequence of keystrokes you make when touch-typing a word.
For that, I used Tkinter, which provides an easy way to create a graphical user interface with Python, my favorite computer language at the moment. It’s not as pleasant for composing a GUI as using Visual Studio, but it proved simple enough and perfectly adequate for the task at hand.
The program I cobbled together presents the user with a word, chosen at random from a list of the 100 most common English words. It then says the word out loud (in my ever-patient wife’s mellifluous voice) and shows the word spelled out on the screen in blaring 64-point red type, one letter at a time. As it does so, it sends the appropriate character to the Arduino so that the corresponding finger is vibrated. There’s a slider for the user to vary the rate at which the program spews out letters. And the person can see what he or she is typing (again in 64 point), which gives instant feedback. A button allows you to advance to another word. Python and Tkinter made all this easy enough to program with less than 200 lines of code.
Far more difficult was convincing my son to practice with the new gizmo. He would do it for a while, and he reported that spending a few minutes getting his fingers vibrated indeed helped him to get the sequence of keystrokes right. But he was more inclined to play with the slider, trying to challenge himself to keep up with rapid-fire bursts of letters. Clearly, I had missed a critical concept in modern pedagogy: gamification.
I’ve not yet figured out the particulars, but somehow I’ll have to add motivational timers, badges, health points, and bright, flashing “game over” blinkers if I want my 11-year-old to benefit from my high-tech typing tutor. Or there’s always the ethically dubious B.F. Skinner haptic typing tutor, I suppose. But I’m not sure an Arduino can put out 1,200 volts.
This article originally appeared in print as “Muscle-Memory Programmer.”