2D Input on any surface

December 2018 - February 2019

Repository: PCB + Code

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.

First prototype with Arduino and sensors setup, tested in a day to validate the concepts exposed in the Microsoft publication

First prototype with Arduino and sensors setup, tested in a day to validate the concepts exposed in the Microsoft publication

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. 

minimouse_2a.jpg
minimouse_2b.jpg

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.

minimouse_3a.jpg
minimouse_3c.jpg

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

minimouse_4b.PNG
minimouse_4d.jpg
minimouse_4a.jpg
minimouse_4c.jpg
Previous
Previous

Skin Hearing

Next
Next

Surgical Robot End Effector