はじめに
車両のOBDでデータを取りたいと思っていますが、車両で開発は大変なのでArduinoで車両をシミュレートする環境を作りました。
参考
以下を参考にさせていただきました。ありがとうございます。
環境
- windows
- Arduino nano互換機
- MCP_CAN_lib v1.5.1
- ELM327 v2.1
- MCP2515モジュール
- Car Scanner(Androidアプリ)
- OBDケーブル
Arduino nano互換機 について
久々に使ったので、最初書き込みができなくて困りました。
IDEでOld Bootloaderを選択します。
MCP2515モジュール について
Amazonで3個セット安いやつです。
KKHMF 3個 MCP2515 CAN バス モジュール TJA1050 SPI レシーバー Arduino AVR MCU ARM に対応
不良が混じっていることが多いみたいなのでモジュールを2つ使って動作確認をしました。
こちらは以下を参考にして動作確認をしました。ありがとうございます。
OBDケーブル について
以下を使用しました。
LoongGate OBD - II 16ピンオープンプラグワイヤを終了するには - OBD2 16ピンラウンド延長コネクタ診断ケーブル - 0.3メートル
レビューには商品袋に記載のピンアサインと実際のピンアサインは違うとあったのでテスターチェックしましたが、商品袋に記載の通りでした。なのでGreen - CAN-H,Green/White - CAN-Lで接続しています。
Pin | Color | Function |
---|---|---|
4 | Orange | Chassis GND |
5 | Light blue | Signal GND |
6 | Green | CAN high |
14 | Green/white | CAN low |
16 | Red | 12V |
変更点
参考のそのままでは動かなかったので、以下を変更しています。(参考での変更も含みます)
また、参考ではArduino Unoですが、私はnanoなのでnanoに合わせて接続しています。
Pin | Function |
---|---|
D10 | SS |
D11 | Mosi |
D12 | Miso |
D13 | sck |
OBD_Sim.ino
にて
- CSピンを9ピン→10ピンに変更
// MCP_CAN CAN0(9); // Set CAN0 CS to pin 9
MCP_CAN CAN0(10); // Set CAN0 CS to pin 10
- 20MHz→8MHzに変更
// if(CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_20MHZ) == CAN_OK)
if(CAN0.begin(MCP_STDEXT, CAN_500KBPS, MCP_8MHZ) == CAN_OK)
OBDの5pin(Signal GND)は未接続
- CANは差動信号なのでGNDは不要と考え繋ぎませんでした。動作しています。
MCP2515モジュールのintとArduinoのpin2をつなぐ(割り込み)
- 参考では未接続ですが、動きませんでした。プログラムをみるとmainloopでintピンを見て割り込み待ちしていたので接続したところ動作しました。
その他
Car Scannerでプロトコルは自動認識されるため以下は1or0のどちらでも良いです。
- 1ならISO 15765-4 CAN(11bit ID 500kbaud)
- 0ならISO 15765-4 CAN(29bit ID 500kbaud)
#define standard 0