Running a neural network on a hobby board no longer means shipping frames to a server and waiting for an answer. Boards such as the Arduino VENTUNO Q ship with a dedicated neural processing unit, so a camera feed gets crunched on the same desk where it was captured. Raul Muñoz’s treadmill project is a tidy demonstration of what that buys a maker who cannot touch the hardware they are hacking.
His treadmill was rented, so magnets on the belt, hall sensors, and taps into the control board were all off the table. Instead he pointed a USB webcam at the machine from the side and let the board work out how fast the belt was moving. The estimated pace is then broadcast over Bluetooth Low Energy using the standard Fitness Machine Service profile, which means Zwift, Kinomap, and any other fitness app read it as an ordinary smart treadmill.
How it clocks your pace
The camera captures rolling one-second clips. Each clip goes through a convolutional network based on mc3_18, pretrained on the Kinetics-400 video dataset and retooled from a classifier into a regression model that outputs speed in km/h. The tricky part was ground truth: with no speed output from the treadmill, Muñoz built a labelling tool and walked ten recording sessions, tagging each clip with the number on the console display.
Inference runs through ONNX Runtime on the CPU by default, and there is an optional path onto the VENTUNO Q’s Qualcomm Hexagon HTP NPU via the Qualcomm AI Runtime. That swap dropped median latency from 624 ms to 26.6 ms with near-identical speed estimates. Nothing leaves the board except a speed value, which was the point for Muñoz. He did not want a camera in his house streaming to anyone.
What to try next
- Retrain on your own machine. The full training pipeline and pretrained ONNX model are published, so a different camera angle or a dimly lit garage is a dataset problem, not a code problem.
- Reuse the BLE half on its own. The FTMS implementation is a good reference for any cadence or speed project, including a reed-switch bike sensor on a plain GPIO pin.
- Watch the lighting gotcha. A model trained under daylight will drift badly at night, so record sessions in the conditions you actually train in.
Full write-up, code, and dataset tooling are on the original build page: Hack Your Treadmill with AI and an Arduino on Hackster.io.
Frequently Asked Questions
How does the board know how fast the treadmill belt is moving?
A USB webcam films the treadmill from the side in rolling one-second clips. A convolutional network based on mc3_18, pretrained on Kinetics-400 and converted into a regression model, estimates speed in km/h from the video alone. No sensor is attached to the machine.
Why run the model on the board instead of a phone or a cloud service?
Privacy and latency. The video never leaves the board, only a speed value goes out over Bluetooth. Moving inference onto the VENTUNO Q’s Qualcomm Hexagon NPU also cut median latency from 624 ms to 26.6 ms, which keeps the reported pace in step with the walker.
What will I learn if I build this?
You will practise dataset collection and labelling, transfer learning from a pretrained video model, exporting to ONNX and running inference on constrained hardware, and implementing a standard BLE profile (Fitness Machine Service) so third-party apps talk to your device. That mix of embedded ML and wireless protocol work maps directly onto thesis and capstone projects.
