うちの回転数計

現在鋭意製作中(ここ数ヶ月くらいずっと)の回転数計のお話。

<表示側>

はじめは、回転数表示媒体にサーボモーターを使用して、タコメーター風にしようとしていたんですが、追従性が悪かったりとか(※1)

なぜか線形的に動かなかったりと問題が多く(※2)、結局却下して来ました。

で、結局、LEDアレイを使用した回転数計に。LEDは40連なので(増やせますが)、とりあえず0〜200回転割り当ててます。

<センサー側>

センサー側は、自転車のケイデンスと同様の原理で、ホール素子+ネオジウム使用。ホール素子はデジタルICなので、磁気が近づけばHi、遠ざかればLoが出力。

Arduino側にはHiとLoが切り替わった瞬間割り込みが入るようにしてあり、その値から分速を計算。周期的にカウンタ回数をリセットといういたってオーソドックスな感じです

 

試作は終了して、OBに協力してもらってLED表示関数はライブラリ化済み。しかし、どうやら5のつくとこの表示が調子悪いと。

具体的には、デバッグ用に表示してるシリアルでてる回転数とエルゴメーターの回転数が一致しない。10回転前後ずれるのはまあいいとして

追従しないときは30回転くらいずれることも。特に低速側で取りこぼしが多い…。

 

予想される問題として

1:センサーの読み込み精度

2:Arduino内の演算処理が悪い

3:Arduinoが追いついてない

というものが考えられます。

1については、初めネオジウム8個でスタートしたんですが、どうやら拾いきれていない空気だったので、ネオジウム1個に変更してます。

カウンタは1000msでリセットかかるので、低速側だとカウンタが十分に回りきっていない可能性が。

2:内部演算ですが、LEDに表示する直前がint型でとってあり、ここで取りこぼしている可能性が。というか、書いていてたぶんそれじゃねえかと思ってきた…

3:演算処理

これも結構大きいです。というのも100回転周辺で誤差がコンスタントに10くらい出ることや

70回転周辺でいきなり回転数ががくっと下がる、デバッグ見てても明らかに拾えてない感がある。Arduinoの限界も大きいかもしれないです。

回転数は別途ログ取りArduinoに投げようと思っているのですが、現状だと難しいかもしれないですね。処理時間的に。

これに関しては適度なdelayを入れると調子良くなりますが、計器なのであまりdelay使いたくないんですよ。

 

対策:テストが落ち着いたら上記項目を対策。ダメそうなら回転数がシリアルか何かで出てる既成品探す。あと、STM32かPICに乗り換えると。

この夏も楽しくなりそうです。GPSも買いたいし…。

 

 

※1サーボの可動範囲を狭めて、可動範囲を拡大する機構を考えれば良いかもしれないですが、いかんせん面倒くさかったんです。

※2恐らく文字盤とサーボの固定精度の問題と、Arduino側の演算が間に合ってない問題が見事に絡まっていたのだと思われます。