Skip to main content
added 172 characters in body
Source Link
Majenko
  • 105.5k
  • 5
  • 80
  • 138

I am using Arduino Duemilanove and a hall effect sensor to calculate the speed of a motor. When I used sensor out directly to Interrupt0, the rising edges of noise were also detected. So the speed calculation went wrong.

So now sensor is connected to A0.and a threshold is put. Pin No 13 is connected to Interrupt 0(Pin 2). I use the following code.

volatile byte count; const int analogPin = A0; const int digitalPin=13; const int threshold =20; unsigned int rpm; unsigned long starttime;

void setup() { pinMode(digitalPin,OUTPUT); digitalWrite(analogPin,HIGH); digitalWrite(digitalPin,HIGH); Serial.begin(9600); attachInterrupt(0,sense,FALLING); rpm=0; starttime=0; count=0;
} void loop() { int sensorValue = analogRead(analogPin); Serial.println(sensorValue); if (sensorValue < threshold) { digitalWrite(digitalPin,LOW); if (count>=20) { rpm=601000count/(millis()-starttime); starttime=millis(); count=0; Serial.println(rpm,DEC); } } else { digitalWrite(digitalPin,HIGH); }

} void sense() { count++; }

volatile byte count;
 const int analogPin = A0;
 const int digitalPin=13;
 const int threshold =20;
 unsigned int rpm;
 unsigned long starttime;
 
 void setup()
 {
   pinMode(digitalPin,OUTPUT);
   digitalWrite(analogPin,HIGH);
   digitalWrite(digitalPin,HIGH);
   Serial.begin(9600);
   attachInterrupt(0,sense,FALLING);
   rpm=0;
   starttime=0;
   count=0;    
 }
 void loop()
 {
   int sensorValue = analogRead(analogPin);
   Serial.println(sensorValue);
   if (sensorValue < threshold)
   {
     digitalWrite(digitalPin,LOW);
     if (count>=20)
     {
       rpm=60*1000*count/(millis()-starttime);
       starttime=millis();
       count=0;
       Serial.println(rpm,DEC);
     }
   }
   else
   {
     digitalWrite(digitalPin,HIGH);
   }
   
 }
 void sense()
 {
  count++;
 }

But I get actual speed only in between. The speed changes back . I feel there is some problem with the sampling or rpm updation. Looking forward for help

I am using Arduino Duemilanove and a hall effect sensor to calculate the speed of a motor. When I used sensor out directly to Interrupt0, the rising edges of noise were also detected. So the speed calculation went wrong.

So now sensor is connected to A0.and a threshold is put. Pin No 13 is connected to Interrupt 0(Pin 2). I use the following code.

volatile byte count; const int analogPin = A0; const int digitalPin=13; const int threshold =20; unsigned int rpm; unsigned long starttime;

void setup() { pinMode(digitalPin,OUTPUT); digitalWrite(analogPin,HIGH); digitalWrite(digitalPin,HIGH); Serial.begin(9600); attachInterrupt(0,sense,FALLING); rpm=0; starttime=0; count=0;
} void loop() { int sensorValue = analogRead(analogPin); Serial.println(sensorValue); if (sensorValue < threshold) { digitalWrite(digitalPin,LOW); if (count>=20) { rpm=601000count/(millis()-starttime); starttime=millis(); count=0; Serial.println(rpm,DEC); } } else { digitalWrite(digitalPin,HIGH); }

} void sense() { count++; }

But I get actual speed only in between. The speed changes back . I feel there is some problem with the sampling or rpm updation. Looking forward for help

I am using Arduino Duemilanove and a hall effect sensor to calculate the speed of a motor. When I used sensor out directly to Interrupt0, the rising edges of noise were also detected. So the speed calculation went wrong.

So now sensor is connected to A0.and a threshold is put. Pin No 13 is connected to Interrupt 0(Pin 2). I use the following code.

volatile byte count;
 const int analogPin = A0;
 const int digitalPin=13;
 const int threshold =20;
 unsigned int rpm;
 unsigned long starttime;
 
 void setup()
 {
   pinMode(digitalPin,OUTPUT);
   digitalWrite(analogPin,HIGH);
   digitalWrite(digitalPin,HIGH);
   Serial.begin(9600);
   attachInterrupt(0,sense,FALLING);
   rpm=0;
   starttime=0;
   count=0;    
 }
 void loop()
 {
   int sensorValue = analogRead(analogPin);
   Serial.println(sensorValue);
   if (sensorValue < threshold)
   {
     digitalWrite(digitalPin,LOW);
     if (count>=20)
     {
       rpm=60*1000*count/(millis()-starttime);
       starttime=millis();
       count=0;
       Serial.println(rpm,DEC);
     }
   }
   else
   {
     digitalWrite(digitalPin,HIGH);
   }
   
 }
 void sense()
 {
  count++;
 }

But I get actual speed only in between. The speed changes back . I feel there is some problem with the sampling or rpm updation. Looking forward for help

Source Link

Hall sensor noise removal

I am using Arduino Duemilanove and a hall effect sensor to calculate the speed of a motor. When I used sensor out directly to Interrupt0, the rising edges of noise were also detected. So the speed calculation went wrong.

So now sensor is connected to A0.and a threshold is put. Pin No 13 is connected to Interrupt 0(Pin 2). I use the following code.

volatile byte count; const int analogPin = A0; const int digitalPin=13; const int threshold =20; unsigned int rpm; unsigned long starttime;

void setup() { pinMode(digitalPin,OUTPUT); digitalWrite(analogPin,HIGH); digitalWrite(digitalPin,HIGH); Serial.begin(9600); attachInterrupt(0,sense,FALLING); rpm=0; starttime=0; count=0;
} void loop() { int sensorValue = analogRead(analogPin); Serial.println(sensorValue); if (sensorValue < threshold) { digitalWrite(digitalPin,LOW); if (count>=20) { rpm=601000count/(millis()-starttime); starttime=millis(); count=0; Serial.println(rpm,DEC); } } else { digitalWrite(digitalPin,HIGH); }

} void sense() { count++; }

But I get actual speed only in between. The speed changes back . I feel there is some problem with the sampling or rpm updation. Looking forward for help