Here is an inexpensive way to create a three dimensional
pointing device. Take a working mechanical wheel mouse (the type with a
scrolling wheel). Remove the ball. Drill some holes in the sides and run
a string into the mouse, around the horizontal roller, and out the other
side. Reroute the sensors for the vertical roller and the scroll wheel
to a pair of external sensors. The easiest way to do this is to take a
couple of dead mechanical mice and simply wire their horizontal rollers
to the master mouse's vertical roller and scroll wheel. Run strings around
these two rollers as well. Attach small weights to one end of each
string and tie the other ends together. The result is a computer
peripheral which can be used to indicate a point in three dimensions.
My implementation was mostly built out of surplus parts. The board
was the sign for the Inverness office of
Digital Routes (made obsolete when the
company moved to Elgin). The mouse is a Genius NetScroll+ PS2/Serial mouse. This
type of mouse uses a four-byte protocol which may be unique to Genius (it is
somewhat simpler than the more common Microsoft Intellimouse protocol).
The front two rollers were extracted from a long-dead Microsoft bus
mouse. They are mounted to the board using brackets cut from the plastic
housing for some old telephone equipment. The string was purchased at a
local knitting store. The central ring is my key ring. The three weights are
built from a stack of washers attached to an alligator clip by a large
bolt.
The biggest problem is friction -- or lack thereof. There isn't much
friction between the strings and the rollers which means tacking is very
poor quality (especially on downward movements when the string loop
loosens). Looping the string around the rollers more than once
solves the problem, but causes the roller to jam when the string runs
over itself. Increasing the mass of the weights also solves the
problem, but causes operator fatigue due to having to constantly pull
against the weights. The solution was to use hot melt glue to build
crude pulleys on the shafts. Hot melt glue has an extremely high
coefficient of friction and works very well. Even so, the mouse quickly
drifts out of sync with reality and has to be recentred regularly.
Converting the mouse's data into height-width-depth co-ordinates
involves rather a lot of math. 3dmouse.py is a
Python program which reads the data from the mouse, decodes it
and computes the co-ordinates. This program can be used as the basis of
more advanced applications such as the 3D Pong game pictured on the left.
The 3D Mouse could also be used to manipulate objects in a CAD program, set up planets
in an orbital simulator, or control a robotic arm.
This page was Slashdotted on 20 July 2004.
One can build a similar device using two analog joysticks.