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;



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


Similar projects you might like

Programming Hexiwear (Wearables + IoT) in Python
  • 1,163
  • 9

Full instructions

Getting started with Python and Hexiwear, one of the most loved wearable IoT development platforms!

Charlieplexing with Freescale
  • 375
  • 7

Full instructions

Charlieplexing uses the tri-state logic capabilities of microcontrollers in order to gain efficiency over traditional multiplexing.

Hexiwear - Beginner
  • 534
  • 9

Work in progress

A quick and simple app using Hexiwear to introduce how to make apps using web bluetooth for Blueapp & Avnet Things.

Setting Up GPIO, PWM, I2C for K82 Freedom Board in KDS
  • 1,165
  • 10


A helping hand for the novices like me to set up Output on other available pins of K82 Freedom

Jack and Coke Bot
  • 271
  • 5

Pour the perfect Jack and Coke every time.

Automatic Temperature Based Fan Control (for Media Cabinets)
  • 2,319
  • 13

Full instructions

Media cabinets often get very hot. This project combines a temperature sensor with a fan to cool them down.

ProjectsCommunitiesTopicsContestsLiveAppsBetaFree StoreBlogAdd projectSign up / Login