Series: alt.ctrl activities; builds on Gametrak
The Gametrak's own electronics send HID data over USB, which music software reads directly. Replacing them with your own microcontroller can give a higher update rate, finer resolution, and control over latency and jitter, or cut the cable altogether.
In the paper, a $25 Microchip USB microcontroller board running uOSC sent the data directly as OSC, 1000 times a second. The Wireless Gametrak (2025) puts an ESP32 Feather, a motion sensor and a keypad inside the case, and sends everything over Wi-Fi.

| Item | Amazon | Adafruit | Mouser | eBay |
|---|---|---|---|---|
| A Gametrak controller (originally sold with two gloves and a footswitch) | search | |||
![]() | 5400 | 485-5400 | ||
| For a wireless build: a 3.7 V LiPo battery and an on/off switch | ||||
| Hookup wire |
A prompt to give a coding assistant, to start the code for this activity. Copy the box, answer its questions about your board and pins, and test what comes back on the bench before you rely on it.
I am building "Replace the Gametrak's Electronics", the activity at https://adrianfreed.com/gametrak-controller-replacement.html.
Write a program for a microcontroller wired in place of a Gametrak's own circuit board: six analog inputs read the two tether sensors' x, y and z, with each sensor's ground and supply joined to the board's ground and to the supply its analog inputs measure against.
Read the six inputs at a steady, high rate, and send them as OSC messages over USB serial or over Wi-Fi, with an address for each axis. On an ESP32 with Wi-Fi on, use ADC1 pins: Wi-Fi takes over the ADC2 pins. Measure and report the update rate and the jitter you achieve.
Libraries to explore:
Before writing anything, ask me what I am using: the board and its pins, or the software (such as Max, Pd or Python), and check its documentation for what this needs. Put the pin numbers, ranges and other settings in one block at the top, each with a comment. Say which of the libraries above you use, and why. Start with a test that shows the raw readings, so that I can check the wiring and the ranges before the rest.
This activity by Adrian Freed is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0): you may share and adapt it with attribution, for non-commercial purposes such as personal projects and teaching, and you must share adaptations under the same licence. Product names and links belong to their suppliers.