Im trying to build rpm counter using IR leds and arduino uno. The output im receiving in the serial monitor is totally a glitch.
the output is random numbers though the motor fan is not placed b/w IR leds(instead of 0).Even if i place motor b/w IR leds there is no changes in the output, it is keep on giving random numbers.kindly help( whether the bug is in program or circuit)
led (status) ---- pin 12 (connected via 200 ohm resistor)
IR transmitter --- pin 13 (connected via 200 ohm resistor)
IR receiver ---- pin 2 (connected via 10k resistor)
IR leds are fixied facing eachother.
int ledPin = 13; // IR LED connected to digital pin 13
int statusPin = 12; // LED connected to digital pin 12
volatile byte rpmcount;
volatile int status;
unsigned int rpm;
unsigned long timeold;
void rpm_fun()
{
//Each rotation, this interrupt function is run twice, so take that into consideration for
//calculating RPM
//Update count
rpmcount++;
//Toggle status LED
if (status == LOW) {
status = HIGH;
} else {
status = LOW;
}
digitalWrite(statusPin, status);
}
void setup()
{
Serial.begin(9600);
//Interrupt 0 is digital pin 2, so that is where the IR detector is connected
//Triggers on FALLING (change from HIGH to LOW)
attachInterrupt(0, rpm_fun, FALLING);
//Turn on IR LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
//Use statusPin to flash along with interrupts
pinMode(statusPin, OUTPUT);
rpmcount = 0;
rpm = 0;
timeold = 0;
status = LOW;
}
void loop()
{
//Update RPM every second
delay(1000);
//Don't process interrupts during calculations
detachInterrupt(0);
//Note that this would be 60*1000/(millis() - timeold)*rpmcount if the interrupt
//happened once per revolution instead of twice. Other multiples could be used
//for multi-bladed propellers or fans
rpm = 30*1000/(millis() - timeold)*rpmcount;
timeold = millis();
rpmcount = 0;
//Write it out to serial port
Serial.println(rpm,DEC);
//Restart the interrupt processing
attachInterrupt(0, rpm_fun, FALLING);
}
I have attached circuit diagram and output screenshot