The Walkolution 2 treadmill is a marvel of engineering. I can work at a walking desk, and the loudest noise coming from the treadmill is my pants legs rubbing against each other.
However, the fully manual treadmill has no way to track progress, and nothing motivates me like watching a number go up. So I set out to harvest a watt from the front treadmill axle as silently as possible, to power a small computer that could track speed and distance, and transmit that data wirelessly to my phone for me to sent to Strava.
After all, if it isn't on Strava, it never happened.
Honestly, probably not. Despite my best efforts, the pulleys make some noise, though it's low-frequency and doesn't disturb me. The generator (motor), especially when first charging up the capacitor, produces noticeable resistance on the treadmill. And the process of mounting the whole assembly to the treadmill can be a bit frustrating as my final design doesn't include adjustable tensioners for the belts (favoring overall rigidity instead, which is difficult to produce at the best of times with 3d-printed plastic parts under load).
But will that stop you? Maybe not. It didn't stop me.
To build this machine, you'll need some hardware for the assembly of the generator, and a fair number of electrical components. I bought almost everything from Amazon except for a few integrated circuits I picked up from Digikey. I'll do my best to provide links to the exact products I actually included in my current version, and you can choose to use them or buy equivalent products elsewhere.
The screws required are common sizes available in a variety of packages on Amazon and elsewhere. You can probably get by with a simple variety pack of hardware in each size (m2, m3, m4) that you can use for this and many future projects.
M2 hardware
(3) 6mm countersunk screws
M3 hardware
(14) 12mm screws
(3) 6mm cap screws
(1) 20mm cap screw
M4 hardware
(1) 12mm button-head screw
(1) 8mm button-head screw
(2) flat washer
(2) hex nut
(1) Pi Pico W
(6) Schottky diodes
(1) 5V boost
(1) 5V buck
(1) TVS diode, 6.8V
(1) AO3400A MOSFET
(2) adapters for the voltage regulator and MOSFET to fit into breadboard form factor, unless you're cutting a custom PCB
(1) mini breadboard with rails, either standard or soldered
(1) tiny breadboard, either standard or soldered
Jumper wires, header pins, cables, etc. based on how you decide to wire the components together.
Soldering iron for small components, solder, flux
All STLs for printed parts are provided on Printables.
All of the rigid parts (everything except the belts) should be printed in standard PLA. Print them in the orientation provided in the STL files on Printables! The orientation of each part was chosen carefully to minimize the need for supports, maximize strength, and so on.
The following parts require supports, on the print bed only. Do not turn on supports for any other part!
Motor mount center plate
Axle pulley
Motor pulley
Step-up pulley (also: This is the most likely part to break; print with 4 perimeters, and/or with the 64D TPU for strength)
All other PLA parts can be printed with the default settings on your printer, with a 0.4mm nozzle. You can slightly increase infill percentage, which usually has little effect but in this case can help with the overall rigidity of the Plate part, which I printed with 25% infill.
I also printed all of my PLA parts with elevated nozzle temperature--240C in most cases. This slightly worsens surface quality but greatly enhances adhesion between layers, which is particularly important in the pulley parts. Alternatively, the pulleys can all be printed from 64D TPU (in my build, two of the three are TPU, with only the motor pulley being PLA).
The belts should be printed from TPU, with perimeters turned up high enough that it's equivalent to full infill.
The lower belt (the one connected to the axle pulley) can sometimes skip teeth under heavy load. To prevent this, print it in three layers--2mm of 95A TPU, 2mm of 64D TPU, and 2mm of 95A TPU. The much stiffer 64D TPU is too stiff to use for an entire belt, but having a layer of it in the middle of this belt provides a working tradeoff in terms of stiffness and tension that works great in my machine.
Screw the step-up mount to the plate with four 12mm countersunk m3 screws.
Insert the two small ball bearings into the ends of the pulley, and wrap the two timing belts around the pulley. If one of your pulleys is stiffer than the other, use that one on the bottom.
Insert the 4mm x 50mm rod through the two ball bearings and into the bottom of the step-up mount.
Push the step-up mount roof onto the step-up mount so that the rod extends slightly out of the top of the roof, and secure it with two more 12mm m3 screws.
I lubricated my pulleys with a "dry" bike chain lube, wax-based, like this one. This kind of lube will not deteriorate PLA or TPU parts over time, and does not attract much dust, so it's a good long-term solution. That said, the pulleys don't move all that fast and aren't that loud, and you are probably fine with no lube at all.
Design note: The small raised portions of the top and bottom of the mount should press against the inner ring of each ball bearing, or at least nearly do so. This prevents the pulley from sliding up and down the rod, and also prevents the pulleys themselves from rubbing against the top and bottom of the mount.
Attach the motor affix to the gimbal motor using three 6mm m2 screws. Be gentle as these can easily strip their mount points.
Insert one ball bearing into the motor mount. It should fit snugly so that a little vibration will not work it loose.
Slide the motor and affix into the top space of the motor mount, and attach it with two 6mm m3 cap screws.
Slide the motor pulley up through the bearing and into the motor affix, and attach it with a 20mm m3 cap screw.
Attach the motor mount to the plate with four 12mm m3 countersunk screws.
Slide the top timing belt onto the motor pulley. This may require a little force.
Insert the second bearing into the motor mount center plate, again making sure it fits snugly.
Slide the center plate into the mount and up until the motor pulley enters the bearing, and attach it with three 12mm m3 countersunk screws.
Gently start screwing a 6mm m3 cap screw into the tunnel to nowhere. This will be a set screw to hold the Hall Effect sensor in place later.
Design note: Having the motor's pulley have a ball bearing on both sides is critical to the health of the motor. These small gimbal motors are not built for side-loaded force; having a ball bearing on each side bears all the lateral force of the belt tension on the printed part rather than on the motor itself.
Press five magnets into their slots on the plate. This will be part of what holds the plate onto the treadmill. Add a second magnet on top of each of the five (to increase strength).
On the side of the plate that will be closer to the ground when mounted, screw a 12mm m4 button head screw through the hole and into an m4 hex nut, and screw it down pretty tight. This nut will slide into a small hole that already exists on the treadmill.
On the other side, do the same but with a 20mm screw, and with a washer on each side. This bolt will eventually go through the treadmill's metal plate and be the main force to keep this generator assembly from sliding around.
Press two magnets into the axle pulley. Make sure they are oriented opposite each other, so that one has the N pole up and the other has the S pole up.
Also, screw a 12mm (or longer) m3 countersunk screw into the pulley from the bottom. This help with layer adhesion under high load. Screw it in tight, but not so tight that it begins to strip the plastic.
Design note: The slots for the magnets are rather deep. This is because if you move a magnet of this size too closely to the Hall Effect sensor, it can sometimes pick up both the North and South pole of the same magnet as it passes, ruining the accuracy of the odometer. This sets the magnets back just far enough so that's not an issue.
This is where it gets difficult. First, remove the magnetically-attached cover over the front axle on the left. You should see a very large bolt that rotates slowly as you walk. The axle pulley push-fits onto that bolt.
It should fit very tightly. Push it on, and if necessary rotate it slightly so that the hexagon fits into the open space on the end of the bolt. Push it on as far as it will go.
Then, remove the hex nut and washer from the 20mm m4 screw you put through the printed plate earlier, so that only the bolt itself extends through the plate.
Slide the whole generator assembly over the axle pulley and onto the metal surface so that the magnets hold it to the treadmill. At this point you need to make sure the bottom timing belt gets stretched onto the axle pulley. This will be a bit difficult but I promise, it can be done.
Once the belt is in place, slide the plate so that the nut and bolt on the plate stick through the two small openings on the metal surface. The belt should be under moderate tension. Then use the washer and nut removed earlier to firmly attach the top of the generator assembly to the treadmill.
At this point, you should be able to slowly walk on the treadmill and watch the motor turn rapidly.
The brushless DC motor used in this project produces pulses of power that alternate through three separate wires. Also, because we have geared up the axle speed by 9:1, we can produce voltage that is far too high for the Raspberry Pi Pico W that we plan to use as the brain. Plus, we don't want the power to immediately cut out if you stop walking for a few seconds.
So we need to build a system that will rectify, buck, and store the power produced by the motor, so we can provide a nice, clean, stable power supply to the electronics that will monitor and display your distance traveled and time active.
I will start this portion by saying that I am not an electrical engineer, and this project is a result of lots of trial and error, and lots of wasted electronic components as I figured out what worked experimentally. I'd love to hear from you if you have advice for this or similar projects: bendilts@hey.com
Also, because I am fully untrained in electronics, I'm not sure how to clearly communicate the circuits I've built in a standard way. So you'll have to excuse my crude diagrams and descriptions.
A Schottky diode allows current to flow in only one direction. As our brushless motor puts out a sort of quasi-AC signal, we have to first use a group of Schottky diodes to only allow power to flow into one side of our overall circuit and out of only the other side.
So, from each of the three contacts coming from the motor, we put a Schottky diode that allows power to go from the motor into the positive side of our power conditioning circuit. And also, we have a Schottky diode going from the negative end of our power conditioning circuit back to each of the three motor contacts. So no matter which of those three contacts is currently positive and which is currently negative, the rest of the power conditioner sees essentially a steady flow of power at a steady voltage.
"Steady voltage" isn't all that steady though, so we put a small 1000uF capacitor directly connected to the Schottky diode ends that are further from the motor. This helps smooth the transitions as power switches from one of the contacts to another as the motor turns. From there, we use a simple 5V buck, which lowers voltage from whatever the input is to right about 5V. This is the highest power level we want to feed our eventual thinking electronics.
So the output of the 5V buck goes into a 5V, 4F supercapacitor. This is our primary energy storage, and is enough to keep the whole system alive for as long as a couple minutes after you stop walking, depending on conditions.
As a safety measure, we tie a 6.8V TVS diode across the supercapacitor's contacts, wired in reverse. This acts as a fuse. If for any reason something fails and we start feeding high voltage to the supercapacitor, this will allow any voltage over ~6V in the capacitor flow over the diode and be dissipated as heat. It's a fuse.
We tie the ground (-) end of all of these components together, and we have a working circuit. At this point, if you plug the motor into the front of the power conditioner and start walking, you will see the voltage on the supercapacitor steadily rise to about 5V and then remain steady there.
The process of building a prototype electrical circuit is outside the scope of these instructions. I used a standard breadboard for early testing and then used an ElectroCookie soldered breadboard for the final product.
On the board, you'll want three pins sticking up that you can plug the cable coming from the motor into. It doesn't matter which pin connects to which motor wire. You'll also want two wires coming out of the board that you can connect to the next board: The Pi Pico W board.
The second board primarily houses a Pi Pico W. For this board, I used a standard prototyping breadboard even for the final product, because it's so easy to insert the Pi Pico itself, and it is convenient to be able to remove it from the board if necessary.
This board is connected to the power conditioner board with a single pair of wires, shown at the left of this diagram. The first two ICs are a 2.25V TLV803 voltage supervisor and an AO3400A MOSFET. The job of these two components, along with the 100KOhm resistor, is to cut off the negative side of the Pi Pico's power circuit if the input voltage from the supercapacitor is below 2.25V. This allows for a clean startup of the Pi Pico instead of a slowly-rising voltage that it sometimes just doesn't recognize.
Then there's a voltage booster than raises the voltage from the supercapacitor to 5V, but this is bypassed for the Pi Pico itself. This allows the Pi Pico to measure the current capacitor voltage and save progress before power runs out if you stop walking.
So, the conditioned but unboosted voltage goes to VSYS on the Pico, and the boosted 5V input goes to the Hall Effect sensor and the LCD panel, both of which require 5V to work correctly.
For the Hall Effect sensor, use a bundle of three wires with pin inputs on one end in a standard 0.1-inch square size. Wrap all three of them together in a row with painter's tape and insert the three pins of the Hall Effect sensor. The wires should be several inches long so that you can insert the sensor into the slot in the motor mount without having the electronics or case fully mounted yet.
To install from source:
Install vs.code and the official Pi Pico plugin for vs.code
Clone the walkolution-odometer repo from Github
Hold the button on the Pi Pico W while plugging it into your computer's USB port to put it in bootloader mode
Open the Pi Pico plugin panel in vs.code, and click Run Project; this will configure, compile, and install the firmware. You can validate it's working by connecting to the serial output of the running app after installation if it's powered over a USB connection to your computer. There's a fair amount of debug output printed there.
The Android app is optional but definitely helpful. It will connect with the Pi Pico W over Bluetooth Low Energy (fully automatically, no confirmation required) and allow you to see your progress so far as well as submit your progress to Strava. It also allows you to configure the use of miles vs kilometers, and also allows you to configure Wifi credentials so that the Pi Pico can connect to wifi and use NTP.
If you never use the companion app, you will see a little status character spinning in the lower-right corner of the odometer's LCD display forever as it waits for a Bluetooth connection. When successfully connected, that turns into a capital "BT".
The odometer gets the current time from the connected Bluetooth device. If no Bluetooth device connects, after ten seconds or so it will attempt a Wifi connection to use NTP to get the current time. To accurately track separate walking sessions, you must provide Wifi credentials via the Android app so that it can connect to a network, though that has no effect on simply tracking lifetime progress on the odometer.
Attach the boards inside the cover, in locations that won't interfere with the generator portion.
You have two options for the sensor: Either attach it permanently to the generator, and plug it into the Pico board just before mounting the cover. Or, attach it permanently to the Pico board and slide the sensor itself into place just before mounting the cover.
At the last moment, connect the motor's cable to the three pins on the power conditioner, make sure the power conditioner is connected to the Pi Pico board, and make sure the Hall Effect sensor is connected to the Pi Pico board and inserted appropriately into the generator assembly. If it doesn't fit tightly in the generator assembly, wrap it in a layer or two of painter's tape to get a firm fit so it won't vibrate loose.
Insert two magnets into each of the magnet slots on the cover, and slide it into place over the whole generator assembly.
At first, you'll feel some additional drag as you charge up the capacitor. It's likely pulling about 2-3 watts of power right at the beginning, which is enough to feel in your legs. But within several seconds that will abate as the capacitor fills. After a few seconds, the Pi Pico W will turn on and the LCD screen will start showing progress. A few seconds later, as the capacitor reaches 3.5V, the screen's backlight will turn on. When you reach 4.2V, Bluetooth will attempt to connect (and after 10 more seconds, if no Bluetooth host is found, Wifi will be attempted for NTP to get the current time).
If you stop walking for a moment, distance and time elapsed will pause automatically. Start walking again to wake it back up and continue.
If you stop walking long enough for the capacitor to run out, but start walking again within 15 minutes (assuming either Wifi or Bluetooth is available to sync the current time), it will be considered the same session. If it's been longer than 15 minutes, it'll start from zero on the current session's progress.
If you have the Android companion app, you should see progress on the current session, lifetime totals, current power level, and the ability to connect to Strava to upload sessions.