Calculating cadence (RPM) with a speedometer

I don’t care about what anything was designed to do, I care about what it can do” – From the movie Apollo 13 (1995)


Last year I bought this speedometer for my bike, quite reliable given that you don’t quick release it all the time (the mount broke eventually). Which is why now I have a Cateye Velo 9, a much sturdier piece of equipment. However, it doesn’t calculate cadence (RPM), which is quite a useful metric. Getting a quality speedometer that does both speed and RPM is expensive so I decided, why not buy another one of these cheap speedometers and turn it into a RPM meter.

The conversion

Physically

We no longer mount the sensor to the wheels as we are not measuring speed

Instead we mount the sensor to the pedal so that we can get the RPM of the pedal

Mathematically

These speedometers calculate speed in km/h by: RPM x 60 x Circumference of wheel in mm / 1,000,000

In this equation we are interested in extracting the RPM value and the only variable we can manipulate here is the circumference of wheel.

Therefore, we must manipulate the value for the circumference of wheel to negate the effects of the hard-coded multiplications programmed into speedometer.

Displayed value = RPM x 60 x COW / 1,000,000 where COW = circumference of wheel in mm
Displayed value = RPM x COW x 60 /1,000,000 we re-ordered it a bit
Displayed value = RPM x COW x 0.00006
We want COW x 0.00006 to equal 1 so that we get Displayed value = RPM x 1 which means Displayed value = RPM!
So, for COW x 0.00006 = 1, COW must equal 16,666.667

If we set COW as 16,667 then we will get RPM!

The problem

The maximum wheel circumference I can set is 9,999, way less than the required 16,667

The solution

Divide our COW value by 10 so that it displays RPM /10! Here’s it mathematically

Displayed value = RPM x 60 x COW / 1,000,000 where COW = 16,667/10 = 1,667
Displayed value = RPM x 60 x 1,667 / 1,000,000
Displayed value = RPM x 1/10

The result

When we input 1,667 as the wheel size, if it shows 81 which is how it shows 8.1, we need to remember that number is RPM / 10. So when it displays 8.1, we just x10 to get our RPM value!