家ですこし古い車のコンピュータと通信できる環境を作る

# はじめに
車のコンピュータ(ECU)からセンサー情報を読み出してコンソールにLCDに情報を表示させることが出来たらバイファムのOPみたいでCoolじゃね？と思って10年位前にMicrochip社のPICの開発環境一式をそろえました。しかしながら、いざやろうとしたらPICは難解だし、そもそもとっかかりとして何をしたらよいのか分からへんやん！と急激にやる気をなくし、そっと机の奥の方に開発環境をしまったのでした。

時は流れ、2018年。車のエンジンが急にかからなくなるというトラブルに遭遇し、我が愛車アルファロメオ155 V6は1ヶ月ほど原因不明で整備工場に入庫していました。

車が修理工場に入っている間、並行して自分でも色々と調べているときに次の本に出会いました。

**「カーハッカーズ・ハンドブック ―車載システムの仕組み・分析・セキュリティ」**
https://www.oreilly.co.jp/books/9784873118239/
https://www.amazon.co.jp/dp/4873118239

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17940/f3d22199-4a82-c4e2-053f-6c02d5e0a4c0.png)

この本の第7章に「ECUテストベンチ」なるものが書かれていて、「あっそういえば昔そんなことしたいと思ってたよな」と思い出しました。

2018年。世の中はIoTだので浮かれ、わたしのような善良な一般市民でもArduinoを使えばお手軽にECUと楽しく会話ができる。そう信じていたのでした。

修理工場に入っていた愛車は、最終的に盗難防止装置(イモビライザーユニット)の電解コンデンサから液漏れしていたのが故障の原因でしたが、生産終了から20年たつ車両なので当然メーカーから部品の供給はありません。電解コンデンサを交換し、車は無事に復活を果たすのですが、私の心には次のような思いが残りました。

- 小さな部品が壊れるだけで車は廃車になってしまうこと
- 知識があればそんな車を救うことができる可能性があること

**「じゃあ、なってやろうじゃないの。カーハッカーってやつによ」**


## 想定読者
OBD-II、CAN-BUS搭載車**「ではない」**車両を持っており、車両の診断ポートよりセンサー情報を取得してごにょごにょしたい人が想定読者です。おそらく2000年以前の車両です。私の車両は、1996年式のイタリア車です。BOSCH社のMotronic 1.7が搭載されたECUを使っています。この記事は、もしかしたら最近の車両のスタンダードであるOBD-IIの車両に乗られている方にも参考になるかもしれませんが、よくわかりませんし、もっと手っ取り早い方法がいくらでもあるような気がします。

# やりたいこと
- なんとかしてECUから情報を入手する
- 入手した情報をもとに何かする。例えばLCDに情報を表示して自慢する

# 準備物(とてつもなくコンテキストに依存します)
外は暑いし寒いし虫がいるし、車にのって開発するわけにもいかないので家で開発環境を構築します。

- ECU(コンピュータ)
    - ヤフオクなりなんなりで自分の車種と同じものを入手してください。わたしはeBayあたりで買いあさりました。海外の出品物は、土に埋めて保管してたの？くらい汚い商品があります。『おまえ、それ良く売れると思ったな？』と思いながらポチります。ECUにワイヤーハーネスが付いているものが配線するのに便利で望ましいです。まあ、なかったらなかったでなんとかなります。
    - 盗難防止装置
        - わたしの場合、診断ポートの配線がここにきている関係上、必要でした。
        - ECUと同じ車両から取り外したものをゲットするようにしましょう。盗難防止装置を解除するキーもあると最高。ないと最低。わたしほどのカーハカーになると盗難防止装置からキー情報を抜き出してキー(トランスポンダー)を複製し事なきを得ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17940/20545e23-81dc-ebcc-c4bd-26dac20765dc.png)

- 電源
    - ECUに供給する電源です。たぶん12Vでしょうから安定化電源か、12VのAC/DCアダプターを使うかしましょう。
    - 安定化電源は古いデスクトップPCの電源ユニットを改造したら作れます。お暇ならどうぞ。

- Arduino nano every or UNO
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17940/ad7b0f09-d35c-0596-957a-eeac8baee1fd.png)

    - ECUと通信するためのプログラムをここに入れる
    - 車載するならNano everyがおすすめ。小さいから。とりあえず遊びたいだけならUnoで。配線しやすいから。
- LCD(日立HD44780互換のやつ)
    - データを表示するためのもの。こだわりなければなんでもよし。私は車と調和させるために緑色のLCDにした。I2Cできるものが配線少なくできてよろし
- ECUとArduinoをつなぐ回路
    - ArduinoとECUを直接つなげないので回路を作りました。Arduino 5Vと車両側12VのK-LINE/L-LINE、それぞれのシリアル通信を行うレベル合わせを行う回路です。L9637というISO 9141対応チップを使っていました
    - おそらく同じような回路を作る必要が出てくるかと思います
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17940/296cceb4-c0fd-baac-0ff1-ce3e6f0bddcb.png)

- 市販のECUとPCとで接続できるソフトウェアと接続用のインターフェイス
    - 作成したECUワークベンチとの接続テスト/プログラムの参考にするため通信のモニタリングをします
    - そんなのがあるならワークベンチとか必要ないだろって思うでしょ？でもやるんだよ。
    - わたしはMultiecuscanというソフトウェアを使いました
        - やってみてわかりましたが、このソフト、データ通信のタイミング？に問題あります。ぼくが作ったソフトウェアは完璧です。


外にも工具やら電子工作用の部品やツールなどあったらいいものたくさんありますが、これ無かったら無理ゲーだったなーってものを載せときます

- ワイヤストリッパー
    - ECUの配線つくりやケーブルの被膜剥きを大量にするのであると超便利
    - 工具屋さんのストレート製が精度よいし安くていい感じ　https://www.straight.co.jp/item/12-107/
- ロジックアナライザ
    - 電気信号を確認するもの。ECUからの信号やこっちから信号がちゃんと送れているか確認するのに必須。Amazonの安いやつで対応。これないと無理。まじ神。
- ブレッドボード
    - 最初ブレッドボードの使い方良く分からなかったので、いきなりユニバーサル基板に回路作ったりしていました。失敗してる箇所も良く分からんし、そもそも作るのに時間もかかるし、間違えてても修正が簡単にできないしで、試作の王道のブレッドボード使ってみたらまじ神。過去の俺まじアホ。

他にもいろいろと必要なものがあると思いますが、書ききれないし、読んでいる方が必ず必要かどうかは分からないのであとはやりながら見つけてみてください。試行錯誤するのって楽しいです。


# 配線する
材料がそろったら配線しましょう。ここでのゴールは、ECUに電源を供給してECUがスタンドアロンで動作するところまでとします。配線ですが、やみくもに接続するとせっかく集めたECUがあの世に行ってしまうので、製造元が出している整備書を入手しましょう。ググったら見つかることもあります。なければディーラで買うとかしましょう。

具体的には以下のような配線図を見て、電源供給しないといけないプラス線とマイナス線(アース線)を判別していきます。そういえば配線図を初めて見たときはさっぱり意味が分かりませんでしたが、しばらく眺めていたらなんとなく分かるようになりました。皆さんはわたしよりも賢いと思いますので分からなくてもしばらく見続けたらよいと思います。

あと私の場合は、自分の車の現物と配線図が微妙に食い違っていました。配線のないはずのピンに配線が来てるとか配線図がいい加減だったりします。そういう場合は、同系統のエンジンを搭載している車種の配線図を見たり、想像力でおぎなったりして対応しました。さらに深く潜って調べれば判明するかもしれませんが、そこまでの気力はありませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17940/ced24a2a-2e65-21aa-20b0-6d75208f420d.png) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17940/40629fe5-1b4e-7961-461e-d44659ea591d.png)

- 中古のワイヤーハーネスが入手できなかったら適当なメス型端子をECUのピンにぶっ挿して接続しましょう。端子は[配線コム](http://www.hi-1000.com/)でサイズみたらええ感じのが見つかると思います。
- 配線同士の接続ですが、[ニチフの圧接形中継コネクタ](http://www.nichifu.co.jp/j/pickup/NDC2420.html)が良い感じです。当初車用のド定番のギボシ端子を使っていましたが、外すとき固いし絶縁しないといけないしオスメスあるしで非常に面倒です。ニチフの圧接形中計コネクタを使ってすべてクリアになりました。
- プラス線とマイナス線はそれぞれ端子台を用意して、固定していくとよいと思います。


# 接続テストをする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17940/b79ed395-61b0-2948-574b-0e3d81233289.png)

ECUの配線ができたかなーとおもったら、ECUをPCやスマホに接続して接続できるか試してみましょう。
一応、配線間違ってないかとか、配線むき出しになってショートしそうになっていないかとか確認しましょう。間違っていないと思っている人が間違いを見つけるのは至難の業だとは思いますが。

なお接続方法は車種によって違うと思いますが、USBやWiFi、BlueToothなどの選択肢があるかと思います。
わたしはPCにUSB接続し、Multiecuscanというソフトを使って接続確認をしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/17940/e4084bf5-69f1-1361-41fd-f166aace8d9f.png)(センサーから入力がないのでほぼデータはおかしい)

ECUと接続出来てデータが取得できていたらひとまず成功です。もしECUに接続できないなら配線が抜けている可能性があります。わたしはプラス線を一本見落としていて、それで接続ができなかったです。(ふてくされている時間も含めると約2週間は無駄にしたと思います)

ということでECUテストベンチができたら、自宅でゆっくり開発ができます。
今回はここまで！次回は気が向いたら、ArduinoとECUの通信部分をやります。