Answers:
按照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”,我认为这意味着其他用户可以对其进行编辑。如果我的数学错误(并且可以证明!),请帮我修复。:)
实际上,阿齐姆在这里提出了非常好的观点。
簧片(磁性)继电器(开关)和霍尔效应传感器之间存在很大差异。
首先,只要有足够的磁力作用在开关上,簧片继电器就会连接开关,从而为您提供开/关信号。霍尔效应传感器提供电压电平,该电压电平指示对其施加了多少磁力。
上面显示的代码只能“直接”与Reed继电器一起使用,这并不是说它根本不适用于霍尔效应传感器,而是使用霍尔效应传感器会带来其他挑战。
主要的挑战是将模拟设备视为数字设备-期望在脉冲上升时触发。现在,信号将不会被脉冲化-它通常像一个钟形曲线,带有各种波动。当磁体通过霍尔效应传感器时,您可能会多次跳过高电压的最小电压(大约3.5v,IIRC?)。
当然,使用诸如霍尔效应传感器之类的东西时,我们的第一个直觉是使用ADC并读取模拟引脚上的电压电平。但是,您最多只能在模拟引脚上每秒读取10,000次(每次读取需要100uS)。这还假设您所做的只是循环并读取值-不会给您留下太多时间来更新显示,计算等。更不用说,如果您在错误的时间阅读,则会错过信号!
我敢肯定有可能使用以某种方式链接到ADC的中断,但是我没有足够的知识。
相反,如果您希望使用实际的霍尔效应传感器,建议将其馈入施密特触发器,以将其转换为指示“直接在磁体下方”的校准水平的数字(开/关)信号。此外,根据施密特触发器中实现的磁滞水平,您可能需要进行一些反跳操作,这些操作会根据当前速度改变反跳速率。然后,您可以将其视为普通的Reed继电器。
!C
可以将磁铁安装在车轮轮辋的边缘,并将霍尔效应传感器安装在非常靠近(但不接触)磁铁的位置。当车轮旋转并且磁铁通过传感器时,传感器将拾取磁场中的变化。