Skip to content

ryos17/forearm-guitar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Forearm Guitar

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.

Hardware overview

  • 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.

Repository layout

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

firmware/

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 a mux_ts20_finder utility sketch for probing the I²C mux/TS20 addresses during bring-up.

Flashing the firmware (Arduino IDE)

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:

  1. Add the Seeed board package. In Preferences → Additional Boards Manager URLs, add:

    https://files.seeedstudio.com/arduino/package_seeeduino_boards_index.json
    
  2. 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).

  3. 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.

  4. 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.

pcb/

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.

patches/

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.

Using the patches in Surge XT

Surge XT scans a single "user data path" for patches, wavetables, and presets. Point it at the Forearm Guitar folder in this repo:

  1. Open Surge XT.
  2. In the top menu (gear/wrench icon), choose Set Custom User Data Path….
  3. Select the patches/Forearm Guitar folder from this repo (the one containing the Patches/ subfolder).
  4. Back in the menu, choose Refresh Patch List (or restart Surge).
  5. 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 at Forearm 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\).

Connecting the controller

  1. Power the controller over USB, or pair it over Bluetooth LE (BLE-MIDI build).
  2. In your DAW (or a standalone Surge XT instance), select the Forearm Guitar as the MIDI input.
  3. Load a patch — playing the touch frets sends notes; wrist motion drives the mapped CCs.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages