Using gyroscope in a mouse is not new. I bought one some ten years ago. As an in-the-air mouse replacement that does not require a mouse pad, it was novel, but not very effective. One’s action has to be so much slower to be accurate. For someone without good manual control for a conventional mouse, however, using another part of the body such as the head to signal movement, a gyroscope becomes a good intermediary. A gyro mouse may be slower, but it could work accurately.
In the current iteration of the design, the gyroscope is mounted on a headband. Two additional sensors are used: one to effect a click. A second, optional, sensor acts as a switch to disable the gyroscope temporarily to avoid unintended mouse movement. The two sensors could be a light or touch sensor. Conceivably, for a user that has no other output than the head movement, we could algorithmically detect a special head movement for click control.
I have used the L3G4200D as well as the newer L3GD20 but I now use the InvenSense MPU-6050 which has the 3-axis accelerometers as well. I’m standardizing on the MPU-6050 only to ease code maintenance.
Using head movement to control the mouse presents a different challenge. Originally, I used the accelerometer to detect positional change. So when the head moves to the left, the mouse moves to the left to a corresponding degree. This however, requires the head’s resting position to be where the mouse is centred to the screen initially. Moreover, careful calibration would be needed to map the sweep of the head movement to the size of the screen.
A more intuitive way to control the mouse is to use the gyroscope to detect the head movement: a slight tilt to the left (or right, or upwards, downwards) will kick the mouse into motion. Once in motion, the head could remain still. The mouse continues to move and is then stopped with a small opposing head movement. I find that an audible click signalling the stop provides valuable feedback.
I also built in a threshold for motion detection so that natural, non-jittery movement will be ignored. This allows the user to be able to relax and move her head (slowly) around without triggering unintended mouse movement.
The Arduino Leonardo has an HID interface, which sends out mouse control codes via the USB port. The Arduino-based gyro mouse easily interfaces with any PC without device drivers. It also interfaces with Android tablets using an OTG cable, which powers the Arduino at the same time.