Open Source Non-contact Tachometer Calibrator

This time, I will share my attempt on making a non-contact tachometer calibrator with no moving parts.

Similar projects worth following
This September, I'm moving to a new office that provide calibration service. I put myself in a R&D position, and asked to make a tachometer calibrator. My office asked me three device: non-contact tachometer calibrator, contact tachometer calibrator, and strobe tachometer calibrator. For this post, I will explain the non-contact tachometer calibrator first.

Non-contact tachometer calibrator works by measuring time between reflection of laser light on a rotating object. The device usually ships white reflective paper to attach to the rotating object (although any white paper is fine). A photo diode (or photo transistor) inside the tachometer receive the bright red reflection.

To confirm the theory, I downloaded Strobily Free for android. It provide similar functionality to strobe tachometer. I pointed the photo tachometer to the strobing LED light of my phone and it shows the correct RPM.

So, I created device that's basically a LED with customizable PWM frequency


  • No BS user interface
  • Oscilloscope Output for debugging purpose
  • Simple and cheap


  • 5VDC operating voltage
  • Adjustable RPM from 1 to 99,999


  • The Omnipresence Arduino (Uno variant). Cheap (the MCU alone costs $2 here).
  • 16x2 character HD44870 - compatible LCD display
  • High-brightness 1W LED (currently uses Cree LED, but will replace it with red LED)
  • 2 buttons for user input
  • 2 trim potentiometer for LCD contrast.
  • Photodiode for stroboscope detection.


Available at

    • 1 × Arduino Uno
    • 1 × HD44870 LCD
    • 2 × 1K Trimpot
    • 1 × 2N2222 Discrete Semiconductors / Transistors, MOSFETs, FETs, IGBTs
    • 2 × 270 Ohm Resistor

    View all 8 components

    • Jitterless Output

      Banitama Supartha10/08/2015 at 12:06 0 comments

      Initially, I thought of using the usual micros() to set the output for the LED. Soon, I found out that micros() is not very accurate. 4us resolution and too much overhead for producing stable frequency. Even though I replaced the micros() with another library , it seems that software-based waveform generation is not too reliable.

      Then I discovered PJRC's FrequencyTimer2 library. A little less flexible, since it only allow you to output waveform on pin 11. I was prototyping this on a perfboard and with Arduino's standard digital pin spacing I need to drill a set of new holes, so I'm moving to Arduino Nano and custom PCB.

    • LED Consideration

      Banitama Supartha09/26/2015 at 17:37 0 comments

      By the time of writing, the project is undergoing its first beta phase. I noticed several room for improvement here:

      • Change the LED to a red one. White LED often contain phosphor on top of the silicon substrate to make it emit light with spectrum what our eyes see as white. This phosphor layer will glow for a short time after current removed from the silicon ("afterglow"), potentially affecting accuracy of the rotation simulation. This effect does not appear on the plain red LED.

    View all 2 project logs

    Enjoy this project?



    Similar Projects

    Does this project spark your interest?

    Become a member to follow this project and never miss any updates