Tremor-Friendly Joystick (averaging)

by kennyhamann in Circuits > Arduino

30 Views, 1 Favorites, 0 Comments

Tremor-Friendly Joystick (averaging)

IMG_4358.JPG
IMG_4360.JPG

DIY Tremor-Friendly Joystick: Adaptive Assistive Tech for Everyone


For millions of individuals living with Parkinson’s disease, essential tremors, or variations in motor control, standard gaming controllers and mice can feel like a barrier rather than a bridge. A sudden spike in a tremor can send a cursor flying across the screen or cause a character to move unintentionally. Technology should adapt to the user, not the other way around.

That is exactly why I built this Tremor-Friendly Joystick—an open-source, Arduino-enabled, highly adaptable assistive peripheral designed to level the playing field. Whether you want to browse the web, operate a computer, or dive into gaming, this device is engineered to filter out involuntary movements while accurately capturing intentional inputs.


This device is for COMPUTER use ONLY, not for iPhone use.


How It Works: Plug, Calibrate, and Play

The core philosophy behind this project is complete user autonomy, powered by a dedicated web companion app (hosted right here at kh-lk.vercel.app).

  1. Plug In: The joystick functions as a standard plug-and-play human interface device (HID). There are no complex drivers to install or sketch files you need to constantly re-flash.
  2. Calibrate: By pairing the hardware with the web interface, users undergo a simple calibration process that maps their unique range of physical movement.
  3. Customize (The 5 Levels of Tremor Usage): Because motor control naturally fluctuates throughout the day, the web interface features five distinct levels of tremor usage filtering. These levels range from mild stabilizing software smoothing for slight jitters to aggressive low-pass filtering and dead-zone adjustments designed to isolate severe, heavy tremors.

Why Build This Instructable?

Commercial assistive tech is often notoriously expensive and rigidly "one-size-fits-all." This project flips the script. Using affordable electronics, a 3D-printable housing, and an intelligent web-based dashboard, you can build a fully customizable, responsive joystick at a fraction of the cost.

In this Instructable, I will walk you through the entire process step-by-step—from assembling the physical joystick and wiring the components to configuring the five levels of software filtering on the Vercel web app. Let’s get building and make technology accessible to everyone!

Supplies

Arduino Leonardo, 8 micropin female-female wires

Arduino joystick sensor

two headphone jack receiver cords (two-wire, not three-wire)

3D printed elements: box, lid, joystick stem, joystick ball

USB-C to USB-C cable that can upload data (some can't)

3D Print Materials

This project includes ready-to-print STL files in this Instructable step. The STL file contains the 3D models for the adaptive joystick housing, designed to be sturdy and easy to assemble.

Below is a step-by-step guide to successfully print the part.

Step 1: Download the STL File

  1. Scroll to the “Files” or “Resources” section of this Instructable.
  2. Download the provided .stl file to your computer.
  3. Save it somewhere easy to access (like your Desktop or a project folder).

The STL file is already scaled to the correct size. You do not need to resize it unless you are intentionally modifying the button dimensions.

Step 2: Import the STL into Your Slicer

Open your preferred slicer software, such as:

  1. Ultimaker Cura
  2. PrusaSlicer
  3. Bambu Studio

Then:

  1. Click “Import” or drag the STL file into the slicer.
  2. Confirm the model appears centered on the build plate.
  3. Verify that the scale is set to 100%.

If the part appears extremely small or large, check that your slicer is set to millimeters (mm), which is standard for STL files.

Step 3: Recommended Print Settings

These settings prioritize durability and strength since this button will be pressed repeatedly.

Material:

  1. PLA (recommended for ease of printing)
  2. PETG (if you want added durability and flexibility)

Layer Height:

  1. 0.2 mm (standard quality)

Infill:

  1. 20–30% (Grid or Gyroid recommended)
  2. Increase to 40% if you want extra sturdiness

Supports:

  1. This print may require supports, and if it does, use them!

Build Plate Adhesion:

  1. Brim recommended if you experience edge lifting

Step 4: Part Orientation

The file is designed to print flat on its base.

Make sure:

  1. The smallest side is touching the print plate
  2. The triangle shape of the buttons is facing upward

This ensures:

  1. Maximum strength
  2. Clean top surface finish
  3. NO need for supports

Do not print it on its side, as that will weaken the structure and increase print time.

Step 5: Start the Print

  1. Slice the model.
  2. Preview the layers to confirm everything looks correct.
  3. Send the file to your printer (via SD card, USB, or WiFi depending on your setup).
  4. Begin printing.

Estimated print time will typically range from:

  1. 1-2 hours, depending on printer speed and infill settings.

Step 6: Post-Processing

After printing:

  1. Allow the part to cool completely before removing it from the build plate.
  2. Remove any brim or support material carefully.
  3. Lightly sand edges if needed for comfort and safety (especially important since this device is for children).

You should now have a sturdy housing ready for installing the internal button mechanism.

Why Print Settings Matter for Accessibility

Because this button is designed for children with cerebral palsy, durability is especially important. Some users may apply uneven or stronger-than-expected pressure. A higher wall count and moderate infill ensure the housing will not crack or deform over time.

A smooth top surface also helps reduce friction and makes pressing easier for children with limited fine motor control.


Prepare Headphone Jack Recievers

IMG_4361.JPG

Solder a female-end wire to each end of the headphone jack wires (when stripped, a red one and a black one each). This allows you to "plug in" the headphone receiver into the Arduino.

Connect Wires

IMG_4357.JPG

Connect these wires between the Arduino and the joystick accordingly:


GND --> GND

+5V (VCC) --> 5V

VRx --> A0

VRy --> A1

SW --> D3

USB-C cord --> Arduino USB-C port (and connect it to your computer too!)


On each headphone jack receiver, pick a wire each to connect a ground (GND) pin and the other to a digital pin. On each jack receiver, plug in the GND wires to the remaining GND ports (any of the remaining ones) and the other wires to digital pins 4 & 5. MARK WHICH HEADPHONE JACK CORRESPONDS TO WHICH DIGITAL PIN. Mark the digital pin 4 receiver as headphone jack 1 and the other as headphone jack 2. The app uses "headphone jack 1" and "2" to correspond to what kind of sensors you want to add to your setup.

Fit Components Into Box, Attach Joystick and Lid

IMG_4357.JPG
IMG_4356.JPG
IMG_4359.JPG

Fit components into your 3D-printed box, connecting the USB-C cord through the rectangular opening and the headphone jacks through the teardrop-shaped openings. See attached image for configuration.

Plug and Play!

IMG_4360.JPG

Congratulations! You've built a tremor-friendly joystick you can use with the kh-lk.vercel.app website! Make sure to take the website tour and click the "sync to device" button to push changes to your Arduino.