2D Input on any surface
December 2018 - February 2019
Silly side project to replace my mouse
Prototype 0
The first prototype was built to re-create the experiment from a publication by Microsoft on a simple ”Light ring” device that captures 2D input using a gyroscope and an infrared proximity sensor. I used an MPU9250 IMU, IR emitting diode and IR receiver wired to an Arduino Uno board to test the calibration method outlined in the paper and verify their geometrical model. One axis of the gyroscope on the IMU was used as Y-axis input and the IR sensor as X-axis input.
Prototype 1
I used this version to refine sensor data collection firmware, adding basic smoothing and filtering. By setting it as an HID device, it could replace a computer mouse.
Prototype 2
This iteration focused on downsizing the prototype and testing different discrete input methods. I designed a custom PCB based on the ESP32-WROOM32 module and broke out some of the GPIOs into two flex cable connectors to easily plug and try different peripheral modules such as buttons, a joystick, or a capacitive touch array.
Client request
Through word of mouth, a startup was interested in using this project as user input and commissioned a miniature version of this “ring”. This is what became of it:
Hardware:
Rigado BMD350 module based on the NRF52832 from Nordic Semiconductors
Miniature VSCEL sensor (VCNL36687S from Vishay) - replacing the IR sensor
ICM-20948 9-axis IMU
Button
Battery charger for 80mAh Li-Po