アナログタコメータをつくる(1) OBD2スキャナ

職場のひとに面白いものを貸してもらいました。OBD2 スキャナです。

近年のクルマは車両の自己診断コネクタが共通化されていて、流れるデータも標準化共通化の方向です。本来は故障時になにかしらのツールを接続して情報を吸い出すための口ですが、リアルタイムの車両情報もここから得ることができます。例えば車速、冷却水温、エンジン回転数、吸気温度、などなど。そのために使うのがこの OBD2 スキャナです。

貸りた OBD2 スキャナはアマゾンで調達したとのこと。

このスキャナは Bluetooth でスマホにデータを飛ばしてくれます。Bluetooth モデルは iPhone には対応していません。売り時を逸して死蔵している例の Android で試してみることに。
ちなみに Wi-Fi モデルなら iPhone でも使えるようです。

まずは机上でテスト。ピン配を調べて 12V と GND だけ繋いでみました。
というのも、この OBD2 スキャナを貸してくれたひとはアルトワークス乗りで、これをつけたらエンジン始動できなくなったそうで。ワークスと無印で大きな違いがあるとも思えず。
Android には torque Lite という機能限定無料版のアプリを入れます。久しぶりの Google play。
ダウンロードはともかく、手持ちの Android があまりにショボいので何度か失敗しましたが、いくつかの常駐タスクをキルしたりしてなんとか起動。どうやら繋がるみたいです。

翌朝、クルマに取り付けてみました。心配していた不具合は特になし。自分のアルトはキーをひねって始動するタイプ。プッシュスタートでないのが幸いしたのでしょうか。
ちゃんとエンジン回転数が表示されました。他にも色々なデータが表示できます。こりゃ面白いですね。
もうちょっと最近の Android を買えば遊べそうです。買いませんが。
で、ちょいと調べてみると Arduino でいろいろやっている例がたくさん見つかりました。Arduino は言わずと知れたマイコンボードで、3Dプリンタにも採用されてます。楽しそうです。
そうそう、タコメーター欲しかったんですよ。セルボにはあったのにアルトにはない。できればデジタル表示でなくて、針のあるアナログなタコメーターが欲しい。お高い既製品を買うのはもちろんありえないので、Arduino の勉強がてら自作しましょう。

お借りした OBD2 スキャナをバラすわけにもいかないので、AliExpress で調達。

クルマの CAN と通信するのは ELM327 という石がメジャーですが、入手できる廉価品のほとんどは PIC でつくられてます。ELM327 とて、開発段階では PIC を使用していたらしいので何の問題もありませんね。
ほぼ同型のものは AliExpress にそれこそたくさんありますが、改造しやすさからすると出来るだけ旧式のものが良いです。新しめの製品はコストダウンで基板が専用化されてていじりにくいみたいです。
なお実際に買ったのは上の商品ではなくこれです。

買った OBD2 スキャナは、一度だけ Bluetooth で車両との接続テスト、動作確認をして、すぐに殻割りwww
二階建ての基板とその上に Bluetooth モジュールが見えます。一階部分は主にレギュレータ関係、二階は PIC18F25K80 モジュールですね。期待通り。珍しく購入者レビューが役に立ちました。
無線にこだわる必要もないので、まずは有線化します。その方が Arduino に繋ぐのも楽でしょう。

Bluetooth モジュールを取り外します。5点ハンダ付けされてるだけなので簡単。
BK3231 と書かれた石が載っているこれは HC-05 の廉価版みたいですね。電波法的にめんどくさそう。まあ今回は使いませんから問題なし。

HC-05 と同じらしいという情報からピン配を特定。必要なのは電源、GND とTX / RX の4点だけです。逆にそこだけハンダ付けされてたわけですね。あ、あと一点は中央付近でどこにもつながっていないパッドでした。
このモジュール、3.3V 動作のはずで、12V を供給しながら測ってみると確かに 3.3V でした。対する Arduino は 5V 動作。
どこかに 5V が来てるだろうと、PIC モジュールのピンを片っ端から当たってみたらあったありました。一番端っこの赤いケーブルをハンダ付けしたところです。なお白いケーブルは RX、緑は TX、黒は GND です。
ただし同じショップから同じものを買ったとしても中身が同じとは限らないので、同じことを考えている方はご注意くださいね。

OBD2 コネクタには12Vが来てますが、バッ直の常時電源です。そういう規格なのだから仕方ない。先人はみなアクセサリ電源化するかスイッチをつけてますね。気持ちはわかります。
ピンを抜いて基板から直接配線を引き出しました。これを車両側のどこかの ACC につなぎます。まあシガーソケットあたりから分岐するのが良いかなと。
次回は Arduino の準備です。

コメント

  1. ryusaku より:

    こんばんは
    同じようなことを50プリウスで試したのですが、うまくできませんでした、アドバイスいただけませんか?

  2. kyu より:

    ryusakuさんこんばんは。
    さて、残念ながら私はエスパーではないので、ryusakuさんが何を作って何を試して何がうまくいかなかったのかがさっぱりわかりません。
    ひとまず、使っているOBD2スキャナーはこの記事のものと同じでしょうか?
    改造する前のOBD2スキャナーとスマホをbluetooth で接続してなにか表示できましたか?
    まずはそこから教えてください。

  3. りゅうさく より:

    購入したものは一緒です
    Bluetoothの確認は自分iPhoneのためできませんでした、、、
    そもそも壊れてますかね、、

  4. kyu より:

    なるほど。そういえば自分も確認のためだけに古いAndroid 使いましたわ

  5. kyu より:

    このOBD2スキャナーはバッタモンがたくさんあって、たとえ同じショップで買っても時期によって中身が全然違うことがままあります。
    まずはAndroid の友人にお願いして、繋がるか、車両情報が取れるかどうか確認するのをお勧めします。

  6. りゅうさく より:

    kyuさんのようにカッコいいタコメータまでとは言わずに、LDCでモニターできればと、取り組んでいるところですが、うんともすんとも言いません、、ライブラリが50プリウスに、あまり相性が良くないのですかね、、

  7. kyu より:

    LCDなら非同期通信しなくて良いので割と簡単ですよ。Freematicsのライブラリだけでできます。
    まぁFreematicsのライブラリはプリウスより古いと思われるので対応できるかどうかは不明ですね。
    この手の工作でうんともすんともって場合、大体は配線をミスってる気がします。

  8. りゅうさく より:

    あ、一応パソコンに繋げてやってみたのですが、文字化けした内容が写ります
    ❔が連続して写ります

  9. kyu より:

    PCとはどのようにして繋ぎましたか?
    OBD2スキャナー>Arduino>(USB経由)>PC でしょうか。
    ?がズラズラ出てくるってことは、シリアルモニターの通信速度が合ってないか、文字コードが合ってない気がします。

  10. りゅうさく より:

    おっしゃる通りの接続です
    シリアルモニターも色々変えてみたのですが、多分全部❔❔でした
    しかし、❔が帰ってくると言うことは可能性はありますかね

  11. りゅうさく より:

    あ、文字カードは試してないです!どうやったら変えれますか?

  12. kyu より:

    ちょっと確認です。
    OBD2スキャナーをArduinoのTX/RXに繋ぐと、PCと繋ぐためのUSBポートとかち合いますよね。Unoじゃなくてシリアルポートが二つあるMegaとか使ってるのでしょうか?
    最近とんとArduinoから離れてたので思い出すのに苦労してますww

  13. りゅうさく より:

    アルディーノはウノをつかってます
    ライブラリはkyuさんの投稿していただいてる物になります

  14. kyu より:

    りゅうさくさん
    んー、そうじゃなくて…
    失礼ですけど、Lチカとかやったことありますよね?
    rpm_led_uart.ino はエンジンの回転数が3000rpm以上になったら13番ピンに接続したLEDが点灯するというスケッチです。
    LEDは取り付けてありますよね、もちろん。
    で、このスケッチを動かすときはPCをつないでいるとダメです。
    お話を聞いている限り、なんとなくですけど Arduino のこともうちょっと勉強してからのほうがいいのでないかと思います。私の記事はガッツリ端折って書いてありますので、全く同じものを作るのならまだしも、書いてないものを作るには情報がぜんぜん足りないのです。
    Arduino について一から説明するのは、申し訳ないですけど勘弁してください。

  15. りゅうさく より:

    アルディーノのtx/rxにAmazonで買ったやつからの線を接続して、アルディーノを書き込むポートのUSBでPCと繋がりPCでモニタしてる状態です

  16. kyu より:

    それじゃダメですよ。
    ご存知の通り、Arduino UNO はシリアルポートが一つしかありません。TX/RXとUSBポートは裏で繋がってます。
    SoftwareSerial とか使って普通の入出力ポートをシリアルポート化しましょう。
    というか、シリアル通信の内容をLCDに出力できるような簡単なスケッチを書いちゃった方が早いと思いますわ。
    最初に書きましたが、わたしはエスパーではないので、りゅうさくさんがどのようなものを作って何を試してなにがうまくいかないのかは全然わからないです。
    せめて回路の構成と使用しているArduinoの種類、ライブラリなど教えてもらわないとなんとも言えないのです。
    一度そのあたり整理して教えてもらえませんか。

  17. りゅうさく より:

    ありがとうございます!一度整理します!
    回路の構成はkyuさんのを真似てアルディーノのtx/rxにAmazonで買ったやつからの線を接続し、rpm_led_uart.inoを使用している状況です、、、

  18. りゅうさく より:

    ご指摘ありがとうございます
    説明不足ですみません、車の、エンジン回転差を3000回転以上にしても反応なく、色々試してごちゃごちゃしてしまいました、すみません

  19. りゅうさく より:

    void loop()のなかも参考にさせていただきましたが、showData(pid, value);のところでエラーが出ました、、

  20. kyu より:

    ごめんなさい。整理してください。
    技術系の掲示板とか使ったことないですかね。
    小出しにするのではなく、
    どういう機器構成(回路)で
    どのスケッチで
    なにをしたら
    こういうエラーコードが出た
    ここを変更してみたらこうなった
    などの情報をまとめて書いてください。
    相手が全く同じ環境を一から作って、再現するかどうか検証できるくらいに。
    何度も言いますがわたしは超能力者ではないのであなたの頭の中まではわからないのです。

  21. kyu より:

    特にエラーメッセージなどは一言一句そのままコピペしてください。
    Arduino IDE のバージョンもひつようですね。

  22. りゅうさく より:

    親切にありがとうございます、試して展開します!

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