← All projects

OpenResonance

Open-source wearable haptics. Build it yourself and feel what your computer is playing.

Status
complete
When
Dec 2025 - Jul 2026
Prototypes
4
Built over
8 months
Open source
board, firmware, app

Role Solo project

Prototype 4 · drag to look, scroll to explore

Scroll to explore

01 / 05

Drag to spin · tap to buzz

Two wristbands that turn whatever your computer plays into vibration you can feel, split across separate motors so a kick drum lands as weight and a snare lands as a snap. It works with games, music and sim racing telemetry. Board, case, firmware and app are all open, and the repository has everything needed to build a pair.

What it does

Two pods sit either side of your wrist and vibrate in step with whatever the computer is playing. A bass hit lands as weight, a snare lands as a snap. It works with anything the machine can play, because it listens to the audio itself instead of waiting for a game to support it.

It also takes live sim racing telemetry, so gear shifts, revs and braking come through as separate sensations, and a game engine can drive it directly over a documented protocol.

It is open, and it is finished

Board, case, firmware and desktop app are all published. The repository has the PCB fabrication files with the exact ordering settings, print profiles for the case, the firmware, the app, and the BLE protocol, which is everything you need to build a pair yourself.

Why two motors and not one

Your controller has one motor and one buzz. That is the entire vocabulary, and it is welded shut.

Here the mapping is the product. The desktop app decides which part of the sound goes to which motor and how hard, with four processing modes per motor and presets you can keep. If you want it to behave differently, you change it.

Signal path

06 stages
  1. 01 System audio no virtual cable
  2. 02 FFT NumPy, ~60 Hz
  3. 03 Bands low / high split
  4. 04 Bluetooth LE to both wristbands
  5. 05 ESP32-C3 20 kHz silent PWM
  6. 06 Motors thump and texture

It listens to the audio itself rather than waiting for a game to support it, which is why anything the computer can play already works.

Four prototypes

04 steps
Prototype 1 on the wrist, an open printed case packed with red wirePrototype 2, a white printed box on a velcro strap with a handwritten labelPrototype 3, a black velcro wristband on my wristThe 3D-printed case parts for prototype 4, fresh off the printer
Prototype 1 01/04

Prototype 1

Two tiny coin motors in a printed case. Comfortable, but far too weak to feel through skin, and the battery did not fit inside the shell.

Prototype 2

A deliberately rough second pass: stronger motors pulled out of hobby servos, a fixed layout, a proper strap. Enough to prove motor choice was the whole problem, though it still buzzed rather than thumped.

Prototype 3

The split layout arrives. One large low-frequency motor for the thump, two small ones for detail, so different parts of the sound map to different sensations. First version that felt like a product, even with a mess of wire inside.

Prototype 4

The final build. The wiring became a custom KiCad board fabbed by JLCPCB, the case was redesigned around it, and a Python app now captures live audio and streams both bands over Bluetooth.

The board

v1 · 30 x 52 mm · 2 layers
The v1 board, generated straight from the KiCad design files. Drag to inspect. The JST connectors, the USB-C port and the power switch are not in this export, so their footprints sit empty here.

On video

02 clips
Sim racing, prototype 4 strapped to the chest and driven by live RaceRoom telemetry
Prototype 3 on the wrist, motors tracking a live audio signal