如何测量车轮的RPM?


15

我正在尝试使用Arduino或Lilypad板为自行车制作一个车载系统。

我认为我应该使用霍尔效应传感器,但是任何替代方法也都不错。

我想将速度输出到LCD显示屏,但我想知道解决此问题的最佳方法。

Answers:


12

按照Starliner的建议使用霍尔效应传感器将是与车轮连接的一种方法。Achim和Shutterdrone的建议使用磁簧开关更有意义,因为考虑到支持硬件,霍尔效应传感器需要获得干净的数字信号。

您也许可以从损坏的自行车计算机中取出磁铁和传感器,但如果无法这样做,则本地零件商店应备有每种库存。传感器和磁铁回收的优点是您已经拥有安装硬件。

在arduino Wiki上有关于ReadingRPM信号的页面。要计算速度,请将RPM值乘以车轮周长(2 * pi *半径[以米为单位])。结果将以每分钟米为单位。

编辑:我注意到链接的代码适用于每转两个脉冲的系统。一个磁铁足以完成您的任务。此外,对于自行车电脑,您可能希望结果以KPH表示(如果您住在仍然认为文明的地方,则为MPH)。我对Wiki上的代码做了一些(未经测试的)mod,以打印出KPH并将其粘贴在下面。

volatile byte revolutions;

unsigned int rpmilli;
float speed;


unsigned long timeold;

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

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

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

    // calculate the revolutions per milli(second)
    **rpmilli = (millis() - timeold)/revolutions;** EDIT: it should be revolutions/(millis()-timeold)

    timeold = millis();
    **rpmcount = 0;** (EDIT: 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 * WHEELCIRC * 3600;

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

void rpm_fun()
{
  revolutions++;
}

另外,我已经启用了“社区Wiki”,我认为这意味着其他用户可以对其进行编辑。如果我的数学错误(并且可以证明!),请帮我修复。:)


10

实际上,阿齐姆在这里提出了非常好的观点。

簧片(磁性)继电器(开关)和霍尔效应传感器之间存在很大差异。

首先,只要有足够的磁力作用在开关上,簧片继电器就会连接开关,从而为您提供开/关信号。霍尔效应传感器提供电压电平,该电压电平指示对其施加了多少磁力。

上面显示的代码只能“直接”与Reed继电器一起使用,这并不是说它根本不适用于霍尔效应传感器,而是使用霍尔效应传感器会带来其他挑战。

主要的挑战是将模拟设备视为数字设备-期望在脉冲上升时触发。现在,信号将不会被脉冲化-它通常像一个钟形曲线,带有各种波动。当磁体通过霍尔效应传感器时,您可能会多次跳过高电压的最小电压(大约3.5v,IIRC?)。

当然,使用诸如霍尔效应传感器之类的东西时,我们的第一个直觉是使用ADC并读取模拟引脚上的电压电平。但是,您最多只能在模拟引脚上每秒读取10,000次(每次读取需要100uS)。这还假设您所做的只是循环并读取值-不会给您留下太多时间来更新显示,计算等。更不用说,如果您在错误的时间阅读,则会错过信号!

我敢肯定有可能使用以某种方式链接到ADC的中断,但是我没有足够的知识。

相反,如果您希望使用实际的霍尔效应传感器,建议将其馈入施密特触发器,以将其转换为指示“直接在磁体下方”的校准水平的数字(开/关)信号。此外,根据施密特触发器中实现的磁滞水平,您可能需要进行一些反跳操作,这些操作会根据当前速度改变反跳速率。然后,您可以将其视为普通的Reed继电器。

!C


1
您可以两全其美。可以配置ATMega8组件以提供对内部比较器的访问。使用合适的参考电压(例如,可以通过微调电位器进行调节),可以在模拟信号的上升沿(或下降沿或同时下降沿)中断。链接到论坛主题,仅说明了这一点:arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1163394545
SingleNegationElimination 2010年

存在具有施密特触发器阈值输出的霍尔效应设备。它们很常见。同样,使用簧片开关,无论如何,您都将不得不对输出进行去抖动。
康纳·沃尔夫

7

霍尔效应传感器和簧片开关在这里是最受关注的,它们是最好的解决方案。

磁簧开关会更便宜,但可能给你假的脉冲当自行车得到震动。如果仅是路缘石之一,该软件可能会轻松过滤掉它,但是在鹅卵石上骑车时却有所不同,这可能会一直给您带来虚假脉冲。更具抗震性的簧片开关将需要更强的磁场来激活,但是钕磁铁可以解决该问题。



77

霍尔效应开关没有这些缺点,但有点贵。


T

v=πDT

DT

s=pulse count×π×D

d


5

可以将磁铁安装在车轮轮辋的边缘,并将霍尔效应传感器安装在非常靠近(但不接触)磁铁的位置。当车轮旋转并且磁铁通过传感器时,传感器将拾取磁场中的变化。


3

如果您仍想进入固态状态,则可以使用许多“霍尔效应开关”,其中包括具有滞后作用的霍尔效应传感器和施密特触发器,以提供干净的数字输出而不会发生跳动。只要达到某个阈值磁通密度(数据表中提供),它们就会切换。您可以计算出磁铁和开关的良好组合,也可以简单地进行实验。

这个站点将告诉您更多。


2

自行车计算机中的零件是簧片触点而不是霍尔效应传感器。他们是完全不同的。但我想大家都在谈论芦苇接触。


1

磁铁可以安装在辐条上,传感器可以安装在您的叉子或链条之一上。

而不是乘以pi等,我的上一台自行车计算机建议的方法是测量一个转数的线性距离(在轮胎上粉笔,测量两个粉笔标记之间的距离),然后可以将转数直接乘以周长。

[编辑]我刚刚在piclist网站上找到了使用PIC实施自行车计算机的指南,也许其中一些信息对您有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.