ArduinoでクルマのCAN通信を読む方法

クルマ・技術

Arduinoを使ってクルマのCAN通信を読む方法をまとめました。

市販のMCP2515, MCP2551,発振子などを個別に購入してユニバーサル基板上でCANを読んでいる方は少なそうでしたので、同じことをやろうとしている方の一助となれば幸いです。

ArduinoでCAN通信を読む方法

必要なもの

私は以下のものを使用しました。

Arduino以外のものをRSコンポーネンツで購入しましたので、RS品番を併せて記載しています。

必要なもの

・Arduino Uno

・MCP2515

(マイクロチップ CANコントローラ, CAN 2.0B, 18-Pin PDIP)

RS品番:628-3532

・MCP2551

(Microchip 1MbpsMbit/s CANトランシーバ, ISO 11898, 8-Pin PDIP)

RS品番:402-920

・発振子

(Murata セラミック発振子 16MHz 3rdオーバートーン, 3-Pin)

RS品番:624-0995

・セラミックコンデンサ×2

(村田製作所 セラミックコンデンサ DE1 シリーズ 15pF 1.5 kV dc, 500 V ac,DE11XRA150KA4BQ01F)

RS品番:172-7775

・抵抗×2

(10kΩを2本)

・OBDカプラ、端子、ハーネス

OBD2とは

OBD2とはOn Board Diagnosticsの略で、故障診断を行うための診断機能を表しています。

日本においては2008年10月~OBD2の搭載が義務付けられているため、現在ほとんどの車にOBD2は搭載されています。

OBD2はISO 15765-4とSAE J2284に準拠しているため、CANのピンアサインは共通となっています。私の車では下記の写真の通りです。

500kHzのCANを読むラインが下記に出ています。

おそらく最初読めておらず、ちゃんと接触しているか不安な方もいると思います。

私は以下の通りOBDカプラからCANの配線を出しています。

(カプラ壊れたのでセロハンテープではっています。。。笑)

テスターをお持ちの方は上記の端子を当たると、だいたい以下の値を指示するとわかります。

接続方法、回路構成

こちらのGithubを参考に回路を組みました。

注意点はArduinoの回路番号が上から順番になっていないことです。笑

(上からD10, D12, D11, D13となっています。)

私はこれに気づかず、数時間頭を抱えました。笑

コンデンサ容量とセラロックの周波数は異なりますが、発振子の周波数は16MHzでも設定可能なため、問題ありません。

ルーズな私はこんな感じに配線しています。

Arduinoの設定

上述したGithubの記載のようにこちらから、必要なファイルをダウンロードします。

インストールをしたら、ExamplesからダウンロードしたCAN_readを選択します。

上記のOBD2から出ているCANを見るために、一部設定を変更しました。

具体的には以下の2点です。

変更したところ

・OBD2から出ているCANは500kHzですので、周波数の設定を以下のように500kHzに設定。

(デフォルトでは125kHzになっています)

・発振子の周波数が16MHzのため、MCP_16Hzを記載。(これは指定しない場合、デフォルトで16MHzの設定となっているそうですが、念のため16MHzと記載しています。)

上記を反映したのが、以下の画像の赤下線部です。

それ以外はデフォルトの設定です。

上記の設定をして、OBDのCAN HighとLow側を接続。

エンジンをかけると、以下の通り、無事CAN信号を見ることができました。

上記はシフトレバーをP, N・・・などに入れ替えたときの動きです。

自分でMCP2515, MCP2551のマイコン買ってやってる方がネット上で見当たらなかったため、方法を整理しました。だれかの一助となれば幸いです。

コメント

タイトルとURLをコピーしました