実測作業に入る前に
さて。今度は、実際に燃料噴射量をリアルタイムで表示させて走らせて見た。
前回のブログに書いていた値はインジェクター一本分になるので、二本=二倍にしておけばばっちりなはずである。
(試走の際は残りのセカンダリーインジェクターが噴射されないようにゆっくり走ればよい・・・はず)
もしコレをまねされる場合は、
走行中は絶対にノートPCの画面を見ないように。
きわめて危険なので。
私の場合は、今回助手席に友人を配し、リアルタイムに値を読んでもらうことにした。
まさに助手。
謎のINF
アイドリングをしてるときは大丈夫なのだが、走り出して信号で停車したところでINF(ムゲンダイ)になる値がでてくるという。(何の値だったかは忘れた・・・噴射量は数値としてでているとか)
原因は、噴射量が0になることがあり、その0で割っていたことが原因だった。
これはアクセルを離したとき(=エンジンブレーキ)、燃料噴射を停止する制御になっているからだ。一般的なインジェクター付きECU制御のクルマならば必ずそういった制御になっている。いわゆる燃料カットとよばれているものだ。
だから、信号で止まるときに値がおかしくなっていたようだ。
教訓:でてくる値が0になることも考えてプログラムを作ろう。
(単に噴射量だけだしていれば特に問題はないが、それを元に色々計算したのが遠因でもある)
※ちなみに
浮動小数点型と整数型だと0でわったときの挙動が違うらしい。
浮動小数点型は、言語にもよるがNanとかINFの値がでる。整数だと例外処理(プログラム停止)になるようだ。知らなかった。
wikipedia:ゼロ除算
謎のスーパー消費量
やっとこさまともな数値がでたので同じガソリンスタンドへ戻ってくる約10kmルート、満タン法で計測した燃料消費量と比べてみることにした。
満タン法:5.3km/L
Arduino;2.3km/L
私:「ヌワー!アメ車か!」
友:「誤差っていうレベルじゃねーぞ!」
何度も試走して、調査に時間がかかったが、どうやら
「Arduinoで計算させ、さらに直接シリアル通信で日本語の文字列を表示していること」が原因だった。
このときは、もっと色々表示してた気がする。 |
きわめて基本的なことだった・・・。
というのが、今回の計測方法だと、周波数(回転数)が上がれば上がるほど当然表示回数も増える。計算回数も増える。速度が追いつかなかったのだ。
(ちなみに、FD3Sのレッドゾーンは8000回転から。このとき許される時間はわずか0.0075秒。のんびりシリアル通信+日本語文字列ではとても間にあわない。もちろん、レッドゾーンまで回していたわけではなく、普通に2000~3000ではしっても間にあっていなかったのだが。)
横着はダメである。
なので、プログラム変更をした。
Arduinoはセンサーの値のみをそのままPCに送る役割に徹してもらう。、
燃料噴射量の計算と表示は、PC側(今回はProcessing)で行った。
(通信速度を上げるという作戦もあるが、そもそもこの作戦自体、あまりキレイじゃないので、こういう方法にした)
これで、どうでしょう。
ノートPCの余りある計算能力を使って、グラフまで描画! 素敵! 最初からこうしておけと。 |