A keyboard is just a bunch of buttons on a board. The idea of using the typewriter for digital use as well is intuitive and works perfectly. But is it also the fastet solution?
And what alternatives are there to communicate with a computer?
Two questions I wanted to answer with this project are:
„How quick can you learn a new input device, especially when entering characters
in 3-dimensional Space?“
„Is this input device more effective than a keyboard after sufficient training?“
There are only a few experimental inputs that are not limited to the 2-dimensional space.
I would like to briefly mention two of the most interesting ones:
I decided to develop a durable device that would measure its position and speed and thus generate an input. If you move this device e.g. upwards, an „e“ is recognized, if you move it forwards, an „a“ is recognized. You can follow words in the air and, with enough practice, you might even be faster than a keyboard.
I have often worked with Arduino microcontrollers, so to realize this project I used the Arduino Nano. I connected a Bluetooth module to transfer data wirelessly and a so-called MPU module to track the movement. It had to be wirelessly to not interrupt the movements of the user.
The MPU module contains 3 different sensors. A speed sensor that measures the force action on an axis in the measurement unit g. This means that you can also measure the gravity of the earth and can calculate which axis is vertical to the ground.
Furthermore, a gyro sensor is installed, which measures the change in degree around the 3 axes of the sensor.
The 3rd sensor of the MPU is a temperature sensor that can compensate for deviations from the first two. The first two sensors are inaccurate. The gyro sensor has no reference point to the ground, so it drifts off after a while and the speed sensor picks up a lot of noise.
However, with a complementary filter you can combine both values and get the exact position and movement of the sensor.
As an extra I connected a vibration motor and an LED to the Arduino, as primary feedback for the user. For example if a input is registered, the vibration motor
gives an haptic feedback.
I decided to develop a standalone app that communicates with my prototype and coverts the raw data into key inputs. First I experimented with a combination of Visual Studio and Xcode software, because it allowed me to use C#, which I already used before. However, this combination turned out to be more difficult than I thought, so I just switched to Xcode and learned Objective-C. In hindsight, I should’ve learned the Swift programming language since Objective-C has terrible documentation.
With a library called ORSSerialPort I established wireless communication to the prototype and got the raw data. I visualized the data using a 3D renderer, which displays a block representing the angles of the microcontroller (see below).
I haven’t finished the project so far. A big problem is the mapping of the 127 Ascii characters in three-dimensional space.
In order to make the learning experience more pleasant, I also intend to visualize this mapping of the characters.
Despite it not being finished, I learned a lot from this project about wireless communication and apples programming languages.