Omdrejningstæller til drejebænk

Min drejebænk er ombygget til direkte drift, altså uden gearkasse. Med frekvensomformer kan jeg justere hastigheden, men hvor stærkt kører den ?
Jeg søgte inspiration på nettet, og faldt over en Arduino omdrejningstæller der kunne tilpasses mit behov. http://www.pyroelectro.com/tutorials/tachometer_rpm_arduino/software.html
Med lidt eksperimenteren og uvurderlig hjælp fra Gerd og BWS, er resultatet en omdrejningstæller, med fortløbende tæller der kan nulstilles (feks ved vikling af spoler).
Som føler har jeg anvendt en hallgiver fra en Peugeot/Citroën 2,0 HDI. Den sidder og måler på knastakslen, og kører 5V, perfekt til mit formål.
Der er en kort video her: http://youtu.be/a2LCdWgaBQA

Kode:
#include <LiquidCrystal.h>
LiquidCrystal lcd(3, 5, 9, 10, 11, 12);

volatile float time = 0;
volatile float time_last = 0;
volatile int rpm_array[5] = {0,0,0,0,0};
volatile int cnt = 0;

// digital pin 3 has a pushbutton (reset counts) attached to it. Give it a name:
int resetCntButton = 3;

void setup()
{
  // make the pushbutton's pin an input:
  pinMode(resetCntButton, INPUT);

  //Digital Pin 2 Set As An Interrupt
 attachInterrupt(0, fan_interrupt, FALLING);

  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("RPM:");
}

//Main Loop To Calculate RPM and Update LCD Display
void loop()
{
  int rpm = 0;
  
  while(1){    

  //Slow Down The LCD Display Updates
  delay(400);
  
  //Clear The First Row
  lcd.setCursor(0, 0);
  lcd.print("RPM:                ");   
  
  //Update The Rpm Count
  lcd.setCursor(4, 0);
  lcd.print(rpm);   

  //Clear The Second Row
  lcd.setCursor(0, 1);
  lcd.print("CNT:                ");   

  lcd.setCursor(4, 1);
  lcd.print(cnt);   

  //Update The RPM
  if(time > 0)
  {
      rpm = 60*(1000000/(time));    
  }
  else rpm = 0;
  
  // Reset the counter by pressing the resetCntButton
  if (digitalRead(resetCntButton)) 
  {
    cnt = 0;
  }

 }
}

//Capture The IR Break-Beam Interrupt
void fan_interrupt()
{
   time = (micros() - time_last); 
   time_last = micros();

   //Count the rotations
   cnt ++;
}

Flere billeder kommer når jeg får bygget det hele pænt ind.

Så blev jeg færdig :) Resultatet kan ses her: https://www.youtube.com/watch?v=s8taHjReOqE
Der er en diskussion om denne artikel: Sv: Omdrejningstæller til drejebænk