Skip to content

Repository files navigation

MoveStick — Open-Source Motion Controller

This project was previously named OpenRudder.

MoveStick turns any movement into game controls.

Attach it to anything — your hand, a cap, a balance board, a wheelchair joystick — and tilt to control a virtual joystick, mouse, or keyboard/gamepad buttons. No drivers, no proprietary hardware.

Built on the excellent HID Remapper by jfedor, with custom gyroscope support for the Seeed XIAO BLE Sense.

A collaboration between PlayAbility Adaptive Software and HitClic.

💡 Don't want to build it yourself?Buy a ready-made MoveStick from HitClic


✨ What You Can Do

Attach to...Control with...Use case
Hand (velcro strap)Hand tiltJoystick replacement
Cap / HeadbandHead movementHands-free aiming/steering
Balance boardFeet tiltRacing games, fitness
Wheelchair joystickExisting movementsSmartphone/PC control
Any surfaceYour imaginationAdaptive gaming setups

Features

  • 🎮 Virtual joystick — map Roll/Pitch to any gamepad stick
  • 🖱️ Motion mouse — tilt to move cursor, tap/shake to click
  • ⌨️ Keyboard/buttons — trigger A/B/X/Y, space, WASD from tilt angles
  • 🔗 Bluetooth hub — connect multiple BT devices and merge into one controller
  • Adaptive ready — works with Xbox Adaptive Controller, Hori Flex, PS Access

🔗 Quick Links

ResourceLink
Firmware (.uf2)Download latest release
Web Configurationplayabilitytech.github.io/MoveStick
Buy ready-madeHitClic Shop

Works on Windows, macOS, and Linux — enumerates as standard USB HID.


🛠️ Hardware (DIY)

Build your own MoveStick for under $25:

PartPriceLink
Seeed XIAO BLE Sense (nRF52840 + IMU)~$15-20Seeed Studio / Gotronic
USB-C cable~$5Any USB-C data cable

Optional accessories:

  • Balance board → Amazon
  • Velcro strap (for hand/cap mounting)
  • 3D printed case → see /enclosure folder

The procedure to update the firmware is similar on all variants. When you go to the configuration website and try to connect to your device when it doesn't have the latest firmware, you will get a message and a link to a version of the configuration interface that is compatible with your current (old) firmware. Click that link, connect to your HID Remapper by clicking "Open device" as usual, then go to the "Actions" tab and click "Flash firmware". This will put your device in firmware flashing mode. A drive should appear on your computer. For all the RP2040-based variants, the drive will be named "RPI-RP2". For the Bluetooth variants, it will be called something else, depending on what board you're using. Download the correct firmware file for your variant (see table below) and copy it to that drive. On custom boards v1, v2, v5, v6 and v7 (dual RP2040 boards), after flashing the firmware you have to disconnect and reconnect your HID Remapper. That's it, you can go back to the regular version of the configuration interface and carry on.

(Please note that previously a manual "Flash B side" step was required on custom boards v1, v2, v5, v6 and v7. That is no longer necessary.)

⚡ Flash the Firmware

  1. Enter bootloader mode
    • Hold BOOT + tap RESET (or double-tap RESET quickly)
    • A USB drive named XIAO-SENSE appears
variantfirmware file(s)notes
single Picoremapper.uf2
dual Picoremapper_dual_a.uf2
remapper_dual_b.uf2
each Pico needs to be flashed separately
Feather RP2040 with USB Hostremapper_feather.uf2
custom board v1remapper_board.uf2disconnect and reconnect after flashing
custom board v2remapper_board.uf2disconnect and reconnect after flashing
custom board v3remapper_feather.uf2
custom board v4remapper_feather.uf2
custom board v5remapper_board.uf2disconnect and reconnect after flashing
custom board v6remapper_board.uf2disconnect and reconnect after flashing
custom board v7remapper_board_v7.uf2disconnect and reconnect after flashing
custom board v8remapper_board_v8.uf2
Feather nRF52840 Expressremapper_adafruit_feather_nrf52840.uf2
Xiao nRF52840remapper_seeed_xiao_nrf52840.uf2
Xiao nRF52840 Senseremapper_seeed_xiao_nrf52840_sense.uf2
serialremapper_serial.uf2

For boards not listed above, use the same file name you used when flashing it for the first time.

  1. Done! The board reboots as a USB HID device

💡 If the drive doesn't appear, try a different USB cable (must support data, not charge-only)


⚙️ Configuration

Open the Web Config Tool: playabilitytech.github.io/MoveStick

Basic Setup

  1. Connect your MoveStick via USB
  2. Click "Open Device" in the web tool
  3. Go to Settings → IMU support → ON
  4. Load an example profile or create your own mapping

Tuning Options

SettingWhat it does
Angle limitMax tilt angle before output saturates
Buffer sizeSmoothing (higher = smoother but more latency)
Axis inversionFlip X/Y directions
Shake thresholdSensitivity for tap/shake detection

Mapping

Map motion axes to any output:

  • Roll (X) → mouse X, left stick X, arrow keys...
  • Pitch (Y) → mouse Y, left stick Y, WASD...
  • Shake → click, button A, space, etc.

📦 Ready-Made Profiles

Mouse Control

Roll → Cursor X
Pitch → Cursor Y Shake → Left click

Gamepad (XInput/Switch)

Roll → Left stick X
Pitch → Left stick Y
Shake → Button A

Racing (Steering only)

Roll → Left stick X (steering)

Load these from Examples in the web config tool.


📡 Bluetooth Mode

MoveStick can also act as a Bluetooth hub, connecting multiple devices wirelessly and merging all inputs into one controller.

Supported devices:

  • DualSense / Xbox controllers
  • Xbox Adaptive Controller
  • PS Access controller
  • Bluetooth keyboards/mice
  • BLE wheelchair joysticks

See BLUETOOTH.md for setup instructions.


🤝 Credits

  • HID Remapper by jfedor — the foundation this project builds on
  • PlayAbility — gyroscope/IMU features and integration
  • HitClic — hardware design and distribution

📄 License

MIT License — see LICENSE


🔗 Related Projects


Questions? Open an issue or reach out on Discord

About

A diy alternative to 3D rudder that you can build yourself

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages