Make.

OBD2(CAN)で自動車と通信(ハード編)

Pocket

ここでは、RaspberryPiと車を接続して、通信するハードウェア及び回路接続を解説します。
RaspberryPiの設定は「OBD2(CAN)で自動車と通信(ソフト編)」を参考にしてください。
解説する方法で、車の中に流れる車速やエンジン回転数を確認したり、一部の機能を制御を行うための操作ができるようになります。
【注意】車の通信を妨害する恐れもあるため、最悪事故や故障につながります。ここで解説する方法は、自己責任で実施してください。


CAN通信

近年の車は、ドアやメータ等の多くのモジュールが通信で繋がっています。
それら複数のモジュールが繋がっている通信線をCANバスといいます。
CANバスは2つの信号線(CAN_H,CAN_L)で構成されており、その信号線上を流れるデータを見ることで車両の情報を確認することができます。

詳しく知りたい人や、車両の組み込みを目指す人は以下の資料が参考になります。
http://download.vector-japan.co.jp/portal/medien/cmc/beginners/For_Beginners_CAN.pdf
http://documentation.renesas.com/doc/products/mpumcu/apn/rjj05b0937_canap.pdf

 


OBD2

OBD2とは、車両診断を行うための規格であり、DTC(Data link coupler)と呼ばれる同じ形状・ピン配置の接続コネクターを持っています。
ディーラー等では、このコネクタに診断機を取り付け、車両の情報を吸い出して点検を行っています。
多くの車では、OBD2コネクタ(DTC)から、上記で述べたCANバスに接続することができます。
OBD2等の車両診断について詳しく知りたい場合は、以下の資料が参考になります。
http://download.vector-japan.co.jp/pdf/HajimetenoD_ver101.pdf

ここでは、このOBD2コネクタにRaspberry Piを接続することでCAN情報を吸い出すものとします。
コネクタは、車内にありますが、車両によって取り付け位置が違うため、対象となる車で確認してください。
大抵は、運転席のハンドル下辺りにあります。


OBD2コネクタ(DTC)

以下のようなコネクタを使用して、OBD2コネクタを通してCANバスから信号を取り出します。
Amazonで売られている以下のコネクタは、GNDとバッテリ電圧12V,CAN_H,CAN_Lを取り出すことができます。

または、SwitchScienceさんで発売されている以下のケーブルでDB9に変換して、基盤と接続する方法もあります。
OBDII-DB9変換ケーブル

車両側のOBD2コネクタのピン配置は、以下のようになっています。

00216


 CANとRaspberryPiの接続(ハード構成)

CANバスとRaspberry Piを接続するために、2つのICを使用します。
使用するICは、Microchip社のMCP2551とMCP2515です。
MCP2551は、CANトランシーバとして、MCP2515はCANコントローラとして使用します。
これらのICを使った理由は、広く利用されており、情報が豊富であることと、DIPパッケージが存在するため、組み立てが容易であるためです。
MCP2515のデータシート

MCP2515,MCP2551はRS OnLineで簡単に入手できます。
MCP2515

MCP2551

ICを含め、電子部品は以下のものを使用します。

  • MCP2551 × 1個
  • MCP2515 × 1個
  • 抵抗(10kΩ) × 3個
  • コンデンサ(10uF) × 2個
  • コンデンサ(16pF) × 2個
  • 発振子(16MHz) × 1個

これらを以下のように、接続します。
CANコントローラ(MCP2515)と、RaspberryPiの接続はSPI通信で行うため、プルアップ抵抗を接続します。

00217

回路図(PDF)

テストのために上記の回路を2つ接続する場合は、CAN_HとCAN_Lの間に終端抵抗として、100Ω〜220Ωの抵抗を接続する必要があります。
車両と接続する場合は、車内に終端抵抗を持っているため、終端抵抗の接続は不要です。

上記の回路図を元に、基盤を作成してみました。
部品数が少ないためブレッドボード上で作成しても問題ありません。

00220

ハードの準備ができたら、ソフトウェア編に進みます。
OBD2(CAN)で自動車と通信(ソフト編)

 

Pocket