Case Study · Wearable HCI

LYRA

A wrist-worn gesture interface that turns hand movements into media control — with all of the classification running on the microcontroller itself.

Built · Working
Early LYRA prototype worn on the wrist — an ESP32 board and MPU-6050 IMU wired on a breadboard strapped to a forearm
The first breadboard prototype, strapped to my wrist: MPU-6050 IMU (left) wired to the ESP32 dev board.

The problem

Controlling music while your hands are busy — cooking, carrying things, walking — means fumbling for a phone or a laptop. I wanted a wearable that would let a flick of the wrist skip a track, without a companion app doing the thinking, and without firing accidentally every time I moved my arm.

The second half of that sentence is the actual engineering problem. A gesture recognizer that triggers falsely destroys trust in about a day; and one that only works for the person who trained it isn't a product, it's a demo.

Constraints

System architecture

The MPU-6050 streams 6-axis accelerometer + gyroscope data to the ESP32-C3, which runs a two-stage classifier:

Recognised gestures are emitted as BLE-HID media commands, so LYRA pairs with a phone or laptop like a Bluetooth keyboard — no driver, no app required on the host. A Flutter app handles per-user calibration, and a bridge mode retargets gestures to drive a LEGO EV3 robot arm instead of media keys.

MCU

ESP32-C3 (RISC-V)

IMU

MPU-6050 · 6-axis accel + gyro

Classifier

Rule gate + decision tree · 9 IMU features · on-device

Output

BLE-HID media control · EV3 robot-arm bridge

Calibration

Flutter companion app

Enclosure

Custom 3D-printed two-story wrist case

What I built

LEGO EV3 sensor module mounted on a red Technic beam — part of the robot arm LYRA drives over its bridge mode
The EV3 bridge: the same wrist gestures that skip tracks can drive a LEGO EV3 robot arm.

Results

MetricValue
Cross-user accuracy (leave-one-subject-out), overall79%
Cross-user accuracy, flick gesture99%
False-positive rate10%
Dataset419 samples · 4 subjects
EvaluationLeave-one-subject-out · reproducible pipeline

The headline for me is the evaluation method, not the number: 79% is what a new user gets before any calibration, because every test subject was held out of training. The flick — the primary "skip track" gesture — is essentially solved at 99%.

Honest limitations