For a Nottingham Hackspace project, I was asked if I could measure the RPM of a motor. “Sure!”, I said.
What was really needed was quickly bodging together a beam-break circuit and connecting it to an oscilloscope. This would have taken a couple of hours at the most. But like a proper software engineer, I decided to make the “generic” solution to the problem, which took ages.
There are actually two ways to measure RPM electronically
- Using a beam-break or reflective sensor and a counter, which provides a direct measurement.
- Using a strobe light and adjusting the frequency until the rotating object appears stationary.
I went with the second option – building a stroboscope.
At its heart, a stroboscope is just a rectangular wave generator hooked up to a light source. I wanted a few extra features to make it nice to use:
- Ability to set flash rate by either frequency or RPM
- Set duty cycle of output without affecting flash rate
- LCD display
- 2×16 for displaying RPM, frequency and duty (one per line, so one will be hidden at any time)
- Rotary encoder (with button) for main interface
- When button is not pressed, knob will increase/decrease the value of the selected digit
- When button is pressed, rotating knob will scroll through display digits
- Buttons for quickly halfing/doubling thirding/trebling the flash rate
- This is useful for checking that you haven’t hit on a multiple of the rotation rate
- Nice beefy output stage for switch big sets of LEDs
The system was prototyped on an Arduino Uno, and then a Nano was used for the actual board. The basic hardware diagram looks like this:
For more detail: Stroboscope