スピードヒーラー故障 そして自作へ

余りにも暑いので諸々の作業停滞中・・。

嫁さんより通勤に使ってるバイクのメーターが0のまま動かなくなったと報告。ホイールを変えてあるのでハッピーメーターにならないよう、アイプロってとこが販売してるスピードヒーラーってのを使ってるんだけど、スピードヒーラーを外したらメーター表示する。よく確認するとLED点いてないし、どうやら壊れたのかなと。

購入時に「2年保証」って書いてあったのを思い出し、まだ1年しか使ってねーよなと思いながら履歴を調べたら保証期間内。サポートにメールにて連絡する。

が、取り付けに問題は無いかとか近くに電子機器が無いかとか車体を改造してないかとか、何度もメールで確認が入ってめんどくさい。

そして最終的に帰ってきたメールが、

修理に伴う交換部品の代金、往復送料(740円)のみお客様負担となります。予めご了承ください。

破損箇所別の負担料金(目安)は下記の通りです。


[1]配線破損

部品代金 4400

技術料        2000

点検料金    2000

メーカー保証 -4000

計 4400円

[2]本体破損

部品代金 7500

技術料  3000

点検料金  2000

メーカー保証 -5000

計 7500円


あぁ、そーいや2年保証とは書いてあったけど無償保証とは書いてなかったよな。そーかそーか・・・それにしても・・・高杉じゃね?

配線ってAWG28ぐらいの細ーい線、50cmも無いけど・・・4400円????本体破損で7500円って、それだったら新品買った方がええやん?

って事で何だかアホらしくなったんで自分でバラしてチェックしてみたら、VCCが途中でちぎれてた。

結線したらLEDは点灯するようになったが、やっぱりメーター表示は0のまま。オシロスコープでチェックしてみたら、入力パルスに対して出力パルスが出てない。

本来、スピードセンサーから入力されたセンサーが、スピードヒーラーに設定された比率で変換されてメーターに送られるわけだけど、それが出てないのでゼロのまま・・・と。

さすがにそれ以上解析する技術は持ち合わせてないので、自分での修理は諦めることにする。

だけど・・バラしちゃったからメーカー修理は無理だろうし、かといって新品を買い直すのはなんだか腹が立つ。っていうか、正直もう買いたくない。

なので自作することにした。

最近はじめたAruduinoで作れるだろう!と。作れるよね?うん。つか誰か作ってスケッチぐらい公開してくれてんじゃね?と思って国内外調べてみたけど、それらしき例は無かった・・。

さて考える。

配線自体は下記でOKなはず。


センサーは3線式で、VCCとGND、あとパルス。Arduino自体は5VなのでメーターからのVCCを降圧して入力。パルスを調べたら4.5Vで出力されていたので、昇圧する必要なくAruduinoからそのまま出力するだけでOKなはず。

元のホイールサイズが14インチ、それを17インチに変更してるんで比率は1.214。
なのでスピードセンサーから入力されたパルスを1.214倍にしてメーターへパルス出力すれば良いって事か。

で、現在は8パルスで1回転になってるので、x 1.214 =9.712、四捨五入して1回転で10パルス出力出来るようにしたら速度が是正されるはず。

・・・・色々と頭を捻って調べて書いたスケッチが下記。

const int sensorPin = 2; // センサーからのパルスを受け取るピン
const int outputPin = 3; // パルスを出力するピン
volatile int inputPulseCount = 0;
int pulsesPerRevolution = 8; // 1回転あたりの入力パルス数
float pulseRatio = 1.214;  // 新しいタイヤサイズの比率
float accumulatedPulse = 0; // 出力パルスの生成タイミング累積

void setup() {
  pinMode(sensorPin, INPUT);
  pinMode(outputPin, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(sensorPin), countPulse, RISING);
  Serial.begin(9600);
}

void loop() {
}

void countPulse() {
  inputPulseCount++;
  Serial.println("1");

  accumulatedPulse += pulseRatio;

  // 出力パルスを生成
  while (accumulatedPulse >= 1.0) {
    digitalWrite(outputPin, HIGH);
    digitalWrite(outputPin, LOW);
    accumulatedPulse -= 1.0;
    Serial.println("2");
  }

  // 1回転が完了したらカウントをリセット
  if (inputPulseCount >= pulsesPerRevolution) {
    inputPulseCount = 0;
    accumulatedPulse = 0; 
  }
}

loopで処理すると遅延しそうなので割り込み処理。
入力パルスを1、出力パルスを2としてデバッグ出力するようにしたので、
Aruduino Unoにタクトスイッチを乗せて、パルス入力の代わりにしてテスト。

比率を1にすると1212121212121212・・と出力され、
比率を1.5にしたら121212212121221212・・ってな感じでちゃんと補完出力されてるので大丈夫そう。
ちなみに0.5にしたら112112112112 と間引かれてるのでホイールが小さくなる場合も問題なし。

とりあえず・・・あとは実車でテストするだけかな。
暑いので全くやる気にならないけど・・・。



コメント