Simple way to measure wheel spinning speed with Adroid phone + magnet (and maybe Reed Switch)


I'm trying to create the simplest/easyest/cheapest possible way to measure the speed at which a wheel is turning (like a bicycle speedometer) with a smartphone. On the phone the information will be further processed and used as the display of an open-rower-erg project.

This is an open-source project. Although I can program a bit, I need opinions/answers from electrical engineers on the following options I'm considering for this measurement:

1) The simplest I could think of was attaching a small magnet to the wheel and placing the phone close enough to the wheel that the phone's magnetometer could record the magnet passing. Then the phone would process the signal to extract angular velocity.
Is this idea feasible (the fact that no other tread mentions this makes me a little skeptical)?
Could that magnet, systematically moving on the same direction, damage the phone or drain the battery?
How precise can I be with the magnetometer? how fast could I sample it?

2) Another alternative would be to use Reed Switch, probably scraped from a cheap bicycle speedometer, and try to send the signal though the phone directly, either through the micro-usb or the headphone jack. Other treads(tread2, tread3, tread4) suggest using the headphone jack would be better then the micro-usb slot. Is this really an alternative? How could I do that?

3) Others at the open-erg-tread1 suggested an Arduino, with the USB output. What would be the cost of that? This other tread5 suggests a similar idea to my point 1, above, sending information from Arduino to Android via magnetic field and the phones magnetometer.

Any suggestions are welcome, I'm having a difficult time finding good references on google. Thanks in advance

I don't have enough rep to put more than two links. The others are:

EDIT: adding estimates for the max rotation speed (very rough, coming from imagining an erg, not actually measuring, please correct my numbers if you know better):

x) dive lenght: 1.90m (~6"3')

y) cog circunference: 91mm (= 29mm cog diameter * PI)

z) turns per drive: x/y = 20.8

t) drive time: 0.6s – 0.9s (when rowing fast)


w) max RPS during drive: from 33.3rps (20.8/0.6) to 25rps (20.8/0.8)

Best Answer

OK, I am brainstorming a little bit here. I believe the easiest way to get rotational rate is to put something battery powered and blue tooth enabled on the wheel (preferably near the hub) with a 3-axis accelerometer. One or two of the axes will have a nice sinusoidal wave as the wheel rotates. This is an unmistakable signal. You can count time between max or min, or count zero crossings to easily calculate RPM's.

You will have to know the wheel rolling diameter to calculate speed over ground.

The smart sensor on the wheel will transmit data to the smart phone via blue-tooth. Could either transmit raw sensor data, or it could be processed into RPM's and only the end result could be passed to the smart phone.

You can also test it out with two smart phones. Have one act like the sensor, and the other like the display.

Related Topic