自作・iPhone表示のOBD2メーターを作る【実験編】
目的 |
チューニング・カスタム |
作業 |
DIY |
難易度 |
  中級 |
作業時間 |
30分以内 |
1
この車にもここ(
http://minkara.carview.co.jp/userid/1540421/car/1141151/3524867/note.aspx)で作ったような「アクセル開度」「ブースト計」を表示する車両の情報モニターが欲しい…。
スクラム用のモノはまともに動いてて気に入ってるけど、ECUからデータを取ってて配線が乱雑気味になっている。
TTを所有して7年になるが純正で乗るのがポリシーとなっている(ただいじって壊すとリスクが大きい…だけ?)。
車体の配線などを汚さず(?)簡単に車体のデータを取る方法はないかと考えてみた。
すると、最近の車には「OBD2」って規格の「自己診断機能」が付いているみたい。
巷では、ここからデータを取ってブースト計などの計器類を表示させるものがたくさん出回っている。
これが使いえないか?
ってことでOBD2で使われている「CAN通信」ってプロトコルをハッキングしてみる。
まずは、車体に取り付けるコネクタを用意した。OBD2のコネクタは16ピン仕様。ここで使う配線は6ピンの「CAN High」と14ピンの「CAN Low」の2本だけ…のはず。
2
回路を考える前に電源を用意してみる。
OBD2のコネクタには「12V」と「GND」が存在している。
当初、ここから電源を取ろうと目論んでいたが、テスターを当ててみたら「常時電源」。
常時電源は電子回路を作るのには何かと面倒なので、普通にACC電源から取ることにする。
この車は電源すら取ったことはないのでどうするか考えてみた。
配線を汚さず(?)に取るにはヒューズボックスから取るのが無難と判断。
適当なシガレットあたりのヒューズを取って電源取りを行った。
ヒューズから電源を取る製品は普通にホームセンターとかでも入手できるけど、わざわざ買うまでもないってことで、付いていたヒューズのかどっこを削ってハンダで配線して「自作」w
3
次に、回路を考えてみた。
今回やってみることとして、ちょっとしたアプリならつくれるのでデータ表示には「iPhone」のアプリを作って表示させてみる。制御のマイコンは「PIC16F1705」。CANコントローラーには「MCP2515」。CANトランシーバーには「MCP2551」を使うことにした。
「iPhone」とマイコンの通信はいつものようにBluetoothのモジュールを使って通信を行う。
今回は、このモジュールに浅草ギ研の「BLESerial2」ってモジュールを使ってみた。
車体に送受信するCANデータはCANトランシーバー「MCP2551」で変換される。この部分の内容はよく分からないがこのトランシーバーは必要みたい。わからないのでただの通り道と考えている。
車体との送受信データは、CANコントローラ「MCP2515」が制御を行ってCANトランシーバーとやり取りしている。
実際の送受信データについてはマイコン「PIC16F1705」が作成・受信をデータの解析を行っている。
この「マイコン」と「CANコントローラー」とのデータのやり取りについてはCANコントローラーが持っているコマンドを使ってマイコンから要求実行している。
このコマンド実行については「SPI」って通信方法で接続しCANコントローラーを制御する。
また、マイコン「PIC16F1705」とBluetoothモジュール「BLESerial2」の通信については「UART」って通信方法でデータのやり取りを行う。Bluetoothモジュールはマイコンから「UART」で送られたデータを即座にBluetooth通信(無線)に乗っけて吐き出す。
その無線データをiPhoneのアプリで受け画面に表示させるようにしている。
4
AUDI TTのOBD2コネクタは運転席側のアクセル上あたりに存在する。
CAN通信のやり取り方法によって、OBD2のもっている「診断機能」を使ってデータを入手する。ちょっと複雑なので詳細は割愛するが、
ざっくり簡単に言うと、欲しいデータ、例えば「エンジン回転数」を入手したい場合、CAN通信で「0x7E0」(16進数)という送信要求コマンドと共に「0x0C」(16進数)というエンジン回転数のパラメーターIDデータをCAN送信し車体にデータの要求を行う。
そうすると「0x7E8」(16進数)というコマンドと共に先ほど送った「パラメータID」と「エンジン回転数データ」が返信されてくるので、それをCANコントローラーが受けてマイコンで割り込みをかけてiPhoneに送るって流れ。
例えば「エンジン回転数データ」は2バイトで受信されて、AとBの2バイトで受信されたとすると(256*A+B)/4って式でrpmへ換算ができる。
って簡単に書いてたが、実際にはCANコントローラ上のレジスタをマイコンのプログラム(C言語)でひたすらいじって設定する必要があるので結構理解が大変。
5
今回は、「実験」なので…。
ブレッドボードに回路を組んで車に設置してみた。
今回の回路電源は、「BLESerial2」が3V。その他のDIPが5Vだったので2種類の電源が介在している。12V電源から3Vと5Vの三端子レギュレーターを使って電源を作った。
左の緑の基盤が「BLESerial2」。
(前のバージョンに比べかなり小さくなってコネクティングも早い。でも3V電源…)
真ん中のDIPがマイコン「PIC16F1705」。
右中央のDIPがCANコントローラー「MCP2515」。
右上のDIPがCANトランシーバー「MCP2551」。
結局、車体からは「ACC電源」「GND」「CAN High」「CAN Low」の4本だけ。
なので、シンプルで配線は汚れていません…w
6
7
実際に走らせてメーターと比較してみた。
今回の取得のタイミングは1秒毎とちょっと大きめに間隔を取ったので多少時間差があるが、車体のメーターに追従しているので取得できてるみたい。
iPhoneへの表示はBluetoothなので当然配線レス。
実験としては成功です♪
ふ〜〜っ。
こうしてサラッと書くと簡単そうだが、CAN通信に関する文献やネット情報が少なすぎる。理解するのに相当苦労してしまった。
肝は、CANコントローラー「MCP2515」が使いこなせるかどうかにかかっていると思う。
幸いにもこのデータシートが日本語でネットに転がっており、このデータシートを3日間かけて熟読しやっと理解ができた。ようやく安定したマイコンのプログラムが出来上がる頃には、私のゴールデンウィークは終了…。
でも、CAN通信のライブラリもしっかりプログラミングしたのでこれからはこの応用で行けるはず。
実験も成功して、もうちょっとiPhoneの表示もカッコよくしたし、取れるデータも何があるか調べなければなんない。
本当の完成はいつ…?
[PR]Yahoo!ショッピング
関連コンテンツ
関連整備ピックアップ
関連リンク