open hardware project

Mausring

A mouse you wear on your finger.
Born from laziness, built with RISC-V.

scroll

Born from
coffee & laziness.

I got tired of putting my hand back on the touchpad every time I needed to turn a page — while my hands were doing something more important, like holding coffee.

So instead of accepting that reality, I decided to build a mouse you wear on your finger. A ring with an outer rotary band for scrolling, an IMU for pointer movement, and enough stubbornness to make it real.

This is FOSS hardware. If it ever reaches production, profit isn't the point. The point is that a thing like this should exist and currently doesn't.

ESP32-C3 IMU HR BATTERY · TBD inner — mcu + imu hall sensor
ESP32-C3 · ICM20948 · FreeRTOS · EasyEDA · OpenSCAD · RISC-V · BLE HID · LiFePO · MAX30102 · FlexPCB · JupyterSCAD · SolidPython ·  ESP32-C3 · ICM20948 · FreeRTOS · EasyEDA · OpenSCAD · RISC-V · BLE HID · LiFePO · MAX30102 · FlexPCB · JupyterSCAD · SolidPython · 

The hardware
inside the ring.

01 · brain
ESP32-C3FH4 / ESP8684-H2
RISC-V core chosen as much for ideology as size. Fits the critically small inner ring, handles BLE HID, runs FreeRTOS. Possibly the smallest ESP32 you'll ever wear.
RISC-V · BLE
02 · motion
ICM-20948
9-DoF IMU — accelerometer, gyroscope, magnetometer in one small package. Replaced BMA423 + LSM303 combo. Excellent docs, dev board available for firmware testing.
9-DOF · SPI · I2C
03 · biometrics
MAX30102
Pulse oximeter and heart-rate sensor. Optional — user-toggleable for privacy and battery conservation. Your biometric data belongs to you, not anyone else.
OPT-IN · HR
04 · scroll
Rotary Outer Ring + Hall Sensor
The outer ring spins mechanically. A Hall sensor reads magnetic pulses to detect direction and velocity. Same rotation may eventually contribute to inductive charging.
HALL · SCROLL
05 · form
FlexPCB + OpenSCAD Body
Designed for FlexPCB in EasyEDA Pro. 3D body via Jupyter + SolidPython + JupyterSCAD. RX/TX probes exposed. Built to be tinkered with.
FLEXPCB · FOSS
06 · power
Battery — TBD
Small LiFePO cell (~22mAh, informed by Oura Ring research). Thermoelectric and rotational inductive charging are ideas on the table. Nothing is settled yet.
TBD · LIFEPO

Software stack.

Arduino IDE + ICM20948_WE
Working base. SPI abstraction by wollewald. Comfortable enough to iterate fast.
FreeRTOS tasks
Separate tasks for comms, IMU data, status LED. Event-driven, threshold-triggered BLE sends.
Gamepad → Mouse HID
IMU 3D data projected to 2D, routed through BLE HID compatibility layer to mouse events.
JupyterSCAD + SolidPython
Parametric 3D ring design in a Jupyter notebook. Unusual. Effective.
EasyEDA Pro
Schematic and PCB layout. M5Stack H2 gateway + CoreS3 used as reference schematics.
fw_status.log
[ BOOT ] FreeRTOS kernel init
task_imu // running
task_ble_comms // running
task_status_led // blinking
! task_init // TODO: separate

[ IMU ] ICM20948 via SPI
accel_raw // ±2g
gyro_raw // ±250dps
3D→2D projection // in progress

[ BLE ] HID profile
gamepad x/y // mapped
mouse HID // next step
threshold events // TODO

[ SYS ] RX/TX probes exposed
hackable by design

_

Power:
still figuring it out.

Status — baseline
LiFePO Cell ~22mAh
The boring answer. A tiny lithium iron phosphate cell similar to what Oura Ring uses. Safe, predictable, fits. The floor we build on.
Status — TBD
Thermoelectric Charging
Body heat differential → Peltier → trickle charge. Seductive idea. Efficiency probably terrible. Worth exploring anyway.
Status — TBD
Rotational Induction
The outer ring rotation drives the Hall sensor. Same magnetic pulses could power inductive charge cycles. Dual-purpose elegance — feasibility TBD.
Status — planned
Biometric Opt-In
MAX30102 can be toggled off. Less current draw when disabled, your HR data stays yours when enabled.

What's next.

Separate initialization task
Decouple setup() from application tasks — proper RTOS discipline.
BLE events triggered by IMU threshold
Only transmit when movement exceeds threshold. Better battery life, less BLE noise.
3D → 2D projection
Map IMU 9-DoF data onto a 2D mouse movement plane. Gravity compensation, drift correction.
Mouse HID via BLE
Transition from gamepad HID to mouse HID profile. The core user-facing feature.
FlexPCB layout in EasyEDA Pro
Move from reference schematics to original board layout. Hard constraint: must fit inner ring.
Decide on battery + charging approach
LiFePO baseline confirmed. Thermoelectric and inductive options still being evaluated.