RX-8とOBD-IIでお話をする – 動作確認

ELM327の載ったデバイスを手に入れたので、今エントリでは実際に自動車に取り付けて動作確認をしたいと思います。

前回のエントリで自分はBluetooth版デバイスを買いましたが、基本的にデバイスとお話しする方法はシリアル通信となります。RS-232C接続(つまりシリアル接続)の場合には該当するデバイスとお話をすればいいですし、USBやBluetoothの場合、各OSで仮想的なシリアルデバイスを作成できます(WindowsだったらCOM1とか、Macだったら/dev/tty.*とか)。

MacだとBluetoothで仮想デバイスを使って常にお話しするのはどうも安定性に欠けるようなのですが(Snow Leopardは長く試してないので改善しているかもしれません)、いずれにせよ動作確認のためだけであれば問題ないでしょう。

普通だったらここで実際に配布されているソフトウェアを使って動作確認をするのでしょうが、自分の場合は(それだとつまらないので)実際にターミナル経由でデバイスと直接お話をしてみることにします。

プロトコル

ELM327は古き良きATコマンドを含む対話型のインタフェースを提供しています。詳細は前回のエントリでも紹介したELM327のデータシートに書かれているのでそれを参考に進めます。

ま、英語なので斜め読みして頂くとして、重要なのは5ページ目の “Communicating with the ELM327″からです。曰く、「>プロンプトが出てきたらコマンド入れてリターンすれば結果が返ってくる(超訳)」とのこと。ま、そのほかにも大文字小文字区別しないとか、スペースをどこに挿入しても関係ないとかいろいろ書いてありますが、ま、気にしないことにします。

で、そのコマンドですが7ページ下部からずずっと載っています。

AT Z とするとreset allです。デバイスが再起動します(車の情報をリセットする訳じゃありません)。このときにELM327チップのバージョンが分かります。

AT RVとすると、ELM327に届く電圧(≒バッテリの電圧)を測ることができます。定格12Vですが、実際にはもう少し余裕を持った値になっている可能性があります。

実際にバッテリの電圧を調べるということを22ページ目で示していますので、参考になります。

このコマンドがATで始まらない場合には、ELM327は入力されたコマンドをOBDコマンドと解釈します(23ページ)。24ページ以降に実際にOBDコマンドがいくつか紹介されていますが、WikipediaのOBD-II_PIDsを見た方が手っ取り早いかもしれません。

たとえば、01 05 と打てばEngine coolant temperatureがわかり、01 0Cと打てばエンジン回転数が分かります。

接続

ELM327は、数多くの車種に対応しています。さらには、それらの車種で使われている詳細なプロトコルを自動判別して差異を吸収してくれるすぐれものです(ELM326にはそのような機能はなく、CANを使うマツダ車などは対応していなかったようです)。

車によってコネクタの位置が違うのですが、これは他社さんのページで申し訳ないのですがBLITZなど、同じコネクタを使う製品を出されている会社の情報を参考にするとすぐに分かると思います。たとえば、こちらのページから参照できる車種別適合表などは参考になると思います。

ターミナル

シリアルな機器と(手っ取り早く)お話しするときには、ターミナルを利用します。ZTermとかいろいろありますが、自分はminicomを使いました(macportsからインストール)。まぁ、お好きな物を使えばよいと思います。

基本的にデフォルトで動きましたが、add linefeedはonにしないと全て同じ行に表示されてしまいました。実際の様子はこんな感じです。

いろいろ返事がもらえていますが、OBDコマンドの場合には3バイト目からが実際の値になります。

たとえば01 0Cの返事に

41 0C 0D 2F

が返ってきていますが、ここで大事なのは0D 2Fです。これを16進数から10進数に直すと3375です。この値はエンジン回転数の4倍の値が返ってきているので(wikipediaの該当部分参照)、実際の値は843.75rpmとなります。RX-8のアイドリング時(エンジンが暖まってきた後)はだいたいこんなものなので比較的正常な値が取れていることが分かります。

とまぁ、デバイスもきちんと動いているようなので、次回からは実際にプログラミングをして値を取り出すことにしてみます。

RX-8とOBD-IIでお話をする – 準備

久々の投稿です。

OBD-IIという自動車のコネクタを通した各社共通の診断プロトコルがあるのですが、そいつを日曜プログラマでも簡単に扱えるようにするELM327というチップが存在することを知りました。 そして、そのチップを使ってシリアルやらUSB、Bluetoothなどでパソコンからお話をするデバイスもいくつか売り出されているようです。これを使うと、エンジン回転数や速度などの基本情報、それにエンジン温度や瞬間燃費等の普通は知ることのない情報をリアルタイムに取得することができるようになります。

え、そういうのだったら既に売ってるって? ええ、BLITZ R-VITとかそうですよね。仕組みはまさに同じなのですが、自分でのプログラミングだと簡単にログをとったりいろいろ遊ぶことができます。逆にそういった加工をしないのであればこちらの製品のほうが手っ取り早いと思います。 自分の場合は、パソコンと連携していろいろやってみたかったってことと、どうせすぐに飽きるのに4万とか5万とか出せないので自作することにしました。OBD-IIから情報を取り出すだけなら5000円くらいのパーツだけで済んでしまいますので。

というわけで、この投稿から数回にわたってELM327を使って車とお話しするアプリ製作の備忘録を書いていこうと思います。

今回は、ELM327を搭載したデバイスを手に入れるフェーズに関して記載します。

デバイスの選択

ELM327は、(ちょっとプログラムを組むには面倒な)OBD-IIプロトコルを、シリアルコンソールを用いて容易に自動車とお話しすることができるようにするICチップです。 ELM Electronicsという会社が作っていて、オンライン上にはELM327 のデータシートクイックリファレンスシートなどもあります。これらはプログラム作成時に利用します。

このELM327を使ったデバイスであれば基本的にどのデバイスでもデータを読み出せます。実際にUSB、RS-232C接続、Bluetoothなど、多くのバリエーションが存在します。そんな中で、自分は以下の理由からBluetooth版を選択しました。

  • 出来るだけ車内に配線を這わせたくない
  • 自分の車(RX-8)の場合、運転席ハンドル下部に端子があるため、何らかの拍子にケーブルなどが外れた場合にアクセルやブレーキに巻き込まないか心配
  • Macを使っているので、USB版はドライバが存在しない可能性がある。それにひきかえBluetoothはSPP (Serial Port Protocol)経由でデータを読み込むためドライバは不要
  • Bluetoothの弱点は電気をよく食べることですが、それもダイナモが動いてるときしか食わないのでバッテリもあがらないはず
  • ELM327はECUのデータ書き換えなどの機能はないので、万が一(無線なので)外部からいじられても大した被害にはならない。

ただまぁ、プログラミングのし易さで言えば有線の方が簡単ですし安定するはずです。どれを選ぶかはオーナー次第ですね。

デバイスの購入

そんなわけで、自分はBluetooth版のものを購入することにしました。Googleでいろいろ調べたところ、deal extremeという会社で売っていたELM327 Bluetooth OBD-II Wireless Transceiver Dongleを見つけたので、これを購入することにしました。deal extremeはPayPalを使って決済が出来るので、海外のサイトにクレジットカード番号を教えたくない、という人でも安心だと思います(自分はあまり躊躇しないで買ってしまいますが)。 金額は55ドルほど。2009年末に注文をしたのですが、円高でしたので助かりました。PayPalはドル決済と円決済を選べるようですが、ドル-円レートはクレジットカード会社のもののほうがだいぶ良かったので、PayPalではドル決済を選びました。なお、送料は無料です。

この会社、倉庫は香港にあるようで、商品出荷時には国際郵便の追跡コードをメールで知らせてくれます。自分の場合、出荷してからだいたい一週間で届きました(出荷まで半月くらいかかってましたが…)。

この青い部分が本体です。CDにいろいろソフトが入っているようですが、今回は使いません。いきなりプログラミングです。 そのプログラミングは次回以降に。

DarwiinRemote 0.5をリリースしました

ごぶさたしております、Hiroakiでございます。

やっとこさVersion 0.5のご案内です。
今回のバージョンでは、クラシックコントローラのサポートおよび、これまで懸案の一つであったPPCマシンでの不具合の修正が行われています。
ダウンロードはこちらよりどうぞ。


そういえば、先月末に発売されたMac People 2007年4月号にWii関連の特集が組まれてDarwiinRemoteも紹介されました。
DarwiinRemoteの動作に関する質問や、ゲラ刷り原稿が編集の方からPDFで送られていてチェックを頼まれたりしたので、てっきり献本等のお話があるかと思いきや…。結局特に何もなく。
こちらから何か言うのもなんなので、自分では結局買わないままです。読みはしましたけど、ね。

記事自体はとても簡潔に操作法などが纏められているので、DarwiinRemoteの使い方が分からないなどの場合にはご参考になさってください。分かりやすいと思います。

DarwiinRemote and WiiRemoteFramework 0.5 have been released!

Hi all,

I’m very sorry that I was far away from developing DarwiinRemote…
anyway, I’ve released new version of DarwiinRemote and WiiRemoteFramework.


The latest DarwiinRemote supports classic controller, and some critical bugs including PPC issue were fixed. Please download the software from here. Enjoy!


In this version, especially Jasen made great efforts to improve the framework 😉

DarwiinRemote 0.4をリリースしました

なんか、Nobiさんに「なお、現行のバージョンは、やや技術スキルがある人を対象にしたものなので注意が必要だ。」と書かれてしまって、まぁ、確かに英語だけしかなければ普通の人は使うのを躊躇するかなぁ、なんて思ってしまった最近です。
というわけで、日本語でもリリースを書くことにします。日本語はFAQ以来なので少々詳しく書きます(あと、「日本語だから」ってのもありますけど^^;)。

DarwiinRemoteはご存じの通り任天堂のWiiについてくるWiiリモコン(単品でも買えます)をMacで使うようにするためのソフトウェアです。
今回のバージョン0.4では、以下のことが出来るようになりました。

  1. 拡張コントローラの一つであるヌンチャクに対応しました。
  2. 今までは自分でセンサの値をキャリブレーションする必要がありましたが、Wiiリモコン内部の値も使うことが出来るようになりました。
  3. Wiiリモコンのボタンを押した際に起こるイベントをカスタマイズできるようになりました。カスタマイズデータを保存することも出来るので、場面場面で切り替えることが出来ます。DarwiinRemoteメニューから、Preferences…を選んでください。
  4. マウスの移動速度を調整できるようになりました。

ダウンロードはこちらからどうぞ。この中にある、DarwiinRemote0.4.dmgというのがそれです。クリックすると、どこからダウンロードするか選べるはずですので、リストの中からどれかを選んで「Download」をクリックしてください。


クラシックコントローラへの対応とか、ヌンチャクのジョイスティックの対応とかやることはたくさんあったのですが、あまり間を開けるのもどうかなと思い、実用性があがって一段落ついたものをリリースしました。
ちなみに一般の方にはどうでも良いことですが、キーのカスタマイズはCoreDataとCocoa Bindingという比較的新しい技術を使って実装しました。初めて使いましたが、なかなか便利で良いですね。ただ逆に、10.3では確実に動かなくなってしまいました(今までのやつは、おそらくちょっとファイルを変えれば動いたはず)。まぁ来月には10.5も発表されるので大目に見てください。


P.S.
これまで微妙にamazonへのアフィリエイトリンクを貼っていましたが、このエントリだけはずいぶん貼ってあります(笑
もしまだWiiリモコンを持ってないという方は、よろしければこちらのエントリのリンクから飛んでamazonで購入してもらえると嬉しいです。いくばくかのお金(売り上げの3%くらい)がHiroakiのもとへ入ってきます。
ただまぁ、そんなことをいっても実際のところあまり期待はしていないのです。というのも、これまでのエントリで得られた紹介料は130円ですから(笑


次のバージョンではクラシックコントローラへの対応をやりたいです。
しかし、DarwiinRemoteで使うとなると「ジョイスティック」は何に使えばいいんでしょうね。もう一方のWiiRemoteFrameworkではいろいろ遊べそうですけれど。

DarwiinRemote and WiiRemoteFramework 0.4 have been released!

Hi all,
We’ve just released DarwiinRemote 0.4 and WiiRemoteFramework 0.4.

New features of DarwiinRemote are…

  • supports Nunchuk (sorry still not Classic Controller, but will support soon)
  • supports custom key mappings; you can customize mappings, save and load it.
  • supports mouse sensitivity
  • supports motion sensor auto calibration

New features of WiiRemoteFramework are…

  • supports communicating with Exspansion devices (now Nunchuk only)
  • posts notification when Expansion port is plugged and unplugged
  • post notification when battery is low
  • can retrieve calibration data

Enjoy them and please let me know what you notice about these software.

Download from here!

DarwiinRemote 0.3.1 and WiiRemoteFramework 0.3.1 are released!

Hi all,
We’ve just released a new version of DarwiinRemote.

This version supports battery status and fixes some bugs. Please use this version for all users.
You can download it from here(SourceForge.net)


The most important feature for developers is that DarwiinRemote has been divided into 2 parts, App part and Framework part. Now you can use WiiRemote Framework in your projects independently.
Please check sources of DarwiinRemote and WiiRemoteFramework at sourceforge.net.
If you are interested, develop your projects and introduce us at public forum in SourceForge.net.

WiiリモコンをMacからいじる

tokkyoくんに遅れること数日。

昨日から始めたWiiRemoteをMacで操るプログラミングですが、とりあえずこんな感じに。
グラフがふにゃっとなってるのは、OpenGLのキャプチャがうまくいかないからです。

ビットマスクとかせにゃならんボタンはとりあえず置いといて、

  • 3軸加速度センサのデータ
  • LEDのOn/Off
  • バイブレータのOn/Off
  • Wii RemoteのInquiry

は完成。

ボタンの判定のコードを書いたらひとまず公開して、他の誰かにきっちりしたのを作ってもらいたいところです^^;


しかし、Phidgetsなんかと比べてもかなり精度の良い値が返ってきますね。
これが4000円しないってのは凄いことだと思います。
これから、学会発表のプレゼンでWiiRemoteを見ることが増えたりするかも(笑

DarwiinRemote 0.3 is released!

It’s time to buy 2 candles 😉

Hi all!
DarwiinRemote 0.3 is released!! This version supports IR sensor and motion sensor calibration. Enjoy!

From this version, DarwiinRemote is hosted on SourceForge.net. Please download binary and sources of this version from here (sourceforge.net).

For developers:

I plan to divide Wii Remote Framework from DarwiinRemote.app. By using the framework, you might be able to use Wii Remote in your projects easily. It will include some additional functions such as various analyzing method like gesture recognition.

What do you think about this plan? I’m still not sure whether I can do that, please help
 this project if you interest.

Project site is here (sourceforge.net)

DarwiinRemote 日本語FAQ

なんか、海の向こうで大変盛り上がってしまったようで、作った本人がびっくりしております。次のバージョンでは遂にIRセンサが組み込まれるので楽しみにしていてください。SourceForgeで公開する予定です。
あと、加速度センサの値の変換もあまりに適当だったのでやり直します。

さて、ちょっとDarwiinRemoteでFAQ的なものを日本語で書いておきます。

  • これは何なのか
    • 任天堂のWiiに付属する(単品でも購入可能)WiiリモコンでMacを操作するものです
    • 現在のところ、三軸加速度センサとボタン、LED、バイブレーションモーターなどをサポートしています
    • AppleRemoteっぽいこともできます
  • 動作環境
    • Mac OS X 10.4以上
    • Bluetoothを接続できるマシン(某所で言われたIRポートはいりません)
    • Intel CoreでもPowerPCでもOK
  • マウスモードでカーソルがきちんと動かない
    • Wiiリモコンの加速度の値は個体差があるようです。次のバージョンではキャリブレーションの仕組みを導入します
    • そもそも傾けて操作するのは難易度が高いです。次のバージョンではセンサーバーを使ったポインティングも導入します
  • キーバインディングが変
    • できればキーバインドをコンフィグレーションできるようにしたいです
  • WiinRemoteの移植なのか
    • 違います。作者のtokkyoくんは同じ研究室の後輩ですが、コードを共有しているわけではありません。WiinRemoteの実装言語はDelphi、DarwiinRemoteの実装言語はObjective Cです
  • Wiiリモコンをハックするのは難しいのか
    • 単にデータを読み取るだけであれば全然難しくありません。ドライバを書こうとするとちょっと大変かもしれません
    • WiiLi.orgの情報だけでデータ取得できます
  • なんで英語の情報がメインなのか
    • WiiLi.orgで得た情報なので、まずは成果を還元すべきという思いから英語をメインにしました
    • 英語で書くと、アメリカだけではなくて多くの国の人が読めるというのもあります

では、今後ともよろしくお願いします。
技術的なこと、それ以外のことでも、何かありましたらコメントを残してもらえると嬉しいです。