Make.

OBD2(CAN)で自動車と通信(回路編)

Pocket

ここでは、Arduinoを自動車と接続して通信するハードウェア及び回路接続について解説します。
ここで解説する方法で、車の中に流れる車速やエンジン回転数の信号を受信して確認したり、機能を制御を行うための信号を送信できるようになります。

【注意】車の通信を妨害する恐れもあるため、最悪事故や故障につながります。ここで解説する方法は、自己責任で実施してください。


CAN通信について

CAN通信やOBD2についての知りたい方は、簡単な解説をOBD2(CAN)で自動車と通信(ハード編)に記述しています。


Arduino向けのシールド

SwitchScienceさんからSparkFun製のCAN-BUSシールドが販売されています。
格安で手に入れたい方は、Elecrowでも以下のものが販売されています。
CAN BUS shield

実際に、Elecrowで購入したもので動作確認していますが、ピンの割り当てが少し違うものの、使い方はほとんど同じです。

00226

もっと安く手に入れたい方は、Arduinoのシールドではありませんが以下のものもあります。
MCP2515 モジュール

次では、上記のシールドを使用せず、回路を自作する場合について解説しています。


ArduinoとCANバスの接続(ハード構成)

ArduinoとCANバスを接続するために、2つのICを使用します。
使用するICは、Microchip社のMCP2551とMCP2515です。
MCP2551は、CANトランシーバとして、MCP2515はCANコントローラとして使用します。
MCP2515,MCP2551はRS OnLineさんで入手可能です。

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

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

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

00224

回路図

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

車両のOBD2コネクタとは以下のようなケーブルを使い接続します。


ArduinoとCANコントローラの接続

CAN-BUSシールドは、Arduinoに合わせたピンを差し込むだけですが、自作した回路はArduinoと接続する必要があります。
ArduinoとCANコントローラであるMCP2515は、SPIで通信します。
そのため、ArduinoがSPIを使うことができるピンにMCP2515を接続する必要があります。

そのため、MCP2515とArduinoのピンは以下のように接続します。
MCP2515->Arduinoのピン番号
SCK ->13
MISO ->12
MOSI ->11
CS ->10 (ソフトで割り当て変更可能)
INT ->9 (ソフトで割り当て変更可能)

Arduinoと接続できたら、Arduinoのスケッチを作成し、動作させます。

00227

OBD2(CAN)で自動車と通信(スケッチ編)に続く

Pocket