僕が作ったマルチメーターにはタコメーター機能もあるわけだが、正直なところすべてネット上の偉い人のものをパクッ流用させてもらっている。さらには机上でエンジン回転のパルスをシミュレートできるようなものもないので、回路とプログラムだけ作ったらあとはぶっつけ本番みたいなもので、実際にスーパーカブに取り付けてみて動くか確認するという出たとこ勝負だったので、これといって皆さんにお伝えするノウハウがない。
なので、ここでは参考にさせていただいたサイトのご紹介と、僕のタコメーター部分のスケッチだけ掲載したいと思う。
参考サイト
スーパーカブのCDI信号をSeeeduino XIAOに引き込むまでの回路について。
参考サイトBlowin’Road 副会長の日常。(自作タコメーターのスケッチなど。)
https://blowinroad1992.seesaa.net/article/201911article_2.html
スケッチについてはこちら。
参考サイトAKIRACING.COM(【ARDUINO】スピードメータ,タコメーターの製作)
http://akiracing.com/2018/01/12/arduino_tachometer/
実際にスーパーカブに設置する時にはこちら。CDI信号の取り出し方。
スケッチ
上記のサイトのものをそっくり流用したものだが、一つだけ違っているのは2倍しているところである。スケッチ中の変数 cranklotate がその係数である。
これはスーパーカブのクランク軸が1回の点火で2回転するため。
#define TACHO_SIGNAL 0 // タコメーター、CDI信号入力用
// エンジン回転数計算用
volatile unsigned long tachoBefore = 0; //クランクセンサーの前回の反応時の時間
volatile unsigned long tachoAfter = 0; //クランクセンサーの今回の反応時の時間
volatile unsigned long tachoWidth = 0; //クランク一回転の時間 tachoAfter - tachoBefore
volatile float tachoRpm = 0; //エンジンの回転数[rpm]
volatile float cranklotate = 2.0; //1サイクルでのクランク軸回転数[回]
// ================================================================
void setup() {
// ピンモードを設定
pinMode(TACHO_SIGNAL, INPUT_PULLUP);
// 回転数計測用外部割り込み
attachInterrupt(0, tachometer, FALLING);
}
void loop() {
}
// -----------------------------
// CDI信号を取得する割り込み関数
// -----------------------------
void tachometer() {
tachoAfter = micros(); //現在の時刻を記録
tachoWidth = tachoAfter - tachoBefore; //前回と今回の時間の差を計算
tachoBefore = tachoAfter; //今回の値を前回の値に代入する
tachoRpm = 60000000.0 / tachoWidth * cranklotate; //タイヤの回転数[rpm]を計算
}
前述した通り丸パクリそっくり流用させてもらったので、なんとなくの理屈はわかるものの、詳しいことはちょっとわからない (笑)
ま、そんな感じでも強い気持ちがあればできるってことさ。
コメント
[…] ← Arduino互換機を使ったマルチメーターの制作〜その5〜タコメーター […]
[…] ← Arduino互換機を使ったマルチメーターの制作〜その5〜タコメーター […]