ArduinoでOBDモニタみたいなのを作った話。
ちらっとOBDモニタみたいなのが欲しくて、Arduinoなら作れるんじゃないかな、と思って作ってみた。.NET環境がメインでC(に近いArduino)なんて初めてですが、ポインタがない分簡単に理解できそう(罠)
使った物
- Arduino Uno R3
- Freematics 2.2" TFT LCD (Freematics 2.2" TFT LCD Shield for Arduino) (解像度:240x480 / 使用チップセット:ILI9341)
- Freematics OBD-2 Adapter(UART) (Freematics OBD-II UART Adapter V1 (for Arduino))
IDEに関しては、 arduino.cc にあるものではなく、arduino.org にある、Version 1.7.11 のIDEでないと、MultiLCDでの文字表示が正常に出来なかったのでメモ。
OBDの通信プロトコルは複数あり(Ref: 自動車の自己診断機能 - Wikipedia)基本的には、使用するライブラリの OBD.h の108行目付近にある
init(OBD_PROTOCOLS protocol = PROTO_AUTO)
を、その手前あたりにenum で定義されている OBD_PROTOCOLS に合わせれば大丈夫そう。(ほとんどの場合は PROTO_AUTO で大丈夫らしい(自車もPROTO_AUTOでいけた))
また、取得出来るパラメータは同じく OBD.h に定義されてるけれども、車種によって取得出来ないものもあるので注意。
ちなみに自車はZC72S(K12B)(RS)ですが、今のところ
- PID_ENGINE_REF_TORQUE
- PID_FUEL_PRESSURE
- PID_ENGINE_OIL_TEMP
- PID_AMBIENT_TEMP
- PID_FUEL_PRESSURE
は取れませんでした(OBD.hでDEFINEしてる値)
OBDは常に通電しているので、エンジンカットしても値が表示されたままだし、Arduinoは基本、電源を切るというのがない(スリープモードはあるらしい)ので、現在スリープモードとかの実装の検討とか作業してます。
ここのサンプルコードを参考にして作ってます。