The AssaultRunner Pro is a curved manual treadmill. No motor. No plug. The belt only moves because you're running on it, which makes it the most honest piece of gym equipment I own. It also isn't cheap. So you'd think the console would be good.
It's not.
Assault promised a companion app that would record your workouts and sync them to Garmin and Strava. It never shipped. The console has Bluetooth, but my Garmin can't use it as a footpod, so on the treadmill my watch was reduced to guessing my pace from my wrist. Then I measured the belt and found out the console had been overcounting my distance by about 14%. Every run. The whole time.
So I built my own console. I call it OpenTread. It's a $15 ESP32 board with a touch screen. It reads the treadmill's speed sensor directly and sends my run to my watch, which records it as a real treadmill run and syncs it to Garmin Connect like any run outside. It's open source on GitHub, because nobody else should have to put up with this either.
Measuring the belt
Time for some math.
The belt has exactly 62 slats. I counted. Twice.
From the center of the 1st slat to the center of the 20th is 113.5 cm. That's 19 gaps, so the slats are 5.974 cm apart. Then I counted the speed sensor's pulses over 10 full turns of the belt: it fires once every 10 slats. So every pulse is 10 × 5.974 cm = 0.5974 m of belt.
The stock console thinks every pulse is about 0.68 m.
That's not a rounding error. That's 14%. A 5K on the stock console is really about 4.4 km, which means somewhere out there, AssaultRunner owners are bragging about 5Ks they didn't quite run.
To check, I ran a 5K at my usual outdoor pace, about 10:00/mi. OpenTread's pace matched how the run felt. The stock console's didn't.
| Stock console | OpenTread | |
|---|---|---|
| Belt per sensor pulse | about 0.68 m | 0.5974 m |
| Distance | about 14% high | true belt travel |
| Distance after you stop | keeps adding a few meters as speed winds down | stops when the belt stops |
What it does
- Pace, speed, distance and time on a 2.8" touch screen. Tap the pace to switch between miles and kilometers.
- Starts and pauses on its own. Move for 5 seconds and the workout starts. Stop and it pauses. Hold the bar at the bottom for 2 seconds to finish. No hunting for buttons with sweaty hands.
- Pairs with your watch as a footpod, same as a shoe sensor. My Forerunner 955 records a native treadmill run with the belt's real speed and distance, and it syncs to Garmin Connect. No more wrist guessing.
- Should work with training apps. It also broadcasts as a standard Bluetooth FTMS treadmill, the profile Zwift uses. "Should" is doing a lot of work in that sentence: so far I've only tested it with my watch.
The hardware
The parts list is short and cheap, which is how I like my parts lists.
- An ESP32 "Cheap Yellow Display", the ESP32-2432S028R (not an affiliate link): an ESP32 with a 2.8" touch screen built in. I got a 2-pack for $30, so about $15 each. Yes, that's really what it's called.
- Two wires from the treadmill's magnet (reed) sensor: ground to the board's GND, and signal to GPIO 27. I soldered them onto the back of the stock console's sensor socket, so the stock console stays plugged in and keeps working. It's just not in charge anymore.
- A 5 V USB wall adapter for power.
The GitHub release includes the prebuilt firmware, so you can flash it without building anything.
The case
You can put the board in any case you like. A food container would probably work. But I designed one that mounts right where the stock console was, on the same holes with the stock console's own M5 screws, so there's nothing to drill. It's free to download: opentread-cyd-case.stl (207 KB), sized for the ESP32-2432S028R.
Parts:
- Bezel: 4 × M4 heat-set inserts in the corners of the case, and 4 × M4 screws, 4 to 8 mm long
- Mounting: 2 × M5 heat-set inserts in the bottom of the case. The stock console's M5 screws go up through the console mount and into them.
What's next
The ESP32 has WiFi built in, so uploading workouts straight to Strava might be next. It's right there. I'd also like to add a rechargeable battery, so it doesn't need a cable to the wall.
I'm also designing an iPad mount. The case only uses two of the stock console mount's holes, which leaves the two on top with nothing to do. Two perfectly good mounting holes, just sitting there. That bothers me. So the iPad mount will bolt into them.
Open source
Everything is on GitHub under the GPL: the firmware, the case and the docs. It should work on other curved manual treadmills with the same kind of reed sensor, but I've only tested it on my AssaultRunner Pro. If you try it on yours, open an issue and tell me how it went. Even if it went badly. Especially if it went badly.