Things used in this project

Hardware components:
Adafruit industries ada161 image 75px
Photo resistor
A specific photo resistor is not required.
You'll need three resistors. Read more to figure which ones you'll need for your project.
12002 04
Breadboard (generic)
Teensy 3.1
This is just one of the many platforms you can use for this simple tachometer.
Texas instruments lm358ap image
Texas Instruments General Purpose Dual Op-Amp
Software apps and online services:
Ide web
Arduino IDE
Whatever IDE you like to use, you'll just need a serial monitor.


Op-Amp Comparator
This op-amp circuit digitizes the change in resistance of a photo resistor. This simplifies the tachometer code and produces more reliable results than an analogRead().
Comparator schematic sjlsjtzl53


Teensy TachometerArduino
The output from the op-amp is attached to pin 13 on a Teensy 3.2. This digital input has an attached LED so troubleshooting can be easier. Using an interrupt when the pin goes high, a boolean variable is set to true and then the RPM is calculated in the main loop, output to serial and the boolean variable is set back to false.
void setup()
  pinMode(13, INPUT_PULLUP);
  /* Depending on the board you're using, the interrupt declaration might have
   * a different syntax
  attachInterrupt(13, tick, RISING); 

long rev; //T
long prevRev = 0;
bool change = false;
int changeCount = 0;
double rpm;
double prevRPM;

void loop()                     
  if (change == true) {
    rev = millis();
    rpm = 60000/(rev - prevRev);
    if (rpm != prevRPM ) {
      Serial.println(String(millis()) + "~" + String(rpm));
      prevRPM = rpm;
    prevRev = rev;
    change = false;

void tick() {
  change = true;


Elliot Carter
2 projects • 4 followers


Did you replicate this project? Share it!

I made one

Love this project? Think it could be improved? Tell us what you think!

Give feedback


Sign up / LoginProjectsPlatformsTopicsContestsLiveAppsBetaBlog