Go to NoobowSystems Lab. Home

Go to Kits and Gadgets page

EZPulse Interface Unit
"EZPulse"
Vehicle Speed Logging System



コンセプト

エコノパワー燃費競技

    1リットルの燃料でどれだけ走れるか・・・要するに燃費が全てのモータースポーツがあります。 ホンダが主催しているエコノパワー燃費競技大会はまさにそれ。 主催者規定のレギュレーションのもと、参加者は各自工夫を凝らした自作車両でレースに挑みます。 極力エンジンパワーを使わず、速度を競わず、マシンが壊れないことを祈りながら一年に一度のサーキットを走ります。

    この競技では実際に1リットルの燃料を使って走るわけではありません。 上位入賞車は1リットルあたりの走行可能距離は1000kmをはるかに超えますから、 実際にその距離を走ったら少なくとも40時間はかかってしまいます。 そこで実際の競技では、ガラス製の小さな燃料タンクと燃料が支給され、所定の距離を所定の時間以内に走り、 走行後の燃料の減り具合を厳密に測定します。もちろん、いちばん減っていないチームの勝ち。

    ホンダ エコノパワー燃費競技ではホンダ製のオートバイ用50ccエンジンをベースに、参加者が車両を製作します。 なにしろ燃費を向上させるのが目的ですから、空気抵抗やタイヤの転がり抵抗の低減は真っ先に上げられる課題です。 理論的には車重はスタート加速だけにしか影響しないはずなのですが、それでも各チームとも最大限の軽量化の工夫をします。 さらに一番重要なエンジンは、上位チームともなると原型をとどめないほどにモディファイされます。 レーシングエンジンでは猛烈な発熱に耐えるよう冷却装置を強化しますが、 エコノパワー競技の場合はあまりにも燃料を使わないためにエンジンが冷えすぎてしまいがちです。 このため、グラスウールなどでエンジンを保温する必要もあります。 スパークプラグを2本もつツインプラグ化はほんの序の口、 マイクロコンピュータ式点火制御や電子制御燃料噴射も珍しくはありません。 こうなると、ソーラーカーレースほどではないにせよ、車両開発にはそれなりの資金力も必要となります。

    一方このレースにはスピードは求められないので、 ポンコツ置き場から拾ってきたエンジンと廃物利用でお金をかけずに車両を製作し参加し楽しむこともできます。 それぞれのチームがマイペースで楽しめるのがエコノパワー競技の魅力の一つ。



走行パターンの重要性

    ガソリン エンジンでは、出力制御はスロットル バルブによって行われます。 スロットル全開のときエンジンはフルパワーとなり、ポンピング ロスが最低となって運転効率は良くなります。 中低速で一定速度で走行するときはスロットルがあまり開いていないためにポンピング ロスは増加してしまいます。 したがって、効率よくエンジンを運転するためにはなるべくスロットル全開がよい、ということになります。 (ディーゼル エンジンではスロットルがなく、常時全開状態です。 これがディーゼルエンジンの効率のよさの理由の一つです。)
    しかし全開フルパワーのままでは、車速が上がりすぎてこれまた走行抵抗が増大してしまいます。 そこでエコノパワー燃費競技では、エンジンを始動したらフルパワーで加速し、速度がある程度に達したらエンジンを停止し、 惰性で走らせるとよい、ということになります。
    ほとんどの参加車両がこの運転パターンで走行します。 燃料は極力薄くしながらも確実なエンジン始動が求められるし、 エンジンを停止するときにはエンジンブレーキでスピードが殺されないように絶妙のタイミングでクラッチを切る必要があります。 エンジンパワーをロスなく駆動輪に伝達するトランスミッションも必要だし、慣性走行時には完全に駆動系から駆動輪を切り離します。 自転車後輪のフリーホイール機構とチェーン駆動を流用すれば簡単ですが、 フリーホイール空転時の抵抗は無視するには大きすぎるので、お気軽参加チーム以外には使われません。

    こうした工夫が完成すると次の質問は、走行パターンをどうするかということになります。 何km/hに達したらエンジンを止めて慣性走行(コースティング)に移行するべきか? 何km/hまで車速が落ちたらエンジンを始動し再加速すべきか? この判断は、その車両とエンジンの特性、ギア比それにコースの起伏が非常に重要になってきます。
    あまりに燃料を薄くしたため低速トルクが不足しているなら、車速を落としすぎると再加速の効率が悪くなります。 高回転での効率が悪いエンジンだったり空気抵抗が大きめの車両では速度の上げすぎは不利です。 エンジン始動速度とエンジン停止速度の差を少なくすると、再始動回数が増えてしまい、始動・停止に伴う燃料の無駄が無視できません。 さらに、慣性走行状態で上り坂にさしかかったなら、ちょうど登り終えたころにほぼ車速ゼロとなるようにするのが望ましいといえます。 頂上である程度速度が残ったままだと下り坂でスピードがつきすぎ、 さしかかったコーナーを曲がりきれなくなったり、あるいはやむを得ずブレーキをかける・・・ 燃費競技においては悪夢・・・必要も出てしまいます。

    さらに大会本番では、最終ラップの後半でのエンジン再始動をおこなうべきかどうか、というリアルタイムの判断が求められます。 今の速度で慣性だけでゴールにたどり着けるか? たどり着けたとしてもスピードが遅すぎてタイムオーバーになりはしないか? エンジン再始動が必要である場合、何km/hまで加速しておけばゴールにたどり着けるか? コクピットとサイン エリアおよびピット間の無線通信がもっとも緊張する瞬間です。



データ ロガーの必要性

    最適な走行パターンの研究、車輪のアライメントやフェアリング改良による空走距離あるいは速度低下傾向の把握、 コースの勾配の影響、さらに加速性能の調査比較のために、 車両のスピードとエンジン回転数を記録する装置があれば便利です。 私が参加しているチームでは基本的な車両開発が完了して資金が尽きかけてしまったため (+日本経済の後退に伴い)、あとはお金のかからない工夫でなんとか改善する必要がでてきました。 そこで、ローコストでデータ ロガーを作ってみようということになりました。 こうなると、「 ゴミ捨て場から夢と価値を 」がセールスコピーであるNoobowSystems Lab.の出番です。

データ ロガーのコンセプト

    というわけで、お金をかけずに精密な車速とエンジン回転の記録・解析ができるシステムを考えてみましょう。 お金をかけないばかりでなく、努力と勉強さえすれば誰でもできるシステムをめざします。

    小型・軽量で、安価で、どこでも手に入るデータ記録・再生装置といえば・・・テープレコーダー!! つまり、 車速やエンジン回転をなんらかの方法で音の情報に変え、録音すればよい のです。

    マイクロカセットレコーダーなら胸ポケットにも入るくらい小さいし、 中学生の頃はすごく欲しかったのに高くて買えませんでしたがいまではほんの数千円で買えます。 さらに今ではミニディスク レコーダもあります。 数千円では買えないけれど、小型・軽量で音質もよく、テープレコーダでは避けられないワウフラッタが皆無。 消去や頭出しもワンタッチで便利。 さらにステレオ録音再生ができますから、車速とエンジン回転情報をステレオの左右の信号として同時に記録することができます。

    車速センサとクランク角センサの信号をオーディオ信号に変換するため、ミニディスク レコーダにつなぐためのインターフェイス ユニットを作る必要があります。 これは簡単にできそう。

    走行データを「録音」し終えたら、次は音を分析して車速やエンジン回転数に換算する必要があります。 これは以前ならとてもアマチュアができることではありませんでしたが、 今やパーソナル・コンピュータにはオーディオ インターフェイス付きがあたりまえ。 MDの音をいったんコンピュータに取り込んでファイル化し、それを分析するプログラムを書けばよいのです。 Windows(TM)に付属しているサウンド レコーダ アプレットを使えば、音をWAVファイルとして保存できます。

    WAVファイルは非圧縮オーディオで、音声信号のレベルが数値で表されたデータがひたすら並ぶだけのシンプルな形式ですから、 これを読み出して分析するプログラムを書けばいいでしょう。 最低機能としてたとえば1秒ごとの車速とエンジン回転数(に相当する数値)をカンマ区切りテキストファイルに出力できれば、 あとは手持ちの表計算プログラムでグラフ化したりできるでしょう。



パルス オーディオ インターフェイス ユニット

インターフェイスの検討

    車速センサとクランク角センサの信号をオーディオ信号に変換し、 ミニディスク レコーダにつなぐためのインターフェイス ユニットはどのようなものであるべきか検討してみます。

車両速度検出

    車両速度を検出する装置として、今回対象となる2台の競技車両、 EZ-1Rおよび EZ-2には、自転車用多機能スピードメータが装備されています。 後輪に配置されたセンサが後輪1回転につき1発の信号を発生し、コクピットのメータが車速や走行距離を表示します。 センサを調べたところ、これは電磁ピックアップではなく、単なるリードスイッチであることがわかりました。 スピードメータから内蔵電池による3Vの電圧が印加されており、 スポークに取り付けられた磁石がセンサの近くにくるとスイッチが導通する仕組みです。

    ここから信号を直接取り出した場合、 インターフェイスの入力インピーダンスが低いとスピードメータの内蔵電池の消耗を早めてしまう恐れがあります。 またインターフェイス側から電圧を与えてしまうとスピードメータの誤動作も考えられます。 もちろんアイソレーション アンプを用意すればすむ話ですが、手っ取り早くてより安心な方法として、 同じセンサを計測記録系専用としてもうひとつ後輪に取り付けることにしました。 以降、このセンサのことを車速センサと呼びます。

    新たに追加するセンサは自転車メータ用のスペアパーツとして自転車店で買うことができます。 または、リードスイッチ単体を100円かそこらで秋葉原などの電子部品ショップで買い、 ビニール線をつないでおいてボールペンの軸の中に収め、接着剤で固定してしまえばできあがり。 ホイール側に取り付ける磁石も100円ショップで買えるでしょう。部品代は300円もあればOKです。

    つぎに車速センサのON-OFFの状態をオーディオ信号としてミニディスク レコーダに録音するわけですが、 これは原理的には簡単・・・低周波発振器をこしらえて、スイッチが導通している間だけピー音を出すようにすればよいわけです。

    ホイールが1回転するたびに磁石がリード スイッチをONし、そのつどピッという音が録音できます。 あとでこの音を再生し、ピッという音の間隔を調べればスピードがわかるし、 ピッという音の回数にタイヤの外周長を掛け算すれば走行距離がわかります。

機関回転数検出

    EZ-1R/EZ-2とも、エンジン点火タイミングは専用開発の電子制御ユニット(ECU)によって制御されています。 ECUにはエンジン回転数表示用のアナログ電圧出力があります。 これは1000rpmあたり1Vの出力を持ち、電圧計を接続することによってエンジン回転数を表示することができます。 この電圧を何らかの形で、たとえばV-Fコンバータを作って音声信号にし録音することも考えられます。 しかしこの電圧はECU側である程度細工されている (表示が安定するようにソフトウェアフィルタをかけた上でD/A変換し出力するなど) ので、精密なエンジン回転測定はできません。

    いっぽうエンジンにはクランク角センサがあり、 ECUはエンジンが1回転する間の回転数変動を考慮したきめ細かな点火制御を行っています。 クランク角センサは電磁ピックアップであり、 クランクシャフトに取り付けられたパルサー ロータの歯がピックアップのそばを通過するたびに正負ペアのパルスを発生します。

    このクランク角センサはホンダ純正パーツを流用しており、 EZ-2で調べたところ、センサの出力はパルスの尖頭値で10Vp-pを越えます。 また基本周波数は数kHzのオーダであり、当然エンジン回転数に応じて変動します。 パルス波形は極端に尖っているわけではなく、波形的にはそのままオーディオ録音機器に入れることができそうです。 この波形をそのまま録音すれば、エンジンが1回転する間の回転ムラまでも含めた精密な測定が可能になるはずです。

    したがって用意するべきは、 20Vp-p近いクランク角センサ出力電圧をオーディオ機器のラインレベル(約1Vp-p) に落とすアッテネータと簡単なフィルタだけでいいはずです。

回路構成と基板実装

    以上のことから、パルス オーディオ インターフェイス ユニットの要求仕様は以下の通りとなります。

  • 低周波発振回路。その出力は、車速センサでON-OFFされる。
  • クランク角センサの信号をラインレベルまで落とすためのアッテネータ。
  • 2つの信号はステレオ音声の左右チャネルとして出力され、ミニディスク レコーダのライン入力に接続される。
  • 小型・軽量・低消費電力・低コスト・高信頼性・短納期。

    パルス オーディオ インターフェイス ユニットの回路構成と実装は、 つまるところ手持ちの部品だけで手っ取り早く仕上げられるように決定されました。 低周波発振回路には入門電子工作の定番 NE555 タイマーIC を使用し、アステーブル動作させて矩形波を発生させたのちCRで三角波にしています。 電源電圧安定化回路は持っていません。 仕様上の最大電源電圧はDC15Vであり、車載のDC12Vか9V積層電池を使用します。 気休めの逆接続保護ダイオードを内蔵しています。大して意味はないLEDは、電源インジケータと発振回路出力インジケータです。

    発振器の出力はオドメータ スイッチで直接断続されます。 NE555のリセット端子をスイッチで制御する方法もありますが、 この方法だと信号はほとんどの間出たままで、 スイッチの近くをマグネットが通過する一瞬だけ音が途切れることになります。 実用上これは好ましくないと考えられました。 反転用トランジスタを組み込むくらいなら出力を直接スイッチングしてもいいだろうと考えたわけです。

    基板上には低周波発振回路のほか、クランク角センサ信号用の簡単なアッテネータとフィルタが用意されています。 減衰量はおおよそ26分の1。レベル調整用のトリマを持ちます。

    使用した部品はすべてラボのストック パーツであり新品です。 単品で指定購入したものはNE555とソケットだけ( Dan's Small Parts で購入)で、他はすべて Halted Specialities やHaltek Electronics、RA Enterprises のスペシャル セールでのグラブ バッグ、Dan's Small Partsのグラブ バッグ、 サンタクルーズ アマチュア無線クラブ定例ミーティングでのジャンク スワップなどで入手したものを使用しています。 基板取り付け用のペテット(商品名)は勤務先の廃却ジャンクパーツからのサルベージです。

性能測定: 低周波発振回路 (オドメータ インターフェイス部)

    低周波発振回路の出力は三角波です。 オシロスコープの観測から、三角波の頂点で極めてシャープなスパイクが発生していることがわかります。 が、これは実用上問題はないでしょう。

    発振周波数は基板上の調整トリマにより約370Hzから10kHzまで可変することができます。 出力振幅は発振周波数により変化し、周波数を上げると出力振幅は低下します。 電源投入直後の数100mSecの間は、発振周波数はわずかに変動します。 このため、オドメータ スイッチで発振回路の電源ON-OFFを行った場合は明らかなチャープを伴うでしょう。 出力信号をスイッチで断続する場合は、出力周波数は安定しています。

    電源電圧12Vで出力周波数を2.4kHzに調整したとき、出力レベルはおよそ0.7Vp-pです。 この信号を通常の入力レベルに設定した手元のテープデッキに入力した場合、 レベルメータは-10dBを示しました。録音機器側が過大入力になる可能性はありません。 使用予定のミニディスク レコーダのライン入力に接続した場合、録音レベル15(30が最大) で問題なく録音・再生できました。
Waveform - Click here for larger image

発振回路出力信号波形
HP-1200A を使用。
    発振回路出力信号をNoobow9000コンピュータに入力し、 WaveSpectra を使ってスペクトルを見てみます。 正弦波ではないので、基本周波数2.4kHzのほかに高調波のスペクトルが見られます。

    ミニディスク レコーダで録音し再生した信号は元信号に忠実であり、問題は見られませんでした。

    低周波発振回路は大して意味のないLEDのためもあり、40mA程度を消費します。
Spectrum : Click here for larger image
性能測定: アッテネータ・フィルタ (クランク角センサ インターフェイス部)

    クランク角センサは電磁ピックアップであり、その出力電圧は10Vp-pを越えます。 この信号をシミュレートするために、 NF回路ブロック社製モデル1915ファンクション シンセサイザの壊れかけ品を使用しました (バックアップ用電池が死にかけているためか、電源を入れてもマイクロコントローラが誤動作していると見えてなかなか起動できません)。
    シンセサイザの出力を20Vp-pにセットし、数100Hzから10kHz程度の三角波をインターフェイス ユニットに注入します。 オーディオ出力は歪むことのない0.7Vp-p程度で、これならミニディスク レコーダで直接波形を記録できるでしょう。

筐体実装

    休日出勤してデバッグしている間にヨメが適当なサイズのタッパウェア (というのは元祖メーカーの商品名なのでそれに類似した食品保管用ポリプロピレンケースというのが正解) を買ってきてくれました。3個入り100円でした。これに基板と電池を組み込みます。 いまはやりのスケルトン デザインです・・・・(T_T)

    設置場所はキャビン内、シートの下あたりです。 キャビン内とはいえ、雨天時のレースではキャビン内への雨の侵入は十分ありますから、防滴性能は必要です。 電源スイッチを入れると内部の緑色LEDが光るのが見えます。
    車両の12V電源は使わず、内蔵9V電池を使うことにしました。 車両のバッテリーからとる場合は、過電圧・逆接続・バッテリーダンプサージ・ ロードダンプサージなどに対する保護対策を考える必要があります。 対策しておかないと、どういうわけか決勝スタート10分前に故障しますよ。

    内蔵電池にすればなにも心配はいりません。 スイッチを切り忘れたりしない限り、電池は1シーズン持ちます。

    いちおう保守性を考え、基板と外部端子の間はヘッダーコネクタを使用しています。
    オドメータ スイッチとクランク角センサとの接続端子には、Φ3.5mmのモノラル ジャックを使いました。 両者は隣り合わせに配置しましたが、よく考えたらオドメータ スイッチ用ジャックのスリーブはコモン グラウンドではないので、 スリーブ同士を接触させないように注意しなくてはなりません。 オーディオ出力はΦ3.5mmステレオ ジャック。電源ON-OFF用のトグル スイッチを取り付けました。

    完成したインターフェイス ユニットはいかにもシロート電子工作のニオイがプンプンします。
車速とエンジン回転を録音してみる

    完成したパルス・オーディオ インターフェイス ユニットを使って、 EZ-2実車でのテストを行いました(June 10, 2000)。 車速スイッチは今まで使っていた自転車用スピードメータ用のものそのまま (ただしスペア用の新品)を使用、 クランク角ピックアップ信号は点火制御コントロール・ユニット内部のコネクタピンから取り出しました。 それぞれのセンサをインターフェイス ユニットにつなぎ、 またインターフェイス ユニットのオーディオ出力をミニディスク レコーダのライン入力端子にステレオ ミニプラグ コードでつなぎます。

    実車エンジンのクランク角センサ信号でインターフェイス ユニットを試すのはこれが初めてです。 車両製作を行っているガレージは我がラボから高速道路で1時間離れているところにあるので、 なにかトラブルがあると機材が不足している現地での修正は大変ですが、 幸いにアッテネータの減衰量はちょうど良いもので、歪みなくミニディスクに録音することができました。 ファンクション シンセサイザを使ったシミュレーションのおかげです。

    録音したオーディオ信号の一部をここに示します。 テストは実際に車両を走らせたわけではなく、車輪は空転状態。 エンジン回転にしたがい急速に加速しています。
    このファイルはサイズの関係でMP3フォーマットです。MP3エンコーダの元祖BladeEncでエンコードしたものです。

オーディオ記録サンプル:MP3:128kbps 44kHz stereo :10秒 :157KB

    ミニディスクを再生して得られたクランク角センサの信号をオシロスコープで観測してみました。 信号のレベルは回転数で大きく変動します。 また、ときおり大きなピークの波形が見えますが、これは上死点センサの出力(クランク1回転で1パルス)が重畳しているためです。 が、波形自身はさほど歪みなく記録再生できており、 ゼロクロスを数えれば回転数を求められるので問題はないでしょう。

    使用したミニディスク レコーダにはマニュアル録音レベル調整があり、今回は最大30のうちレベル20で録音しました。 が、実際にはレベルをもう少し上げたほうがよさそうです。 ともあれ、インターフェイス ユニットは構想どおり動作してくれました。 チーム監督に「おい、うまくできたぜ。調子いいぞ」といったら、 「さすがぁ! それじゃさっそくもう一台作ってくれ。ウチにはマシンが2台あることを忘れちゃいないよな?」
    ああ、来週の週末もこれで潰れた。
Crank Sensor Playback Waveform - Click here to watch movie!

クランク角センサ再生波形ムーピー : 17秒 : 384KB

再生したオーディオ信号をWAVファイル化する


    テスト走行が完了したら、ミニディスク レコーダとコンピュータをつなぎ、MDを再生してWAVファイルに記録します。 これはWindows(TM)付属のサウンド レコーダ アプレットでも可能です。 WAVファイルは非圧縮オーディオなのでファイルサイズはたちまち大きくなってしまいますが、 最近のコンピュータはどれも大容量のハードディスクを持っていますから支障はないでしょう。

    我々のチームでは、サウンド レコーダ アプレットではなく、より高度な機能を持つ2つのプログラムを使用しました。 ひとつは Syntrillium社のCoolEdit2000 (*1) です。 これは非常に強力な表示・編集・加工機能を持ったオーディオ・エディタであり、高速なMP3エンコーディング機能も持っています。 一度録音したWAVファイルから不要部分を切り取ったり、分割・結合したり、録音レベルを補正したりが自由自在。

    左のスクリーン ショットでは、上側に車速パルスの波形、下側にクランク角センサの波形が見えています (エンジンを始動したあと2回ほどアクセルをあおり、エンジンを止めています)。

    オーディオ信号をWAVファイル化するとき、CDオーディオのような音質は必要ではありません。 ファイルサイズを小さくするため、 WAVファイル化するときは8ビット サンプリング、サンプル レート22.05kHzのステレオ音声として記録することにしました。 CD品質のとき(16ビット サンプリング、サンプル レート44.1kHz) にくらべ、ファイルサイズが4分の1で済みます。

*1:    CoolEdit2000は製品自体Adobeに買われてしまって、今はAdobe Auditionという製品になっています。 機能が増えてより強力になりましたが、Adobeの他の製品と同様に、値段も吊り上ってしまいました。
    もうひとつ使用したのは WaveSpecta 。もともとはオーディオ用FFTアナライザですが、柔軟な録音機能も持ちます。 プログラムが小さく扱いやすいのも美点。

    左のスクリーン ショットでは、車速センサの波形の拡大が見えています。 ホイールの磁石がセンサの脇を通過する時だけリード スイッチがONし、発振器のピー音が聞こえます。 それ以外のときは無音状態です。

    インターフェイス ユニットの発振器のピー音は、 車速センサのリード スイッチが切れている時も実はごくわずかに聞こえています。 これは、リード スイッチまでの配線の浮遊容量によるリークでしょう。 実際に使ってみると、発振器が正常動作していて配線も正常であることがこのかすかなピー音で確認できますので、 実用上たいへん好都合です。

    さあこれで、車速もエンジン回転の情報もWAVファイルの中に「録音」されました。 つぎはこのWAVファイルをデータ解析し、車速とエンジン回転の情報を取り出すプログラムを作成します。


車速とエンジン回転数データへの変換

Windows WAVファイルフォーマットの調査

    録音したWAVファイルから車速およびエンジン回転情報を取り出すために、まずはWAVファイルのフォーマットを調査しましょう。
    Microsoft Windows WAVファイルは、RIFF (Resource Interchange File Format) と呼ばれるマイクロソフト社が規定したファイルフォーマットのひとつであり、 非圧縮のデジタルオーディオ記録用ファイルフォーマットです。 このファイルには、オーディオ信号レベルを単純にデジタル値に変換した値がずらりと並んでいます。
    WAVファイルの構造は以下のようになっています。 (ちょこっと解析しただけなので間違いがあるかもしれません。鵜呑みにしないように。)
RIFFヘッダ

    ファイルの先頭4バイトには、RIFFファイルフォーマットであることを示すシグネチャが格納されます。 シグネチャは"RIFF"です。 つづく4バイトは、このRIFFファイルに含まれるデータ チャンクのサイズです。 これにデータ チャンク本体(WAVEフォーム チャンク)がつづきます。

Byte Offset
Name
Length (Bytes)
Description
00h
rID
4h
RIFFファイルであることを示すシグネチャ。
"RIFF"の4文字。
04h
rLen
4h
データ チャンクのサイズを示します。
08h
rData
可変長
WAVEフォーム チャンクの実体。

WAVEフォーム チャンク

    WAVEフォーム チャンクは、さらに以下のチャンクから成り立っています。

rData Byte Offset
Name
Length (Bytes)
Description
00h
wID
4h
WAVフォーム チャンクであることを示すシグネチャ。 "WAVE"の4文字。
04h
Format Chunk
14h
フォーマット チャンク。
このデータのエンコーティング方法を示しています。
18h
WAVE Data Chunk
可変長
波形データ チャンク。

フォーマット チャンク

    フォーマット チャンクには、このデータのエンコーティング方法を示す情報が格納されています。

Format Chunk Offset
Name
Length (Bytes)
Description
00h
fId
4h
フォーマット チャンクであることを示すシグネチャ。 "fmt "の4文字。
04h
fLen
4h
データ長。
????
08h
wFormatTag
2h
エンコーディング方法を示します。
1 : 非圧縮エンコーティング
0Ah
nChannels
2h
録音チャネルの数。
1=モノラル 2=ステレオ
0Ch
sSamplesPerSec
2h
再生周波数。
1秒あたりのサンプリング レートを示します。
0Eh
nAvgBytesPerSec
2h
再生システムが1秒間に転送しなければならないデータ量(バイト数)を示します。
WaveSpectraが作成したWAVファイルでは、このフィールドの内容はゼロになっています。
10h
nBlockAlign
2h

12h
FprmatSpecific
2h
フォーマットに固有のデータ域。

波形データ チャンク

    波形データは実際のオーディオ信号波形を含んでいます。
    8ビットモノラルであれば、各バイトがひとつのサンプリングデータを示します。 8ビットステレオであれば最初の1バイトが左チャネル、次の1バイトが右チャネルで、この2バイトで1つのサンプリングを示します。 16ビットステレオであれば、最初の2バイトが左チャネル、次の2バイトが右チャネルで、この4バイトで1つのサンプリングを示しています。

車速パルス検出プログラムを書く

    WAVファイルを読み込んで、車速とエンジン回転数データを出力するプログラムを作成しましょう。 今回はプログラムはANSI Cで書きました。 OS依存部をほぼ持たないので、 Cをサポートしている32ビットの処理系であればどんなコンピュータでも - パソコンからスーパーコンピュータまで - 動作します。 一方、ユーザインターフェイスは単純なコマンドライン型としました。 Windowsコンピュータであれば、コマンド プロンプトを用いて起動します。 元気があればGUIアプリケーションにしたいところなのですが、 この程度の簡単なプログラムにわざわざGUIを持たせるのは時間の無駄遣いだと思います。

    さて、生波形から車速とエンジン回転情報を得るために、 2つの波形解析ルーチンを書く必要があります。 ひとつめは車速用で、単位時間内に出現した2.5kHz(インターフェイス ユニットの発振周波数)のバーストの回数を数えなくてはなりません。 ふたつめはエンジン回転数用で、クランク角センサ信号の単位時間あたりのゼロクロスの回数を数えなくてはなりません。

    まずはプロト版のプログラムを書き、試してみます。 左チャネル音声信号の生波形から車速パルスを検出して、 パルスとパルスの時間間隔を求める機能を作成しました。 結果をテキスト ファイルに出力し、スプレッドシート ソフトウェアでグラフ化したものを右に示します。 想像以上に高精度で結果が得られています。ここでは後輪の直径を70cmと仮定して車速を求めました。
Spreadsheet Analysis : Click here for larger image


    車速変化のグラフ。 約7分間のデータが描かれています。 最初の2分間はエンジン回転を上げて、それにつられて後輪の回転数も変化しています。 そののちエンジンを切り、空転する後輪の回転数が徐々に低下していくのが読めます。
Vehicle Speed Trend : Click here for larger image
    最初の10秒間の拡大。 パルスとパルスとの時間間隔から車速を求めているので、 0.1km/h以下の精度の車速データが1秒間のうちに6回程度以上の頻度で得られています。

    以上の結果より、車速は0.5秒毎に出力することが可能でしょう。 上記テストでは各パルスごとに車速を得ていますが、これほどのデータ量は不必要でしょうから、 ある0.5秒の間に検出された車速の平均値を求めるように変更すればいいわけです。
10seconds zoom : Click here for larger image

クランク角センサのゼロクロス検出

    クランク角センサは、単純なゼロクロスではうまく検出できない場合があることがわかりました。 特に高回転域で波形のオフセットがときおり変動することがあり、ゼロを横切らないケースがあるのです。 また始動直前の低回転域では、信号がない場合のデータがかならずしもゼロに近くない場合もあります。 そこで、生波形データに対して1回微分、つまり前回のデータとの差を求めて、 それがある程度以上の大きさである程度以上連続している場合にパルス判定をするようにしました。 ようするに立ち上がりACトリガをかけているようなものです。 極低速ではもうすこし改善の余地がありますが、とりあえずは実用的なセッティングが見つかりました。

    スプレッドシートに読み込んだエンジン回転データを左に示します。 0.1秒の間に検出されたクランク角パルスの数を数えています。パルサー・ロータの歯の数を18本として計算してみました。

    エンジン回転数変化のグラフ。約7分間のデータが描かれています。 最初の2分間だけエンジンが運転されており、そののちエンジンは停止しています。
Vehicle Speed Trend : Click here for larger image
    最初の30秒間の拡大。エンジンを始動し、レーシングしています。
30seconds zoom : Click here for larger image
    4秒から6秒までの2秒間の拡大。計算したエンジン回転数はばらつきなく0.1秒ごとに求まっています。
2seconds zoom : Click here for larger image
    62秒から64秒までの2秒間の拡大。エンジン始動して高回転に達するまでの回転数変化が読めます。
2seconds zoom : Click here for larger image

エンジン回転と車速のオーバーレイ プロット

    エンジン回転数と車速の時間的変化を同一グラフにプロットしてみました。なかなかいい具合でグラフ化できています。
Overlay plot of engine speed and vehicle speed : Click here for larger image
    グラフの最初の30秒間の拡大。
30seconds zoom : Click here for larger image
出力フォーマット、ファイルの自動分割と出力ファイル名の仕様

    WAVファイル解析プログラムが出力するファイルのフォーマットは、 表計算プログラムで読み込みやすく、かつ取り扱いが容易なように、以下のような仕様としました。

    出力ファイルはフィールド長固定のテキストファイルであり、1行が1つのデータを示します。
出力データ ファイル
オドメータ 解析結果データ
エンジン回転 解析結果データ
出力の例
000006 006634
000008 006932
000010 006947
000012 006974
000014 006990
000016 007005
000018 007018
000020 007049
000005 000035
000006 000038
000007 000037
000008 000036
000009 000038
000010 000036
000011 000033
000012 000036
出力データ時間間隔
0.2秒ごとに出力
0.1秒ごとに出力
第1フィールドの数値の意味
各行の最初の8桁の数字は、計測開始からの経過時間を示す。
単位は0.1秒。
つまり000020は2.0秒経過を表す。
各行の最初の8桁の数字は、計測開始からの経過時間を示す。
単位は0.1秒。
つまり000020は2.0秒経過を表す。
第2フィールドの数値の意味
各行の後半の8桁の数字は、その時点で最後に観測されたオドメータパルスとそのひとつ前のオドメータパルスとの時間間隔を表す。
単位はサンプル毎秒。これはオリジナルのWAVファイルのサンプリング レートに依存する。
各行の後半の8桁の数字は、0.1秒の間に検出されたクランク角センサのパルスの数を表す。

    オドメータ解析データは0.2秒ごとに出力するものとしますが、 車速が低い場合は0.2秒の間に1回もオドメータ パルスが検出されない場合があります。 この場合は、前回の数値をそのまま出力します。
    もし3秒間にわたってオドメータ パルスが1回も検出されなかった場合は、出力データを0とします。

    WAVオーディオ解析中に以下の条件が検出された場合、ファイルへの出力はその時点で終了するものとします。     ファイルへの出力が終了した後もWAVファイルの解析は継続されます。 ふたたびパルスが検出された場合は、異なるファイル名で新たな出力ファイルを生成します。     これにより、ひとつのWAVファイルから複数の出力ファイルが生成されることになります。 また、車両あるいはエンジンが停止している間は無駄な出力ファイルを生成しません。

    出力ファイルのファイル名は自動的に付与されるようにします。 これは入力WAVファイルのファイル名の末尾に " .odoXX " (オドメータ出力ファイルの場合)" または " .engXX " (エンジン回転出力ファイルの場合) がついたものとします。 XXは複数ファイル分割のための01からはじまる十進数の連番とします。

EZPULSE.EXEを使う

    カット・アンド・トライの末、安定して動作するセッティングが得られ、実用可能なプログラムが完成しました。 プログラム開発はNoobow8000コンピュータのLinux上で行いましたが、 実際に使用するときはチームメンバーのラップトップ コンピュータを使用しますので、VisualC++を使ってWindows版もビルドしました。 プログラム名は<EZPULSE.EXE>です。

EZPULSEプログラムのソースコードを以下のリンクに用意しました。

EZPULSEプログラム ソースコード リスティング

    EZ-2のベンチテストで得られた7分間のWAVファイル (ファイル名"test-7min.wav") を解析してみます。

    EZPULSE.EXEプログラムはWin32コンソール アプリケーションとしてビルドされているので、 コマンド プロンプト (Windows95/98ではDOSプロンプト)で EZPULSE <WAVファイル名> として起動します。

    出力ファイルは以下のようになります。

test-7min.wav.odo01
test-7min.wav.eng01
test-7min.wav.eng02
test-7min.wav.eng03
test-7min.wav.eng04

    これらのファイル名から、車両は記録中に完全停止にならずに走行しつづけ、またエンジンは4回始動されていることがわかります。


走行データの解析

コースティング性能比較

    空気抵抗とタイヤの転がり抵抗を測定するなら、平坦路で惰性走行を行い、その車速の低下具合をみるのが簡単です。 EZPulseを使えば、車速が0.01km/hの精度で、0.1秒ごとに測定できます。 市販のミニディスク レコーダとラップトップ コンピュータだけでこんなに高性能なデータ計測ができるとは実に驚き。

    さて左のグラフでは、EZ-1RとEZ-2の2台の車両を初速60kmから慣性走行させ、その速度の落ち具合をプロットしています。 路面が平坦で車重が等しいとして、荒っぽく考えれば、高速域での速度低下は空気抵抗が主要因、低速では転がり抵抗が主要因となります。 2台の比較をすると、EZ-1Rのほうが最初の部分での速度低下が大きくなっています。 EZ-2のほうが空気抵抗は少ないようです。 または、EZ-1Rは車体剛性がやや低いため、路面の凹凸のエネルギーをシャーシが吸収してしまっているのかもしれません。

    車速が20km/hまで低下した時点でエンジンを再始動しなければならないと仮定しましょう。 速度が60km/hから20km/hに低下するまでの間に、慣性走行によってEZ-2は1280m進み、いっぽうEZ-1Rは1150m進んでいます。 すなわちEZ-2のほうが約130mも先に進んでいることになります。 もし両者の車重が等しいのなら、EZ-2の車体のほうが好燃費だ、といえます。

    フェアリングの形状、タイヤの種類や空気圧および前輪のアライメントをいろいろ変えてテストし、このグラフを描いて比較してみてください。 車両先端はより尖っていたほうがいいのでしょうか? おそらく、車両尾部の形状のほうが影響が大きいはずです。 タイヤの違いは大変影響します。 なぜみんなミシュランのローヒステリシスタイヤを選ぶのか、グラフを描くとはっきりします。


まとめ

    市販のミニディスク レコーダ、手作りのインターフェイス ユニット、 そしてラップトップ コンピュータと自作プログラムによって、 安価で高精度な燃費競技車両用データ計測システムを構築しました。 特殊なものはなにも使用しておらず費用もさほどかからないので (ミニディスク レコーダもコンピュータも手配できるとして) 、 高校生チームであれば類似のシステムを構築できるでしょう。 コストがかかっていない割には、スプレッド シート プログラムを駆使すれば実に多彩なデータ解析が可能です。

    で、解析した結果は役に立ったかというと、たぶんYesでしょう。 去年の車両を引っ張り出してメインテナンスだけ行った2001年度は、過去最高の記録を出すことができましたから。 しかし、チームの目標であったリッター1000キロにはあと一歩及ばず。 活動資金もなくなり、わがチームは2002年度を最後に活動休止となります。 EZPulseは10年間の活動のしめくくりの走行を、0.1秒の精度で記録することでしょう。


Go to Kits, Gadgets and Projects
Go to NoobowSystems Lab. Home

http://www.noobowsystems.org/

No material in this page is allowed to reuse without written permission. NoobowSystems has no business relationships with the companies mentioned in this article.

Copyright(C) NoobowSystems Lab. Tomioka, Japan 2000, 2002, 2004

Jun. 03, 2000 Page created. Interface board was built.
Jun. 04, 2000 Revised; Tapperware for the enclosure purchased.
Jun. 09, 2000 Interface unit packaging completed.
Jun. 10, 2000 First sound recorded. Interface unit worked very well.
Jun. 11, 2000 Page Revised. WAV file fformat validation program has been written.
Jun. 17, 2000 Page Revised. Odometer pulse detection function implemented, obtained good result with high accuracy.
Jul, 22, 2001 Public distribution.
May. 01, 2002 Reformatted.
May. 02, 2002 Revised.
Aug. 17, 2002 Reformatted.
Dec. 16, 2004 Concatinated into single page. Reformatted. Removed a link which was broken.
Dec. 19, 2004 Uploaded.