Wind speed measuring using hall sensor

Hi!

I require your help regarding a problem I’m encountering.
I am trying to measure wind speed using Hall sensor, Neodymium magnet & below mentioned code. But I only get “0” value for both RPM & KPH values. Can you help me to solve this?

volatile byte revolutions;

unsigned int rpmilli;
float speed;

unsigned long timeold=0 ;

void setup()
{
Serial.begin(9600);
attachInterrupt(digitalPinToInterrupt(2), rpm_fun, RISING);

revolutions = 0;
rpmilli = 0;
timeold = 0;
}

void loop()
{
if (revolutions >= 1) {
//Update RPM every 20 counts, increase this for better RPM resolution,
//decrease for faster update

// calculate the revolutions per milli(second)
rpmilli = revolutions/(millis()-timeold);

timeold = millis();
revolutions = 0; 
// WHEELCIRC = 2 * PI * radius (in meters)
// speed = rpmilli * WHEELCIRC * "milliseconds per hour" / "meters per kilometer"

// simplify the equation to reduce the number of floating point operations
// speed = rpmilli * WHEELCIRC * 3600000 / 1000
// speed = rpmilli * WHEELCIRC * 3600

speed = rpmilli *1.28805*3600;

Serial.print("RPM:");
Serial.print(rpmilli * 60000 ,DEC);
Serial.print(" Speed:");
Serial.print(speed,DEC);
Serial.println(" kph");
}
}

void rpm_fun()
{
revolutions++;
}

Thank you so much in advance for your help!

Hello @janith!

Can you share the Hall sensor you are using? (Maybe a product link)

If you are using a library or sample code could you share the link?

If possible, please send some pictures of how everything is wired.

Regards

Hello, I am using A3144 Hall sensor. (https://circuits-diy.com/a3144-magnetic-hall-effect-sensor/)
I am using the above code only.
Connection: Screenshot 2022-01-28 131158.jpg - Google Drive

Try changing “rpmilli” to a float

float rpmilli;

The error might be caused because the division results in a number lower than 1 so it is always saved as 0

1 Like

Yes it was. I changed it to float.
Also, I have changed rpmilli = revolutions/(millis()-timeold); to rpmilli = ((float)revolutions)/(millis()-timeold);
Now it works fine. Thanks for the help :heart:

1 Like