Cubot: An In-hand and Wearable Input Device

Ruofei Du, CS Ph.D. Student

Fan Du, CS Ph.D. Student


We propose Cubot, a novel input device that enables people to use it as an in-hand or wearable device. We endow a cube with soul and make it into a general input device for a computer. People can use Cubot as a game controller, a remote, a body tracker and anything else in their mind. In this mini project, we illustrates our idea by playing FlappyBird via body jumping and hand lifting with Cubot, operating "helicopter" to view a 3D scene, observing a 3D object by rotating heads, play games and present slides via moving chairs. Cubot is not an extension or improved version of any existing input devices. It is brand new, and we created it!


Components we used to build our system:
  • Arduino Uno R3
  • Breadboard and wires
  • Pololu MinIMU-9 v2 Gyro, Accelerometer, and Compass (L3GD20 and LSM303DLHC Carrier)
  • Laptop computer
  • Hat, Chair, Lamp


1. Calibration of the Gyro, Accelerometer, and Compass

The date out of the Gyro, Accelerometer and Compass is not stable. Hence, we use a calibration process, which calculate the maximum value and minimum value for the first N (N=60) data received. And then use this range as a baseline of the following recognition algorithms. A high-pass filter would also work for this issue.

2. Signal processing for the Hand Lifting and Body Jump gesture.

Hand Lifting

As long as the hand lifts, a peak in the waveform is detected. For continuous hand lifting, we record and detect multiple peaks.

Body Jump

A jump usually involves with squatting down (not necessary), jumping up, touching the ground, restore stable.

Peak Detection

A peak is recognized as at least 120% higher than the baseline value. As soon as the peak goes down to the range of baseline, we consider the maximum timestamp as the occurrence of the peak.


Cubot is a general input device. You can attach it to almost everything and have fun playing with it. We introduced a several "official" usage of Cubot in the video above, including using Cubot+Lamp Holder to fly a plane, Cubot+Hat to control a 3D model, Cubot+Belt to jump and play the Flappybird and Cubot+Chair to play slides and breakout games.

The way to use Cubot is very intuitive and fun. For example, when playing the Flappybird, the bird jumps with you, when flying the plane, the view follows your eyes. You may use Cubot in different ways:

1. As a 3D sensor.
2. As a compass.
3. As a motion tracker.
4. As basic electronic elements such as a switch, a button, a potentiometer, or a vibration sensor.

By combining those functionalities and stuff you use everyday, you can burn your imagination and dig out the true fun of life!

Future Work

There are two main restrictions for now:

1. Size: this version of Cubot is built based on Arduino UNO, which is as large as a mice. In the second version, we are going to use minimized Arduinos to remarkably reduce the size of Cubot. The ideal size would be as small as a key of the keyboard. Though, we will still provide different size of cases so that it will always fit your idea.


2. Wire: by removing the USB wire connecting UNO with a computer, Cubot will become a true six-sided cube, which would largely enhance its flexibility and usability. Ideally, Cubot will become part of users' life, just as what a mouse, a keyboard, a key, a car do. Once again, we are not redesigning anything, we are creating something.

1. We tried Bluetooth Low Energy Shield. It can communicate smoothly with iPhone or iPad. Nevertheless, when connected to the Mac, the data frequency is almost one data per second, which is too hard to use. Another bluetooth named "test123" would lose connection after 10 seconds. So we need to order a bluetooth module in the future.

2. We also tried the 3D printer to print the box. Nevertheless, it is too slow so we gave up in the end. But it is the idea that values: future users could print whatever they want for Cubot.

3. We wasted a lot of time on soldering and making the bare sensor and other sensors work.

Source code on Github:
Inspired by Makey Makey: