「Arduinoを使ってクルマのCAN通信を読んでみたい」方向けに、ズバリ、Arduino Unoを使ってCAN通信情報を読む方法をまとめました。
市販のMCP2515, MCP2551,発振子などを個別に購入してユニバーサル基板上でCANを読んでいる方は少なそうでしたので、同じことをやろうとしている方の一助となれば幸いです。
ArduinoでCAN通信を読む方法
必要なもの
私は以下のものを使用しました。
・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カプラ、端子、ハーネス
Arduino以外のものをRSコンポーネンツで購入しましたので、RS品番を併せて記載しています。
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_16MHzを記載。(これは指定しない場合、デフォルトで16MHzの設定となっているそうですが、念のため16MHzと記載しています。)
上記を反映したのが、以下の画像の赤下線部です。
それ以外はデフォルトの設定です。

上記の設定をして、OBDのCAN HighとLow側を接続。
エンジンをかけると、以下の通り、無事CAN信号を見ることができました。

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