自作タコメーター(さらに実験編) |
![]() |
CAN通信もやってみよう!実験編、実用1号機、からの続きです。たまたまOBD2端子から回転信号(TAC)が取れる車種だったので、タコメーターは比較的イージーに実装することができましたが、やはりCAN通信が気になりますよね。 バッテリー電圧も見たいし、車速を取ってHUDなんかも挑戦してみたいところです。 |
![]() |
CAN通信ちがった。で、情報収集する中でわかってきたのが、最近は「CAN通信」が主流となっている車内ネットワークですが、ちょっと古い車だと「K-Line」だったりします。K-LineはOBD2端子の7番に信号が来ています。うちの車もこれに該当するようです。 ※「KWP2000」とも呼ばれますが、KWP2000プロトコルを使う信号ラインにK-Line(PIN 7)とL-Line(PIN 15)があって、現状L-Lineはほとんど使われていないようです。 |
![]() |
CANとK-Lineの簡単攻略法Bluetoothドングルからシリアル通信の信号線を引っ張り出す方法が簡単でいいですね。ドングルの心臓部に「ELM327」というチップ(ほとんどが中国製クローン)が使われていてECUとの仲介をしてくれます。 写真のようにBluetoothモジュールがそのまんま乗っかってるやつがおススメ。ハンダ付けポイントが一目瞭然です。 (追記)ドングル側のTXの実測値が2.8V程度でした。ELM327自体は5V動作です。乗ってるBluetoothモジュールが低電圧動作のものなのか?RXもトレラントだとは思いますが念のため分圧抵抗を入れて調整しました。 ----- 参考 ----- mint_@ さん ArduinoとELM327でOBD取得する |
![]() |
まずはドングルをチェック「ELM327 Identifier」という便利なアプリがあるので、これでチェックしておきましょう。搭載されているELM327チップがどんなコマンドに対応しているのか調べてくれます。 製品が「ELM327 v1.5」表記で、チェックの結果が左画面のような感じだとたぶんOKです。 ※製品が「ELM327 v2.1」だと逆に古い車に対応してなくてダメっぽいです。 |
![]() |
ついでに待機電流をチェックOBD2端子は基本常時電源になっているので、バッテリー上がりを警戒して多くの方がスイッチを入れたりACC電源に付け替えたりしていますね。実際の所どれくらいの電流が流れているのでしょう?ただLEDが1個光ってるだけで例えば1mAとかなら全然無視でOKなのになぁと思いつつ、 測ってみると結構流れてました。対策して正解。 |
![]() |
まずはおうちで練習信号線を引っ張り出してきました。Bluetoothモジュールを残したまま上からハンダ付けで構わないようですが、私は撤去しました。 いきなり車載環境では落ち着いて作業できないので、まずはUSBシリアル変換器を通してパソコンで様子をみていきます。 |
![]() |
繋がった!ターミナルソフトはTeraTermを使用。スピードは38400baud、他はデフォルト設定でいけました。ATZでELM327を初期化、ドングルがピカピカッと光ります。 ATIでELM327のバージョンを表示。 ATRVで電圧表示までいけました。ECUに繋がなくても電圧は取れるんですね。簡単です。 |
![]() |
車のご紹介ここから情報の大前提となる車種の確認をしておきます。9代目カローラの中期モデル(2004年2月登録)、形式「NZE121」、4ATセダンです。電装以外はほぼノーマル。エンジンは「1NZ-FE」 ECUのプロトコルが「ISO 14230-4 KWP(5 baud init 0x8113F1,9.6kbaud」「Toyota OBD-II / EOBD ~1999-2008 K-Line/KWP + extra sensors」(スマホアプリで接続成功した時の表示より) |
![]() |
今度はArduinoに接続Arduinoベースの(物理)ターミナルに接続してコマンド手打ちでさらに実験。ATSP4でプロトコルを4番に切替(一回やればEEPROMに記憶される)、ATDPで結果を確認。 010Cで回転数をリクエスト、INITが始まるがまだ車に繋いでいないのでERRORで終了。想定内の動きなので大丈夫です。 ----- 参考 ----- 黒っ9(クロック) さん OBD2(OBDII)で遊ぼう 其の一:ELM327と通信 創活こんぺさん支部 さん 【OBDで車とお話】ELM327データシート |
![]() |
いよいよ車載で実験プロトコルを4番にすればそれで繋がりそうだけどすんなりはいかない。トヨタの独自仕様に合わせる必要がありますね。(先人のリサーチ力に感謝)ATIB96 ATIIA13 ATSH8113F1 これで通信が確立しました。(これらのカスタムはATZ,ATDで元に戻るので注意) 回転数を見てみましょう。 リクエスト:010C レスポンス:41 0C 0A EC (699 RPM) 水温を見てみましょう。 リクエスト:0105 レスポンス:41 05 7B (83℃) 車速を見てみましょう。 リクエスト:010D レスポンス:41 0D 00 (0km/h) 正常(っぽい)にデータが取れました! ここまで来ればあとは気合とセンスでオリジナルのメーターパネルが作り放題!(センスは持ち合わせていないのでつらい、) ----- 参考 ----- TORQUE WIKI - Custom Init ELM327_data_sheet.pdf - Archived from Elm Electronics official website WIKIPEDIA - OBDII-PIDs |
![]() |
データ処理実践まず30-50byte程度のバッファを作り順次シリアルデータを読み込んでいきます。期待される文字列が現れたところで測定データ部分を抜き出します。ここでちょっと問題なのが、ELM327はchar型のアスキー文字を返してくるので、必要に応じて演算可能なbyte型のデータに変換する必要がありますね。そこは関数を作って処理しましょう。 human2machine.zip |
自動処理でまとめるコマンド手打ちでいろいろ探ってきたものを自動処理でまとめていきます。おかしなデータを無限に送りつけて本来の運転機能に影響を及ぼすことは万が一にも避けなければいけません。慎重に! SingleMeter04.zip 任意の項目を0.5秒程度の周期でループ表示する基本プログラムです。実車での確認もできました。車種により要修正ですが参考にどうぞ。 |
|
![]() |
対応PID調査規格として種々のPIDが定義されていますが、実際のECUがそのすべてに対応しているわけではなく、車種により対応状況は様々です。それを調べるコマンドがあるので一度確認しておきましょう。 まず最初のブロック$01から$20はそれなりの対応状況です。 エクセルファイルに順次まとめ中、、 SUPPORTED-PIDS(20250705).xlsx ![]() |
![]() |
拡張PID$21から$A8まで延々と非対応が続きますが、$A9,$B0から再びパラパラとビットが立っています。このあたりWIKIPEDIAには載っていない拡張領域で情報も限られていますが、年代の近い11系カローラの資料をなんとか見つけることができました。12系カローラとほぼ同一体系で参考になります。 Toyota Corolla Diagnostics - Archived from www.hit-karlsruhe.de |