Измерение скорости ветра с помощью датчика Холла
Привет! Мне нужна ваша помощь в решении проблемы, с которой я столкнулся. Я пытаюсь измерить скорость ветра с помощью датчика Холла, неодимового магнита и приведенного ниже кода. Но я получаю только значение “0” для обоих значений RPM и KPH. Можете ли вы помочь мне решить эту проблему?
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) {
//Обновляйте обороты каждые 20 отсчетов, увеличивайте их для лучшего разрешения оборотов,
//уменьшайте для более быстрого обновления
// вычислить обороты в милли(секунду)
rpmilli = revolutions/(millis()-timeold);
timeold = millis();
revolutions = 0;
// WHEELCIRC = 2 * PI * радиус (в метрах)
// скорость = rpmilli * WHEELCIRC * “миллисекунды в час” / “метры на километр”
// упростите уравнение, чтобы уменьшить количество операций с плавающей запятой
// speed = rpmilli * WHEELCIRC * 3600000 / 1000
// speed = rpmilli * WHEELCIRC * 3600
speed = rpmilli 1.288053600;
Serial.print(“RPM:”);
Serial.print(rpmilli * 60000 ,DEC);
Serial.print(" Speed:");
Serial.print(speed,DEC);
Serial.println(" kph");
}
}
void rpm_fun()
{
revolutions++;
}
@Janith Chamalka, 👍1
1 ответ
Лучший ответ:
▲ 3
rpmilli = revolutions/(millis()-timeold);
Все переменные в этой строке имеют тип int
, так что это целочисленное деление. Когда дельта времени в мс больше, чем количество подсчитанных оборотов, это всегда возвращает 0. Вам нужно изменить это на:
rpmilli = ((float)revolutions)/(millis()-timeold);
и измените rpmilli
на float.
,
@PMF
Смотрите также:
- Измерение скорости ветра с помощью анемометра с эффектом Холла
- Сколько датчиков может поддерживать ARDUINO UNO?
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
Большое вам спасибо за помощь, @Janith Chamalka