自作タコメーター(さらに実験編) |
![]() |
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はほとんど使われていないようです。 |
![]() |
K-Line簡単攻略法攻略法はいくつかあるようですが、中でもBlueToothドングルからシリアル通信の信号線を引っ張り出す方法が簡単でいいですね。ドングルの心臓部に「ELM327」というチップ(ほとんどが中国製クローン)が使われていてECUとの仲介をしてくれます。信号線は5VロジックのArduinoに直結可能です。 写真のようにBlueToothモジュールがそのまんま乗っかってるやつがおススメ。ハンダ付けポイントが一目瞭然です。 ----- 参考 ----- 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 |