回答:
Starlinerが提案したようにホール効果センサーを使用することは、ホイールと連動する1つの方法になります。リードスイッチを使用するというAchimとShutterdroneの提案は、ホール効果センサーがクリーンなデジタル信号を取得するために必要なサポートハードウェアを考えると、より理にかなっています。
壊れた自転車のコンピューターから磁石とセンサーを拾うことができるかもしれませんが、もしできなければ、地元のコンポーネントストアにはそれぞれ在庫が必要です。リサイクルされたセンサーと磁石の利点は、取り付け金具がすでにあることです。
ReadingRPMシグナルに関するページがarduino wikiにあります。速度を計算するには、RPM値にホイールの円周(2 * pi *半径[メートル])を掛けます。結果はメートル/分になります。
編集:リンクされたコードは、1回転あたり2パルスのシステム用であることに気付きました。1つの磁石で十分です。さらに、自転車のコンピューターでは、おそらく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」を有効にしました。これは、他のユーザーが編集できることを意味すると思います。私の数学が間違っている場合(そして、あなたはそれを証明することができます!)飛び込み、私のためにそれを修正します。:)
実際、Achimはここで非常に良い点を指摘しています。
リード(磁気)リレー(スイッチ)とホール効果センサーには大きな違いがあります。
主に、リードリレーは、十分な磁力が作用するたびにスイッチを接続し、オン/オフ信号を出します。ホール効果センサーは、印加される磁力の量を示す電圧レベルを提供します。
上記のコードは、リードリレーでのみ「直接」動作します。これは、ホール効果センサーではまったく機能しないということではなく、ホール効果センサーを使用すると追加の課題が発生します。
主な課題は、アナログデバイスをデジタルデバイスとして扱うことです。パルスの立ち上がりでトリガーされることを期待しています。これで、信号はパルス化されなくなります。一般的に、あらゆる種類の変動を伴うベル曲線のようになります。磁石がホール効果センサーを通過するときに、高信号の最小電圧(約3.5v、IIRC?)を数回通過する可能性があります。
もちろん、ホール効果センサーのようなものを使用するときの最初の本能は、ADCを使用してアナログピンの電圧レベルを読み取ることです。ただし、アナログピンでの読み取りはおおよそ1秒あたり10,000回に制限されています(各読み取りには100uSかかります)。また、ループと値の読み取りのみを行うことを前提としています。表示の更新や計算など、他の時間をあまり残さないでください。言うまでもなく、間違った時間に読むと、信号を見逃してしまいます。
どういうわけかADCにリンクされた割り込みを使用することは可能ですが、そのような知識はありません。
代わりに、実際のホール効果センサーを使用する場合は、シュミットトリガーに入力して、「磁石の真下」を示す較正レベルでデジタル(オン/オフ)信号に変換することをお勧めします。さらに、シュミットトリガーに実装されているヒステリシスのレベルに応じて、現在の速度に基づいてデバウンスのレートを変更するデバウンスを行う必要がある場合があります。その後、通常のリードリレーのように扱うことができます。
!c
磁石をホイールのリムの端に取り付け、ホール効果センサーを磁石に非常に近接して(ただし接触しないで)取り付けることができます。ホイールが回転し、磁石がセンサーを通過すると、センサーは磁場の変動を検出します。