A wearable MIDI controller worn on the forearm. Capacitive touch pads along the arm act as frets/strings, and an onboard IMU turns wrist motion (pitch, roll, yaw, and shake) into expressive MIDI control. The device sends MIDI over USB or Bluetooth LE, so it can drive any soft synth — this repo ships a set of ready-made Surge XT patches tuned for it.
- MCU: Seeed XIAO nRF52840 (USB + BLE).
- Motion: LSM6DS3 IMU (I²C
0x6A) for orientation and shake. - Touch sensing: a TCA9548A-style I²C mux (
0x70) fans out to 8 channels (one per fret), each hosting an Azoteq TS20 capacitive controller. The 20 decimation channels of each TS20 are binned into 6 guitar strings (E2, A2, D3, G3, B3, E4). - Output: Note-on/off plus continuous controllers — pitch → CC 102, roll → CC 103, yaw → CC 104, shake → CC 105.
forearm-guitar/
├── firmware/ Arduino firmware for the XIAO nRF52840
├── patches/ Surge XT synth patches ("Forearm Guitar" user area)
└── pcb/ KiCad hardware design files + fab outputs
Arduino (.ino) sketches for the controller. Two build targets:
forearm_firmware/— USB MIDI (via Adafruit TinyUSB).forearm_firmware_bluetooth/— wireless BLE MIDI (via Adafruit Bluefruit).
Both share the same sensing/mapping core. Notable features: MONO/POLY play modes
(switchable at runtime over serial with mono / poly), an orientation
reset gesture (lay your hand flat across the fretboard to re-zero
pitch/roll/yaw), and a range of compile-time tuning flags at the top of each
sketch (latency vs. ghost-note robustness, string-mapping profile, debug print
modes, loop profiler).
Three revisions are kept:
final/— current, cleaned-up firmware for the custom PCB. Use this.prototype_2/— first firmware to run on this custom PCB.prototype/— earliest iteration, targeting the previous (pre-PCB) hardware. Includes amux_ts20_finderutility sketch for probing the I²C mux/TS20 addresses during bring-up.
The firmware targets the Seeed XIAO nRF52840 and uses Adafruit TinyUSB (USB build), Adafruit Bluefruit (BLE build), and the Seeed LSM6DS3 driver. First-time setup:
-
Add the Seeed board package. In Preferences → Additional Boards Manager URLs, add:
https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json -
Install the board core. Open Tools → Board → Boards Manager, search for
seeed nrf52, and install Seeed nRF52 Boards (the non-mbed package — it's an Adafruit nRF52 fork that ships both TinyUSB and Bluefruit; the mbed core lacks them). -
Install the libraries. In Tools → Manage Libraries, install:
- Seeed Arduino LSM6DS3 (provides
LSM6DS3.h) — both builds. - MIDI Library by FortySevenEffects — USB build only.
TinyUSB and Bluefruit ship with the board core, so no separate install is needed.
- Seeed Arduino LSM6DS3 (provides
-
Upload. Plug the XIAO in over USB-C, open the sketch under
firmware/final/(forearm_firmware/for USB,forearm_firmware_bluetooth/for BLE), select the port under Tools → Port, and click Upload.
KiCad projects for the two boards, each with production outputs (Gerbers, BOM, pick-and-place positions) and 3D models (STEP/STL):
trill-flex-base/REV_C2/— main base board.trill-flex-slider/REV-C1-KiCad/— flexible slider sensor board.
The production/ subfolders hold fab-ready zips; the timestamped *-backups/
folders are KiCad's auto-saves and can be ignored.
A Surge XT user area named Forearm Guitar, containing patches organized by category:
patches/Forearm Guitar/
└── Patches/
├── Clean/ Lush, Sine
├── Distortion/ Default Lead, Rampage
├── FX/ Computer Language, Ritual, Water
└── Pad/ Blue Pad, Slow Mono, Sparkle Mountain
The patches respond to the controller's CC mappings (CC 102–105) for expressive control from wrist motion.
Surge XT scans a single "user data path" for patches, wavetables, and presets.
Point it at the Forearm Guitar folder in this repo:
- Open Surge XT.
- In the top menu (gear/wrench icon), choose Set Custom User Data Path….
- Select the
patches/Forearm Guitarfolder from this repo (the one containing thePatches/subfolder). - Back in the menu, choose Refresh Patch List (or restart Surge).
- The patches now appear in the patch browser under the Clean, Distortion, FX, and Pad categories.
Layout note: Surge only scans the
Patches/subfolder, so the category folders must live atForearm Guitar/Patches/<Category>/*.fxp. If you add more patches, drop them into a category folder there and refresh.
Alternatively, instead of repointing the user data path, you can copy the
contents of Forearm Guitar/Patches/ into your existing Surge user area
(default on Windows: Documents\Surge XT\Patches\).
- Power the controller over USB, or pair it over Bluetooth LE (BLE-MIDI build).
- In your DAW (or a standalone Surge XT instance), select the Forearm Guitar as the MIDI input.
- Load a patch — playing the touch frets sends notes; wrist motion drives the mapped CCs.