車速、エンジン回転数はもちろん、燃料噴射量、水温、油温その他もろもろの制御データーが簡単に取り出せる、はずなんだけど欧米ではODB-Ⅱという統一規格情報開示が20年も前から義務付けられているのに、島国日本では非公開のメーカー独自規格が横行していてデーターを利用した開発が難しい。あらゆる商売は情報格差により利益を生むけれど、そこを乗り越えて自由競争による全体利益拡大を目指してほしい。

   ELM327は独自規格の壁を乗り越え、複雑なパルス信号を簡単なバイトコードに翻訳してくれる義賊のようなマイコン。シリアル通信(RS-232C準拠)だからパソコン、スマホ、マイコンなどあらゆるコンピューターと無料のターミナルソフトなどで通信できる。そこにBluetoothモジュールまで付けてなんと900円ですよ、奥さん!今なら送料無料!


   RS-232Cを無線でスマホと通信できるBluetoothモジュールは単体で買うと普通3000円以上する。写真の青い基板だけでも元が取れる値段だ。

  パソコンのUSBに挿すBluetoothドングルが200円で、なんでその部品が10倍以上もするのか、マイコン使いとしては重大な問題。ドングルはシリアル信号をUSB信号に変換してパソコンに送り、パソコンでシリアル信号やその他の信号に再変換する。再変換はパソコンにとってはなんてことない作業だけど、ワンチップマイコンには重労働でそれなりのメモリやUSB-IFを備えたマイコンならドングルで通信できるけどPIC24FJ64GB***やPIC32MX**F64などになり500円はする。まぁPC-9801世代の私にはワンコインマイコンでこんな作業ができるなんて夢のような話だけれど、ドングルが安くても周辺部品を含めれば1000円、モジュールよりは安いけれど原価としては高すぎるし無駄な手間もかかる。
 

 ELM327の基板をよく見てみると、チップの上にPIC18F25K80と書いてある。正体は200円ほどの8ビットマイコンだ。これならPickit3をICSP接続してプログラムを書き込めばBluetooth汎用マイコンボードになる。都合いいことにOBD2コネクタとの接続は2.54mmピンヘッダなので、ユニバーサル基板にリレー、FETや温度センサーなどを乗せてコネクターの代わりに2段重ねすれば各種機器の制御が可能。

 これを発展させてキャンピングカーマイコン制御計画 を達成したい。LED制御専用ICのLT3791 を電源制御に応用して達成するつもりだったけれど、0.5mmピッチ基板作成が必要で技術的課題が多かった。ELM327基板の転用により低価格での開発に目途がついた。電力変換効率を上げるのは専用ICに比べると難しいけれど、そこは目をつむりまずはプロトタイプを仕上げ、その間に高性能なFETやハイサイドブリッジICが安価で供給されることを期待したい。  

 PIC18F25K80はCAN(車載ネットワーク)用マイコンだけど、ECCP(PWM)、12bitA/D、1KBのEEPROMなど周辺モジュールはPIC18F14K50 より充実しており、電力制御ICとしても適性だ。USB-IFはなくてもEUSARTでBluetoothモジュールとシリアル通信すれば14K50より使いやすい。なんたって無線だし。14K50は昨年散々いじり倒したので、同じ18Fシリーズだから扱いは容易だ。日本語データーシートはないようだけど、14K50の日本語データーシートを使えばいい。
 さて、スマホブームである。あれはケータイというよりパソコンだ。数年前のパソコンより高性能。しかもBluetooth標準装備、これは身の回りの他のコンピューター(パソコンだけでなく電化製品、車、家屋)との高速通信、つまりあらゆる設備の操作盤になりうる。電話機だけにしておくのはもったいない。 
 ところが受信機となるBluetoothモジュールが高価なのが問題で、スマホ家電やスマホ車に活路を見いだしている大企業に価格操作されている可能性がある。大企業はもっと基礎研究に力を注いで欲しいけれど、見た目に大金を払う消費者も悪いので気持ちはわかる。

 iphoneとandroidでほぼ拮抗しているけれど、開発環境からいえばMacでしかプログラムできずBluetooth4.0LEしか正式サポートせずアプリ公開が有料なiphoneはつらい。Mac持ってないし。オープンソースにより自由競争と全体利益の向上を目指すgoogleアンドロイド陣営に付くこととしよう。Javaは初めてだけど、少々方言と基本クラスを覚えればC#と変わらない。eclipseもMicrosoftのVisualStudioと似たようなもの。

 ELM327本命の使い方はBluetooth汎用マイコンボードとしても、本来のOBD2翻訳機としての使い方は外付けタコメーター、高精度燃費計や車マニア向けのブースト圧など各種メーター表示、故障診断機など。PIDコマンドを送るとデーターがバイトで帰ってくるからスマホのプログラムは簡単だ。ELM327のデーターシートにやり方は書いてあるけど簡単に言えばAT SP 0で通信方式をスキャンし決定したら01 00でサポートしているデーター項目(速度、燃料噴射量、負荷率など)をビット判定、01 [フラグが立った項目番号] を投げればデーターが帰ってくるので簡単な演算をすれば実数値になる。
 まずはandroid-Javaの練習にエコメーターアプリでも作ってみたい。さらに発展させればスマートエントリーやカーシェアリングなどに応用できるだろう。  

 
 
 eclipseのサンプルプログラムのひとつ、Bluetooth Chatを2箇所修正するだけで車とチャットできる。プロダクトキーのようなUUIDをシリアル通信(SPPプロファイル)用の文字列に書換え、sendボタンを押したときの送信処理OnClickListener内の送信文字列にキャリッジリターン(\r)が加わるようにする。
 これをベースに送信処理を自動化し、応答バイトをグラフ表示するようにプログラムすればいろんなアプリが作れそうだ。三角関数でメーター表示してもおもしろい。

 写真では3つのATコマンドを投げている。ATコマンドは設定のための独自命令なので初期化処理以外では使わないけれど、とりあえず手持ちのACアダプタと電源ピンをつなげただけで車とつないでいないためPIDコマンドは使えないので試しにやってみた。at rvは電圧表示、ACアダプタの9Vが帰ってきてる。at bdはバッファのダンプリスト、16進数で12バイト以内が帰ってくる。at dpは現在のプロトコル設定を表示、ELM327は10種類のプロトコルをサポートしていてAUTOで判断、解析してくれる。

 ナイトライダーのナイト2000はもう作れるな。
 ところでロデオもファスターもOBDコネクタないんだよね。なんせ昭和なもので。





トップへ戻る