自作電子小物/HA7車両情報データロガー/Mac版0.1
自作電子小物/HA7車両情報データロガー/Mac版0.1
HA7 logger mini V0.1
2012年1月14日土曜日
ホンダの軽自動車 アクティ トラック 形式GBD-HA7用の、PCを利用した簡易的なデータロガー/レコーダです。車両との接続は、車内にある車両診断コネクタOBD2で行いますので、面倒な配線は最少です。USB接続アダプタの自作と、Macintoshが前提となりますが、比較的簡単に車両情報を記録する機能を実現出来ます。 USBアダプタの製作費は1500円程度、入手容易な部品なので作り易いと思います。ソフトウエアはMac OS Xの開発環境、Xcode(Cocoa)にてコーディングしています。
<機能/特徴>
■一番安い・一番単純な自動車用データロガー
■データはCSV形式ファイルで利用範囲が広い
■動作中はリアルタイムでゲージ表示される(走行しながら見てはいけません)
■汎用部品で製作容易
重要:誤動作した場合、車両の暴走、エアバッグ作動等で生命の危険に及ぶ可能性があります。
注意:全ては車内にあるコネクタが、OBD2仕様であるのではないかという想定を元にしています。メーカが仕様開示している訳ではないので、得られる情報は正しいとは限りません。電気的な接続で通信を行いますので、車両・PC共に物理的・ソフトウエア的な故障につながる事もあり得ます。これは、全くの無保証の元に提供する情報/ソフトウエアです。
<仕様>
名称:HA7 logger mini V0.1
分類:車両データ記録器(PCオンライン型)
取得データ項目:
エンジン冷却水温度 ect[℃]
短期空燃比補正値(バンク1) shrtft1[%]
長期空燃比補正値(バンク1) longft1[%]
吸入管絶対圧力 map[kPa]
エンジン回転数 rpm[rpm]
車速 vss[kn/h]
点火時期 sparkadv[°]
吸気温度 iat[℃]
スロットル開度 tp[%]
O2センサ出力電圧(バンク1センサ1) o2s11[V]
空然比補正値(バンク1センサ1) shrtft11[%]
取得時間間隔:2秒(項目間は0〜1.8秒程度の時差があるが、周期はほぼ2秒間隔)
接続形態:
車両:
対応車種:HONDA ACTY TRUCK GBD-HA7(2006年式)のみ
接続方法: グローブボックス下のOBD2コネクタへの接続
PC:
対応機種:Apple社Macintosh(SSD搭載のノート型を推奨)
対応OS:Mac OS X 10.4以降
ソフトウエア:専用ユーティリティ+チップメーカ提供ドライバ
対応プロトコル:ISO15031-5(SAE J1979)、ISO9141-2の5bps初期化式のみ
出力ファイルフォーマット:テキストCSV形式(例)
ファイル名:デスクトップ上に”HA7.csv”を作成(常に追記されます)
接続アダプタ:
USB側:mini-B
車両側:OBD2コネクタ(ISO15031-3, SAE J1962)
電源:車両およびPC側より供給。
外形:幅約5cm、奥行約2cm、高さ約1cm
製作費:約1500円ぐらい
<技術的なポイント>
■ハードウエア
・UART と ISO9141-2(K-line) 変換
・FTDI社 FT232RL USB-UARTコンバータ
■ソフトウエア
・開発環境はxcode、フレームワークはCocoa
・FTDI社D2XXドライバインタフェースで、ISO9141-2(5bps初期化式)プロトコルを実装
・ISO15031-5(SAE J1979)フォーマットの解釈
■開発法
・プログラム開発は、無料で利用出来るApple社の標準的なIDEであるxcodeを使用
・回路とプリント基板設計は、無料で利用出来るCadSoft Computer社のEAGLEを使用。
<接続アダプタ>
■回路図
接続アダプタは市販されていませんので、自分で作成する必要が有ります。
大変なのはUSB接続部分ですが、USB-UART変換チップ(モジュール基板)を利用すれば、電圧レベル変換回路だけで済むので、極めて簡単に作る事が出来ます。なお、色々な事情によりFTDI社のFT232RL限定となっています。
FT232RLは秋月電子から、扱い易いモジュール基板AE-UM232Rが出ていますので、これを利用します。ジャンパピンはデフォルト通り、J1:1-2ショート(3.3V I/O)、J2:ショートの設定です。
トランジスタ1個・抵抗4本の外部部品だけという超簡単な回路で済んでしまいます。
注意すべきは、Vbattはイグニッションキーの位置にかかわらず常時オンなので、何もしていなくとも常にわずかな電流が流れます。わずかとは言え、実測で約300μAありますので、長期間放置すればバッテリ上がりになる可能性があります。
この回路ではTx(送信)信号が負論理の前提となっています。FT232RLでは、設定で負論理にする事ができますが、設定変更はFTDI社が提供しているWindows用のツールでチップ内に焼き込む形になります。具体的な手順は、
(1) WindowsPCで、FTDIのホームページからFT_PROGユーティリティをダウンロードし、チップ内の設定を変更。
(2)変更項目は「Hardware specific→Invert RS232 Signals→Invert TXD」にチェックを入れる
(3)参考情報は「 自作電子小物/TIPS/FTDI FT_PROG使用例」に乗せています
面倒もしくはWindows環境をお持ちでないならば、部品が若干増えますが、次の回路で問題ないはずです。
■部品表
ケース・コネクタ・線材を除きます。OBD2コネクタは1000円程度で入手できますが、今回はピンを差し込む方法を取りました。常用する場合は、きちんとしたコネクタを使った方が良いでしょう。
■基板
実際の配線は次の様になります。これは部品面から見た様子です。
注意:トランジスタのキリフキは逆です。Eagleの標準部品に丁度良い物が見つけられなかったのでこうなっています。
一品ものですし、手っ取り早く作りたかったので、ユニバーサル基板(蛇の目基板)で作成しました。ケースは特に作らず、ビニールシートでくるんで車体への接触だけを防いでいます。
OBD2コネクタの代わりに、写真の様に直径0.8mm位のメッキ線を差し込む様にしました。
コネクタの入手が難しいため苦肉の策ですが、差し込や運用時の取扱を十分注意しないと、車両側の端子を変形させてしまいます。車両側のコネクタ丸ごと交換というハメになり、高く付いてしまうかもしれませんので、あまりお勧めできない方法です。
<ソフトウエア>
■ダウンロード
専用ユーティリティ:
インストール:特にインストール作業はありません。任意の場所に置いて下さい。
(ターミナルから実行する、ISO9141-2調査ツールも入っています)
FT232RLドライバソフト:
ダウンロード:FTDI社のホームページのD2XX Driversから最新版をダウンロードして下さい
インストール:説明書に従いターミナルからインストール作業が必要です。
(FT232RL用のVCPドライバとの共存は出来ませんので、アンインストールしておいて下さい)
■使い方
次の手順で実行します。
(1)Mac上のFT232RL VCPドライバのアンインストール(VCPドライバが既に入っていた場合のみ)
詳しくはFTDIのホームページを参照
(2)Mac上にFT232RL D2XXドライバのインストール
詳しくはFTDIのホームページを参照
(3)PCとUSB接続アダプタのケーブル接続
(4)USB接続アダプタと車両のケーブル接続
(5)車両のエンジン始動
(6)専用ユーティリティの実行
(7)専用ユーティリティの停止
(8)車両のエンジン停止
表示画面レイアウト
出力CSVファイル
表計算ソフトでのグラフ化例
■ソースコード
ライセンス: フリーソフトウエア(GPL v3)
作成者:富樫豊彦 tog001@nifty.com
開発環境:
CadSoft Computer EAGLE 5.11 Light Edition for Mac
Mac OS X 10.5.8
Xcode 3.1.2
■接続インタフェース・通信プロトコルについて
(1)車両側インタフェース
HA7にはダッシュボードの下に、OBD2コネクタらしきものがありますが、実際結線されているのは以下の○の付いたピンだけです。
OBD2の規格は、何種類かの他の規格が含まれており、大変分りにくくなっています。私なりの解釈が次の表です。
勘違いしやすいのがISO9141-2はLINとは正確には異なります。電気的な接続部分が同じだったり、似ている部分がありますが、OBD2にはLIN規格は使われていませんので、資料を探す時は注意した方が良いと思います。CANは使われています。
必ずしも全ての取り決めを実装する必要はなく、車両側は大抵は1つか2つ位のルートのみをサポートしている様で、古い車はK-Line、最近の車はCANが多い様です。
HA7の場合、 使用しているピンからすると、⑦K-lineのみを使用するISO9141-2かISO14230-4規格か、⑭CAN-Lを使用するISO15765規格の可能性がありました。9番ピンは未定義なので、もしこの信号を使っているのだとするとメーカ独自の通信となりますので、お手上げとなります。また、⑭CAN-Lはペアであるはずの⑥CAN-Hがないのが不自然でよく解らず悩ましい状況です。オシロスコープで見ても、信号が見える訳でもないので、垂流し的な物でもないようです。とりあえず、一番可能性のあるK-lineのハードウエアインタフェースを作りアクセスしてみました。その結果、 5bpsの初期化手順に反応があった事から、ISO9141-2プロトコルを使っていると思われます。
基本的には、初期化手順という特別な信号のやりとりを行った後、診断機器(ここではPCを指す)からの1つの問合せに対して、車両から1つまたは複数の情報を返す、これの繰り返しです。
初期化手順:
①は決まり事
②は最初の1バイト目がSyncで必ず0x55、これ以外は無視する必要がある。次の2バイトはKeywordと呼ばれ0x0808もしくは0x9494であればISO9141-2と判定する。他のプロトコルはこの部分が変わってきます。
③はチェックサム値
④も決まり事((1)の値のビット反転値)
何回初期化してもかまわないのですが、1回数秒掛かります。
問合せ応答手順:
全てスタートビット1、データビット8、ストップビット1、10500bpsで通信
下記の繰り返しとなります。
①1〜3バイト目はヘッダ部でほぼ固定値、4バイト目以降がISO15031-5で規定される電文内容で、最初のバイトがサービスID(SID,Modeとか記述されている事もある)、次のバイトがパラメタID(PID)となり、残りがSID/PIDで変わる追加データとなります。最後の1バイトがチェックサム値です。
②返ってくる電文も同じフォーマットで、追加データ部に実際のデータが入ってくる形になります。
送受信タイミング条件や、細かい話がありますので、詳しくはISO9141-2のドキュメントをご覧下さい。ISOの公式ドキュメントは無料での公開はされてはいませんが、何とか手に入れて、ぜひ参照して欲しいと思います。電文内容・フォーマットに付いてはISO15031-5(SAE J1979)を見れば解る事になっています。こちらはWikipediaのOBD、PIDでおおむねの情報が得られます。
解りにくいのは、使用出来るPIDを照会する事ができるのですが、ビットマップ表現なので処理しにくくなっています。未サポートのSID(Mode)/PIDを送ると、初期化手順を踏まないと再開できませんので、時間的なロスが大きくなります。
参考になるかどうか解りませんが、調査段階で作ったテストプログラムでの電文のダンプを掲載します。
これでは、仕様書見ながら解読するという地道な作業になるので
取得可能な全情報を調べる為に簡単なツールを作成しました。
このツールは、最初に、取得可能なPIDを問合せて(ビットマップで表現される)、その全てのPIDを順次問合せを行い、結果を、16進数のダンプ表示と、人が容易に判読出来るようISO1531-5(SAE J1979)に記載されている文言に変換して編集表示します。
以下がHA7で実行した時の様子です。
結局、HA7では実質11項目しか得られませんでした。
ツール自体は、この11項目以外にも対応していますので、多分他の車両でも使えると思います。
ISO9141-2(非同期シリアル)はかなり情報転送が遅いので、リアルタイム系や、累積値での正確さを求められるアプリケーションには向かないと思われます。
通信速度が10.4kbpsというお世辞にも速いとは言えず、またプロトコル上必要な待ち時間もあるのが理由です。実測で11項目得るのに1.8秒程度掛かります。元々故障診断が目的の物ですので、逆にこれだけ出来るのを良しとすべきかも知れません。せいぜい、エンジン回転数1項目抜き打ちでタコメータ表示する程度でしょう。
新しい車は、転送速度の高いISO15765(CAN)に変わって来ているようなので、この使いにくさを解消できます。
(2)PC側インタフェースについて
車載と言う事で、ノートPCで使える様にUSBを前提で考えました。
(3)USB→K-lineインタフェースについて
K-lineのインタフェースを実現するために、2つのハードルがあります。基本的には非同期シリアル通信なので、専用のハードウエアを要せず、汎用のハードを利用出来ますが、10.4kbpsという中途半端な転送速度と、初期化に5bpsという超遅い転送速度で通信しなければならない事は、かなり制約が出ます。マイコンで実現するには、そう難しい話ではないのですが、PCでその仕様を作るのは意外と簡単には出来ません。
そこで、手持ち部品の関係もあり、FTDIのD2XXドライバが細かい制御が出来るので、これに頼りました。中途半端な転送速度の設定が出来ましたが、最低でも300bpsなので5bpsは簡単には実現できません。これについては、break信号をソフトウエアタイミングで操作する事で5bps信号を生成する方式で実現出来ました。
PIC開発が可能な方なら、PIC18F14K50を使えば簡単に製作できると思われます。CAN+USB対応のPICなら、多くの車両に対応できるアダプタも実現可能でしょう。
<関連>
「自作電子小物/HA7車両情報データロガー/iPhone版0.5」
「自作電子小物/HA7車両情報データロガー/iPhone版0.4」
「自作電子小物/HA7車両情報データロガー/SDカード版0.3」
「自作電子小物/HA7車両情報データロガー/Mac版0.2」
<あとがき>
車載アプリケーションを考える上で、速度やエンジン回転数等の基本的な情報が、どうしても必要になってきます。これを阻んでいるのが、新たにセンサを取付けたり配線をしたりという「面倒さ」です。エンジン回転数を電源ラインのノイズから拾ったり、加速度センサで速度を割り出すといった、間接的な方法もありますが、精度的な限界があり、やはり車両のコンピュータから直接情報を取得するのが最善ではないかと考えるようになりました。手始めに、実際どのような情報が得られるものなのかを知るために作ったのがこの小物です。他の小物とは違い、一過性のものなので、TIPSに掲載すべき物かもしれませんでしたが、とりあえずここに置いています。
インターネット上の情報で調べ始めた頃、診断コネクタというものがメーカにかかわらず規格化されつつあるという事で、実際手近な機材にもOBDらしきコネクタが付いていました。そこで、接続テスト、簡単な情報収集アプリケーションプログラムまで、一気に進める事ができました。
富樫 豊彦 tog001@nifty.com
Simple vehicle data logger for HONDA's light weight truck GBD-HA7.