In recent years, researchers have developed technology that allows people to control computers and wheelchairs with their brain waves. My Mind Surfer is a helmet that seems to allow its wearer to control a toy vehicle via brain waves, but the technology is based on something much simpler than brain waves. It has a Nintendo Wii Remote hidden in it.

Ask a friend to wear the Mind Surfer and tell him if he wants the cursor (or robot, or game character) to move left, he must imagine the left side of his head growing warmer or heavier as he “concentrates his brain’s electrical energy.” Chances are, he’ll subconsciously tilt his head a couple of degrees to the left. The Wiimote detects the tilt, and your unsuspecting victim will be astounded to see that your helmet can “read” his thoughts!

The Nintendo Wii Remote can sense the magnitude and direction of tilt relative to gravity, and convert these into outputs for the device of your choice. You have myriad programming options to choose from; I’ve used GlovePIE and LabVIEW to control a cursor and a Lego NXT robot, respectively, but what I’ve outlined in this article is the simplest option: a Windows program called WiinRemote.

Functional Overview

The Nintendo Wii Remote provides the Mind Surfer with a nicely bundled 3-axis accelerometer and Bluetooth (2.4GHz-band) radio. The accelerometer measures acceleration relative to free-fall; an accelerometer falling into a bottomless pit would measure 0g on each axis. A Wiimote sitting flat, face up on a table, would read 1g force on the vertical z-axis and 0g on the flat y and x axes, and as you tilted the Wiimote to the right the z-axis would decrease and the x-axis would increase.

If we assume that a person wearing the Mind Surfer is only tilting her head, not changing her location, we can use the accelerometer data to determine the tilt of the user’s head relative to gravity.

Note: Accelerometers cannot detect yaw (turning/rotating the head left or right), only roll (tilting the head right or left, bringing the ear slightly closer to the shoulder) and pitch (tilting the head forward or back).

A computer receives and processes the accelerometer data via Bluetooth and sends outputs to the cursor, while a redecorated bicycle helmet provides a good casing to hide the Wiimote from inquisitive users and keep it oriented with the user’s head. By creating a cradle with a cover, you allow the Wiimote to be moved easily in and out of the Mind Surfer when you switch back to playing Wii Tennis.

What will the next generation of Make: look like? We’re inviting you to shape the future by investing in Make:. By becoming an investor, you help decide what’s next. The future of Make: is in your hands. Learn More.

Project Steps

Process Wiimote data with your computer.

Many different Wiimote hacks are available online. One of the easiest programs to set up is WiinRemote (which outputs to your cursor), as I’ll outline here; Mac users can download DarwiinRemote.

More programming expertise is needed to use GlovePIE (which can simulate inputs for a variety of games) or LabVIEW (which I used to control a Lego NXT). Links to all of these are available in the Resources section, on page 56.

Programs like WiinRemote are freeware, haven’t been fully tested, and may cause problems if they aren’t fully compatible with your system.

On your Wii Remote, press and hold buttons 1 and 2 to make the Wiimote discoverable. (Make sure your Wii system is off so it doesn’t automatically connect.)

On your computer, search for new Bluetooth devices. The Wiimote will have “Nintendo” in its name.

Connect to the Wiimote without using a passkey or code, and wait for the drivers to automatically install.

Launch WiinRemote.exe (Photo 1). If the program isn’t updating the Motion Sensor graph as you move the Wiimote, then it may not be compatible with your system; try running it on a Windows XP machine with the BlueSoleil Bluetooth stack.

In WiinRemote, select Options ⇒ Preferences (Photo 2). In General preferences, disable the Rumble on Edge feature (unless you want your helmet buzzing when the cursor hits the edge of the screen).

In Motion Sensor preferences, set the threshold to 0 so that small motions will register. Crank up Fast Cursor Speed all the way to the right so that small tilts make a big difference. Finally, check Recalibrate on Cursor On/Off, so that if your volunteer suddenly shifts, you can easily calibrate to his new position by first pressing Ctrl-S to stop and then Ctrl-S to start again.

Build the Mind Surfer helmet.

If the bike helmet is old enough, you may be able to easily separate the plastic casing from the helmet to make cutting easier.

WARNING: This hack will instantly render the helmet unsafe for bicycling.

Cut a rectangular, Wiimote-sized slot centered in the top of the bike helmet using the keyhole saw and cutting pliers. You can cut all the way through on the sides, but leave some tabs of helmet foam at the front and back to support the Wiimote.

Now add layers of duct tape to the sides of your cutout to make it a snug fit so the Wiimote doesn’t jostle around. Tie one or two rubber bands across the top of your cutout using string.

Decorate and disguise the bike helmet by layering the decorative tape around the sides, but don’t cover up the rectangular cutout yet.

Optionally, you can embed string under the tape to create a layered, mystery technology effect (photo 3).

To prevent the user’s head from touching the Wiimote, layer the inside of the helmet with duct tape stretching across the rectangular cutout.

Add a backing layer of duct tape where the tape faces the Wiimote, putting sticky sides together, so that both outer sides —touching the head and touching the Wiimote — are smooth.

Finally, create a top cover for the Wiimote slot out of duct tape (again with the option of embedding string), and add a backing layer to all but the outer ½”. Leave this ½” perimeter sticky to make the cover stick to the helmet.

Insert the Wiimote, slap on the cover, and you’re good to go!

How to use the Mind Surfer.

WiinRemote’s default settings will make the cursor move toward the bottom of the screen if you tilt your head forward, and toward the top of the screen if you tilt your head backward. To move the cursor side-to-side, keep in mind that you must tilt, not rotate, your head.

Minimize the WiinRemote window and demonstrate the Mind Surfer to a friend, challenging her to tell you where to move the cursor and proving (by tilting your head imperceptible amounts) that you’re controlling it with your brain waves alone.

Press Ctrl-S once to disable the cursor while you put the helmet on, and again to enable it and recalibrate it to your current orientation (when you enable it, your current angle becomes the zero point).

Then see if your friend’s mind is strong enough. Tell her, “Sit in a chair with the helmet on, relax, and concentrate. Stay still to minimize vibrations. Imagine one area of your head (front, right, left, back) growing warmer and heavier as you concentrate your brain’s electrical energy. The cursor will move in that direction.”

About one-third of people will miraculously control the cursor. Another third will need a little more encouragement (“Try imagining that your right ear is hurting a lot, that someone is tugging on it”), while the last third either will find no correlation between where they want the cursor to go and where it does go, or will figure out what’s really going on.

Controlling a device with the Mind Surfer.

If you’re interested in creating your own program to control the device of your choice using LabVIEW or GlovePIE, use the textbook formula in photo 1 to convert accelerations to tilt.

α: angle of pitch

β: angle of roll

gx: acceleration in x-axis (oriented left/right)

gy: acceleration in y-axis (oriented back/front)

gz: acceleration in z-axis (oriented up/down)

However, in our case the tilt of the Wiimote won’t vary more than 10°, so the following formulas can be used to find the direction of tilt.

α = kgy

β = kgx

k: constant

To control a simple 2-wheeled robot, you would send:

left motor = α + β

right motor = α − β

If someone wearing the helmet tilts his head forward 1° then the robot will move forward at (depending on k) 10% power. If he tilts forward 2° and left 1° then the robot’s left motor moves forward at 10% and right motor at 30%, so the robot moves in an arc to the left.

If you want a real challenge, figure out how to receive gyroscope data from the Wii MotionPlus controller extension for a more accurate, less bumpy Mind Surfer.

The design of the Mind Surfer revolved around my notions about how humans interact with machines, but it also led me to a deeper appreciation of the union between mind and body.

Conclusion

Resources

Here are several programs you can use to receive data from a Wii Remote:

WiinRemote

http://onakasuita.org/wii/index-e.html

One of the easiest programs to set up for Windows, WiinRemote automatically outputs to your cursor, but it can’t be easily customized to respond to very small tilts.

DarwiinRemote

http://sourceforge.net/projects/darwiin-...

Like a WiinRemote for Macs, it automatically outputs to your cursor.

LabVIEW interface to Wii Remote

http://decibel.ni.com/content/docs/DOC-1...

The program I originally used for the Mind Surfer, LabVIEW, has sample programs available to receive data from the Wii and can easily be customized for many applications.

GlovePIE

http://glovepie.org/glovepie.php

A popular program featuring both a GUI and a code interface that can receive inputs from various controllers, including the Wii Remote, and output them as mouse, keyboard, or joystick controls.

This project first appeared in MAKE Volume 22, page 52.