• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

satto.v11のブログ一覧

2024年04月27日 イイね!

N-ONE JG3のOBD-2をハックしてみる


今回新車でN-ONE JG3を購入しナビやETCの取付品が落ち着いたのでちょっとOBD2で遊んでみます。
6年前にもココでも遊んでいますが、N-ONEでもOBD2のデータが拾えるものかどうか試してみます。
最近の車はOBD2で規格化されたプロトコルで車両の診断や車両データをタイムリーに取得できます。通信はCAN通信を使ってECUとやりとりできるのが一般的です。
HONDA N-ONE JG3についてもOBD2のコネクタがついており自作回路を作成してハッキングしてやろうと目論んでいます。

今回こんな回路図を書いて…


ユニバーサル基板なので見栄えは悪いですが、こんな回路を作ってみました。
黒くて大きなコネクタがOBD2の一般的なコネクタでN-ONEは運転席左下にあります。


回路の概要としては…。
①マイコンを使って命令コマンドをCANコントローラーへ向けて発行します。
②CANコントローラーより返答のあった車両データをマイコンで処理してそのデータをBLEモジュールへ送信します。
③データを受け取ったBLEモジュールはiPhoneに向けてBluetoothに乗せて車両データをiPhoneに送信します。
④iPhoneは受け取ったデータをアプリで処理を行い画面表示します。

今回は簡単な自作iPhone用のアプリも作成していきます。

回路の構成は以下のようなチップで構成されています。
【CANコントローラー MCP2515】
マイクロチップ社のCANコントローラーでSPI通信を使ってさまざまなコマンド命令を行い車両と通信を行うためのチップです。これを中心にシステムを作っています。マイコンで命令コマンドSPI通信で送りその結果がSPI通信で帰ってきます。

【CANトランシーバー MCP2551】
マイクロチップ社のチップで車両とCANコントローラと物理バスの間のインターフェースデバイスです。回路と車両を繋げるためのチップって考えても良いと思います。MCP2515と組み合わせて使います。

【BLEモジュール RN4020】
マイクロチップ社のBluetoothモジュールです。今回は通信結果をiPhoneに表示させます。この回路とiPhoneはBluetoothを使った無線通信でデータを送ります。そのためのモジュールです。CANコントローラーから送られたデータをマイコンで受けこのモジュールにデータを送りひたすらデータをiPhoneに飛ばします。マイコンとの通信はUART通信というプロトコルでやりとりします。

【マイコン PIC32MX270F256B】
このマイコンでCANコントローラーへSPI通信で命令コマンドを送信。そして結果をRN4020のモジュールにUART通信で送信するのがこのマイコンの役割です。中身はレガシーなC言語でプログラムを書いています。実はこのぐらいの処理であれば32ビット級のマイコンは必要ありません。8ビットマイコンで十分ですが、今後なにか別のディスプレイに映すとかグレードアップした時に速いマイコンが必要かも?ってことで今回は高級な(?)マイコンを使っています。明らかなオーバースペックです。

裏はこんな感じです。手作りなので見栄えは悪いですが機能はします。


車両には運転席下のOBD2のコネクタに接続します。
電源はOBD2からも取れますが、常時電源で扱いにくいのでACCから取っています。iPhoneとはBluetoothの無線通信なのでどこに置いても良いです。


今回のために簡単なテスト用のiPhoneアプリを作りました。言語はApple公式のSwiftです。ただ送信されたデータを計算して表示するだけの簡単なアプリです。


今回はOBD2通信の中身を探るだけのアプリなのでそっけないものですが、
接続ボタンを押してBluetoothの通信接続を開始して1秒ごとにOBD2へのリクエストを命令して返答があったものをテープルへ表示するソフトです。



ここからはOBD2の処理を知る上でちょっとコアな部分です。
OBD2通信ではリクエストとして送信先のECUの指定はCAN IDと呼ばれる番号で指定します。これはISO規格で定められており、11ビット標準識別子か29ビットの拡張識別子に分かれています。前回AUDIのOBD2は11ビット標準識別子が使われていたのですが、ホンダ系のOBD2は29ビット拡張識別子が使われているようです。
29ビット識別子には0x18DB33F1という特別な29ビット拡張識別子があり、この識別子を送信するとリクエストが理解できるECUの全てから返答があります。
試しにこの識別子を送ると見事に0x18DAF110なるECUから返信があり、N-ONEの場合はこのECUと通信ができそうです。
このECUに対し1バイトで表されるPIDと呼ばれるIDを指定して取得したいデータを命令して返答を得ます。例えば0x01〜0x1Fであれば、以下に羅列したデータがあって、エンジン回転数が欲しければ「0x0C」を指定、車速が欲しければ「0x0D」を指定してやって命令すれば現在のデータが返信される仕組みです。こんなデータが160項目くらいあります。そのうちの32個。

PIDs Description
1 Monitor status since DTCs cleared.
2 DTC that caused freeze frame to be stored.
3 Fuel system status
4 Calculated engine load
5 Engine coolant temperature
6 Short term fuel trim (STFT)—Bank 1
7 Long term fuel trim (LTFT)—Bank 1
8 Short term fuel trim (STFT)—Bank 2
9 Long term fuel trim (LTFT)—Bank 2
0A Fuel pressure (gauge pressure)
0B Intake manifold absolute pressure
0C Engine speed
0D Vehicle speed
0E Timing advance
0F Intake air temperature
10 Mass air flow sensor (MAF) air flow rate
11 Throttle position
12 Commanded secondary air status
13 Oxygen sensors present (in 2 banks)
14 Oxygen Sensor 1
15 Oxygen Sensor 2
16 Oxygen Sensor 3
17 Oxygen Sensor 4
18 Oxygen Sensor 5
19 Oxygen Sensor 6
1A Oxygen Sensor 7
1B Oxygen Sensor 8
1C OBD standards this vehicle conforms to
1D Oxygen sensors present (in 4 banks)
1E Auxiliary input status
1F Run time since engine start

ここまで段取りできたので…。
実際に車両に接続して取得できる車両データを探ってみます。何のデータが対応しているのかについては探る方法があらかじめ用意されていて、ECUに対しPIDを指定して命令する際に0x00・0x20・0x40・0x60・0x80のPIDを指定してやると取得できるデータがわかるようになっています。実際に動かしてみます。


この結果から、PIDを0x00指定した時であれば「0xB6 0x3C 0xA8 0x13」の返答があり、PIDの0x01〜0x1Fまでで対応できるデータがわかります。この返答数値を2進数に変換して「0b10110110001111001010100000010011」って数列の「1」のフラグが立っている箇所の上のPIDのDescriptionの項目が対応できるデータです。
0x20であればPIDの0x21〜0x3Fといったようにフラグを確認していけば対応するデータがわかるようになっています。全てのデータを解析してみます。


結論。
N-ONEのOBD2は、0x18DAF110のECUがあり160項目のデータのうち39項目のデータが取得できるようです。
例えば目ぼしいところで言えば、「エンジン負荷」「ブースト圧」「エンジン回転数」「車速」「スロットルポジション」「電圧」「水温計」等々。

ここまでわかったのでハッキング作業は終了。
今後はこのデータを使って計器アプリを車両に負担がかからない程度に整備手帳で進めてみようかな?
ホンダ系のエンジンは全てこんな感じでOBD2のデータが取得できるのか?バイクはゴールドウィングを所有しているので試してみるのも面白いかも…。

Posted at 2024/04/27 07:14:24 | コメント(0) | トラックバック(0) | 電子回路 | クルマ
2018年02月11日 イイね!

OBD2の自作回路を見直してみた

OBD2の自作回路を見直してみた無線通信のプロトコルである「BLE」(Bluetooth Low Energy)を使ってiPhoneと電子回路を繋げて遊んでいます。
ここで「Koshian」ってBLE無線モジュールで遊んでいます。
このモジュールは金額が1,000円程度とお手軽なこと。小さなモジュールで回路の場所を圧迫ないこと。あとは、I/OやI2CやUART等の通信も備えており、それがiPhoneアプリから制御できるっていうのがこのモジュールの面白いところです。

去年の5月にOBD2のCAN通信の電子回路を自作しています(Ver.1)。今回この「Koshian」BLEモジュールを使って「CAN通信」の回路を作り直してみました。それに加えて、「CAN通信」の内容が回覧できるiPhoneアプリも作ってみました。
去年の10月くらいからのんびりと回路の構想やアプリのライブラリを作ってきてようやく形になってきたのでご紹介…。



回路基本構成は、「Koshian」BLEモジュール。「PIC16F1705」マイコン。「MCP2515」CANコントローラー。「MCP2551」CANトランシーバーの4つの石から構成されています。
電源は「MCP2551」は5V。それ以外は3.3Vを供給しており2つの電源が共有しています。まずはブレッドボードで電子部品の仮組みをしてテストを行っています。



iPhoneアプリからCANコントローラへのデータ経路としては…
①iPhoneアプリで「Koshian」BLEモジュールに向けて命令を出す。ここの通信はBLE4.0の規格に準拠した通信で当然無線です。データはCANコントローラのコマンドそのものを送信するようにしています。
②「Koshian」は受信したデータを「PIC16F1705」マイコンへ送信する。通信はI2C通信でデータ送信されます。
③「PIC16F1705」マイコンは受信したデータをそのまま「MCP2515」CANコントローラへ送信する。ここの通信はSPI通信です。マイコンはI2Cで受信したデータをCANコントローラで読めるSPI通信に変換して横流ししているだけの仕事です。
④「MCP2515」CANコントローラは受信データを「MCP2551」CANトランシーバを通して車両へ情報のリクエストを送ります。

ってな感じで「BLE」「I2C」「SPI」「CAN」と通信の違った規格を経て車両情報を取得しています。

本当は「Koshian」BLEモジュールはSPIにも対応しており上記の②をすっ飛ばして「Koshian」と「MCP2515」を直接SPIで制御するのがマイコン分の1つの石がなくなりスマートになると当初は目論んでいました。
どうも「Koshian」の標準にあるSPIのライブラリの動きが「MCP2515」に合わないらしく通信が途切れる現象があって直接通信を断念してます。
「Koshian」のファームウェアを更新する手もありますが、そこまでしなくても…って気になって結局マイコンでの制御に逃げています。

この制御方法は前回作ったVer.1.0の回路と比較して回路のデバッグやアプリの作り込みがかなりシンプルになります。
前回作成した回路は取得する車両情報は全て回路内のマイコン内でプログラミングされる構成で、マイコンがCAN通信を取り仕切っていました。
なので、何かバグがあると車に付いている回路内のマイコンを取ってプログラムを書き換えて修正後、テストを繰り返していました。今回の回路はマイコンはあくまでもデータの横流しのみのプログラムであり変更はありません。iPhoneアプリが全てを取り仕切っているのでデバッグも容易です。


実際にブレッドボードでテストを行い動きに問題はなかったのでとりあえずユニバーサル基板に配線して試作回路を作ってみました。


同時にiPhoneアプリを作成してみました。
「OBD2Viwer」って名前にしました。前回「Koshian」を味見した時には、ネットで公開していたObjective-C用ライブラリをブリッジを使ってSwiftで使っていました。
今回はObjective-CのコードをSwiftにコードを全て書き換えてネイティブSwiftとなるようにライブラリを作り変えています(これに時間がかかった…w)。
「MCP2515」CANコントローラ用のライブラリも作成してiPhone側のアプリで全て変更できるように作り込みを行っています。

アプリの目的は、「MCP2515」内のレジスタの読込と書換。とCAN通信のデータ確認だけのソフトなので、UITableViewを使ったいたってシンプルな画面構成としています。


所有しているAudi用の中身をハックする目的で作ったので、ISO15765に準拠した11bit標準CAN IDでMode01のみに絞ったCAN通信ができます。
同じCAN通信でも、日本ではK-Lineやホンダなんかは拡張フォーマットを使っていたりと様々なフォーマットを使っているみたい。別で所有しているスクラム(エブリー)は繋げてみると何か通信はしているけど違う結果が返ってくる(まだよくみてないけど…)。
欧州系の車にはこのアプリを使える対応車両は多いのではないかな?(試してないけど…)

お暇ならアプリの動きをどうぞ…。


このように、「CAN ID」と「PID」をリクエストするだけで車両データのレスポンスが確認できるアプリにしています。
「CAN ID」はネットワークで言うところのIPアドレスみたいなイメージで、11bit標準CAN IDではECUの数に合わせ「0x7E0〜0x7E7」までのIDが指定できます。所有のAudi TTには「0x7E0」と「0x7E1」の2つのリクエストに対してレスポンスが返ってきます。
ちなみに、レスポンスされるCAN IDはリクエストのCAN-IDに8を足した「0x7E8〜0x7EF」が返ってきます。
「PID」はMode01ではデータにあらかじめIDが振り分けられており動画では、「エンジン回転数」は0x0C。「コントロール電圧」は0x42。「水温計」は0x05のデータを取得しています。
PIDには各々換算式がありそのレスポンスデータによって車両情報が換算できます。


巷では「ELM327」なる同様なモジュールが安価に売っていることは知っています。中国のネット通信で買えば5ドルとか…。こっちをハックした方が早いんじゃない?って突っ込まれそうですね。実際に今回のようにコントローラやマイコンやBLEモジュールを買うだけで1,500円はかかります…。
「でも!自作に意味あり!」って私は信じてます。

何はともあれ、この回路とiPhoneアプリのライブラリでこれからは簡単にOBD2メータが作れるようになると思います。まずは「Koshian」モジュールが使用に耐えられる性能を発揮するかを確認して暇があればメーターアプリを作ってみようと思います。

暇あるかな〜w やるかな〜w
Posted at 2018/02/11 18:07:16 | コメント(0) | トラックバック(0) | 電子回路 | 日記
2017年09月24日 イイね!

BLEモジュールで遊んでみた

BLEモジュールで遊んでみたクルマの情報を取るためにiPhoneアプリを色々作ってきました。
こんなとここんなとことかこんなところでも…。

これらのアプリは、クルマの情報をマイコンで受けて、計算させて、BLE(Bluetooth規格)の無線で飛ばしてiPhoneに送って画面表示するような仕様になっています。

iPhoneと無線するにはBLE(Bluetooth Low Energy)に準拠したモジュールが必要となります。
世間では数種類個人でも買えるモジュールが存在しますが、5,000円近くするものも多く気軽に買えるものではありません。

今回Webで、Mpressionの「Koshian」(こしあん?)ってモジュールを見つけました。1,000円くらいの値段的にはお手頃なモジュールです。

この「Koshian」BLEモジュールは、ユカイ工学の「konashi」(こなし?)という小型化拡張ボード互換用のモジュールですので「Koshian on konashi base」で使用するのが通例のようです。

でも、koshianの内容を見ていたらなんとなくこれだけで繋がりそうなので1個買ってみました。
今回の目的は「KoshianだけでiPhoneと無線通信をする。」です…。

「Koshian」は、3.3V電源で駆動し、通信は「UART」「I2C」「SPI」が利用でき、「PIO0〜5」の6つのデジタルI/Oと「AIO0〜2」の3つのアナログポートを持っている。デジタルピンでPWMもできるみたいなので、任意のセンサーをくっつけてこのモジュールだけで色々制御ができそうです。

ただし、今回はKoshian単体で動かそうとしているのでちょっと工夫が必要。
Koshianについている端子は、ブレッドボードで使われている一般的な2.54mmピッチ
ではなく1.27mmピッチ幅となっています。


ブレッドボードでテストしようとすると、1つ飛ばしで端子をくっつけなければなんない…。しかも、1.27mmピッチのハンダ作業…。

んで…できた完成品が1枚目の写真…。
1つ飛びなので使用できる端子が限られます、使える端子から見ると外部との通信は「I2C」のみで、使える「I/O」は3つという仕様です。

で…。「I2C」が使えるようなので試しにPICマイコンとつなげてみます。
作った回路が下図。


今回の回路仕様…
①PICマイコンとKoshianはI2C通信。
②PICマイコン内で1秒刻みのタイマーを作る。
③PICマイコンのI/Oには1つの緑LEDをつけて信号で光るようにする。
④KoshianとiPhoneはBLE無線通信。
⑤iPhoneとKoshianが接続中は赤LEDを点灯させる。

回路仕様①の「I2C」接続については何回か作ったことがあるのでそんなに難しくないですが…。いままで作ってきたこととの相違点がいくつか…。

まずは、「I2C」通信は機器間で「マスター」と「スレーブ」がはっきり区切られています。マスターが通信の主導権を持っておりマスターが欲しい情報をスレーブに送信し、受信したスレーブがその情報を送信する形となります。
今回の回路においてはkoshianモジュールが「マスター」限定。PICマイコンPIC16F1705が「スレーブ」となります。マイコンがスレーブの振る舞いをするプログラムを作ればいいわけで、スレーブプログラムは初めてだけど、ここはマイコンのデータシートとにらめっこして理解済み。

あとは、Koshianの電源は3.3V。PICマイコンの電源は5.0VなのでI2Cを通信するには電圧のレベルシフトが必要になってきます。I2C通信を提唱しているPhilipsの仕様書ではFETを使ってレベルシフトをしていますが、今回はトランジスタを使ってレベルシフトをしています。普通に通信できているので良いのでしょう…w。回路中の2つのトランジスタがそれです。

回路仕様②〜③についてはマイコン内の「Timer0」と「Port」でちまちまプログラムをイジって作ってます。

回路仕様④については、要はiPhoneのアプリ作りになります。Mac上でXcodeでのコーディングとなります。
ユカイ工学の「konashi」小型化拡張ボード制御するために専用のSDKがネット上で公開されています。「Koshian」にもそのまま使用でき、これが秀作でとても使いやすい。I/OポートのON-OFFであったり、アナログポート通信の処理など全ての処理がSDKで公開されています。これを使えばXcode上で回路の制御プログラムができてしまします。

ただし、このSDKはレガシー言語である「Objective-C」で書かれています。現在のiPhoneアプリ作りの主流は「Swift」。Objective-Cで記述してもいいけどSwiftのほうがもう慣れちゃったんでなんとかSwiftで書いてみます。Objective-C言語とSwift言語の間をプログラムブリッジを使って混在させてSwiftメインで書く技法で作ってみました。

回路仕様⑤については、赤LEDをKoshianのI/Oモジュールにつけて、BLEの接続が成立したら点くようにアプリ側でコーディングしています。


できたアプリはテスト用のほんと、素っ気ない簡単なアプリです。
よかったら動きをみてください。


なんとか動いてるみたいです。今回のプログラムはクルマに使うことを想定してプログラムを作ってみました。いつでもクルマ用の回路に転用可能です。

このモジュールのSDKはiPhoneアプリで回路を制御できます。今まで作ってきた回路はマイコンをプログラムのメインとして通信をしていましたが、マイコンの狭いメモリ範囲でアセンブラやC言語でちまちま打つよりiPhoneの広大なメモリ内でSwiftでプログラムした方が圧倒的にできることの幅が広がります。

あとはこのモジュールが使用範囲で使えるモジュールかを確認するために、何かネタを探してまた何か作ってみます…。
Posted at 2017/09/24 20:37:00 | コメント(0) | トラックバック(0) | 電子回路 | 日記
2016年07月17日 イイね!

プリント基板を作ってみた

プリント基板を作ってみた昔作った「自作サイドミラー自動格納」をほしいって人がいて作ってあげようと考えている。でも、この基板を作ったのは4年前でほんと電子回路をかじり始めたころで基板が醜い…w

ならばってことで昔からやってみたかった「プリント基板」を作ってみることにした。基板を作るっていっても自作するわけじゃなくてメーカーに作ってもらう。
いろいろネットを徘徊してみると個人でもうまくやれば発注できるみたい…。

プリント基板を作ってもらうにはメーカーへガーバーデータを送らなけりゃなんない。

今回から電子回路作成のソフトとしてオープンソースの「KiCAD」を使ってみることにした。
このソフトは回路エディタとして「eeschema」。フットプリントエディタ(実際部品のCADデータ)として「cvpcb」。レイアウトプログラムとして「pcbnew」。ガーバービュアの「gerbview」のそれぞれのソフトが含まれていて回路作成のとっかかりからガーバーデータ出力まで作れてしまいます。これらのプロジェクトを統合しているソフトが「KiCAD」です。


対応OSはWindows版・Mac版・Linux版があるみたいです。
「KiCAD」は最近月刊誌の「トランジスタ技術」でよく特集されています。先月ちょうど特集があったのでちょっと立ち読みをさせてもらって一通りの操作方法をマスターしてきました…w

プリント基盤を作るメーカーへ送る「ガーバー」というデータは「印刷データ」とか「穴位置データ」とか「レジスタデータ」がありプリント基板を作ってもらうには必要なデータとなります。

プリント基板を作ってくれるメーカーはたくさんあって日本にも何社かあります。
日本のメーカーは企業向けなのか、製作費はとてつもなく高いです…。
今回は海外のメーカーを使って作製してみました。

今回使ったメーカーは「PCBWay」って会社で作ってもらおうと思います。
http://www.pcbway.com/

中国の会社です。注文はWEB上で行って、データもサイトにアップロードする形で注文していきます。
注文は大きさで単価が決まるみたいなので、一つの基板に複数の回路を描いてあとから切って使おうと目論んでます。

今回は、昔作った比較的簡単なスクラム用回路「ワンショットハザード」と「サイドミラー自動格納」とモンキー用として「ウィンカーポジション灯&ハザード
と「アナログCDI」の4つの回路を1つの基板に入るように設計してみました。

昔のデータを引っ張り出してきてKiCADへ移植作業をしていきガーバーデータを作成していきます。
出来上がったガーバーデータは各社指定の拡張子に変更してzipして注文時にWEBへアップロードしてやります。メーカーサイトは中国語でなくすべて英語なので淡々と進めることができます。
データをアップロードしてデータ内容がおかしい時にはメールで問い合わせが入ってくるらしいのですが、今回はなかったので大丈夫だったのでしょう…。


最低発注数は5枚以上となっており、写真の2層基板90mmX95mmを5枚発注して$10でした。作製場所は香港らしく送料は普通郵便で$13となっています。送料のほうが高い…。

しかし、日本の企業にお願いするとこれの10倍の値段となります。

注文後は、WEB上で制作過程が随時更新されていきます。約3日で制作は終わってました。そこから発送に1週間要してますので、10日ちょっとには手元に到着してました。


出来栄えとしては…。キレイ…ちょっと感動もんです。
今回は基板色を青にしてみました。

注文した5枚の基板で合計20個の回路が作れるので…。1枚当たり120円程度…。
思っていたよりコスパはいいのではないでしょうか。

早速、クルマ用の「ワンショットハザード」と「サイドミラー自動格納」回路を組んでみました。

これが「ワンショットハザード」の昔の回路。
ウィンカーレバーを「チョン」と操作すると3回点滅します。レーンチェンジに便利。また添えつけのボタンでサンキューハザード(3回ハザード点滅)が実行できます。

そんで…。これが今回作製したプリント基板回路。すっきりしてます♪


次に、「サイドミラー自動格納」回路。ユニバーサル基板の切れ端で作ったので醜い容貌です。4年前に作ったのですが今まで壊れることなく現役でした。
「エンジンをきれてて」「ドアロックを操作する」の2つの動作が重なると自動的にドアミラーが格納します。「ACC電源が立ち上がる」と自動的にドアミラーが開きます。

これが新作の基板回路です。ちょっと大きくなりましたが。キレイです♪


上記の2つを車に取り付けテストをしてみました。
問題なく今まで通りの動きをしてくれます。成功みたいです♪
残りの2つの回路も作ってみたいけど「アナログCDI」のほうは配線を突っ込む穴が小さすぎた…。やり直しですな…。またいつか作り直します。

これで、ほしいって言ってくれた人にもドヤ顔で渡せます。

長らくの夢だったプリント基板をとりあえず作ることができました。
今回は初めての経験だったので簡単な回路しか作ってません。
もうちょっと勉強をして今まで作ってきたお気に入りの回路を「プリント基板化」しようかな…。
Posted at 2016/07/17 17:33:28 | コメント(0) | トラックバック(0) | 電子回路 | 日記
2015年11月01日 イイね!

ECUのタコ・スピード信号で遊んでみた

ECUのタコ・スピード信号で遊んでみた久しぶりに電子回路で遊んでみます。

クルマとiPhoneをBluetoothでつなげてみた」で作った車用のモニター。

iPhone側のアプリを作った頃はまだ開発言語Swiftが発表されたばかりでiPhoneバージョンもiOS9になって色々とAPIなども変わってきた。
アプリ自体には特に困ってはないんだけど大分Swift言語にも慣れてきたしマイコンも変えたいしもう一度作り直してみる。


ってことで、今回はクルマ(スクラム)から送られてくるデータで使えるものはないかと色々探ってみます。

前回の「クルマとiPhoneをBluetoothでつなげてみた」で作った車用のモニターは、ECUの情報として「アクセル開度」「水温計」をもらって表示させていました。

加えて「ブースト計」の簡単な回路を使って過給圧を表示。「電圧計」・「位置情報」などなど。

今回はECUデータとして「車速信号」「エンジン回転数」が拾えそうなのでちょっと考察してみます。
自身の備忘録なので暇な方だけどうぞ…w


ちなみに、スクラム(エブリィ)のECUは運転席下エンジンルームの右側についています。

私のクルマではECUについているコネクタは図の「SP」が車速信号。「TA」がエンジン回転数となっていました。同じ年式でも微妙に位置が違ったり、コネクタ形状が違ったりと取り出す時には注意が必要です。


まずは「車速パルス」を拾って遊んでみます。
手元にあるハンディのオシロスコープに速度パルス信号を突っ込んで走ってみました。

メーター読み時速60kmの時の波形…

電圧7.5Vで24ミリ秒の波長。周波数では42Hzみたい。

続いてメーター読み時速80kmの時…

同じく電圧7.5Vで18ミリ秒の波長。周波数で56Hz。
ちょっとノイズが乗っているけど綺麗な波形が取れています。


クルマについている車速センサーが吐き出す信号は「JIS D5601」で決まっているモノらしいです。
「機械式スピードメータの速度指示機構は、駆動軸が637rpm(主として四輪自動車用)又は1400rpm(主として二、三輪自動車用)の回転をしたとき、60km/hを指示する割合とする。」
「電気式及び電子式スピードメータの速度指示機構は、原則として下式が成り立つように指示する割合とする。」

って難しく書かれていますが簡単に式に書くとこんな感じ
(車速パルス) = (車速) X (N) X 637rpm / (60秒 X 60km/h)

車速パルスの単位はHz。車速はkm/h。
式中のNは「駆動軸1回転当たりの発生パルス数」となっており「4・8・16・20・25」のいずれかの値を取れ、とあります。
この値はスクラム(エブリィ)では詰めていくと「4」を取っていることがわかりました。すなわち駆動軸90°回転するごとに1パルス吐き出すってこと。

これらから上式をもっと簡単にすると「(車速) = (車速パルス) / 0.708」ってことになる。

これを先ほどオシロで測定した波形で計算すると、メーター読み時速60kmでは「時速59.3km」。メーター読み時速80kmでは「時速79.1km」となるのでいい値として測定できそうなのがわかる。
なので、このパルスを測定して「速度メーター」が作れそう♪


続いて「エンジン回転数」を拾って遊んでみます。
同じようにエンジン回転数信号をオシロスコープに突っ込んで測定してます。

1000rpmのほぼアイドリング時の波形。

電圧12Vで41ミリ秒の波長。周波数では24Hzみたい。

続いて、走行中3000rpm弱ぐらいの波形。

同じく電圧12Vで16ミリ秒の波長。周波数で63Hz。
これも比較的綺麗な波形が取れそうです。

ここで最初は素直にエンジン回転軸1回転当たり1パルス吐き出しているのかな〜って思って計算してみました。
1000rpmの時が24Hz。すなわち1秒間に24パルス60秒で1440パルスなので1440rpmってことになる。50%くらいの誤差があるのでこれは単純にエンジン回転軸1回転当たりの信号ではなさそう。

だとしたら…。
プラグ点火のタイミングか?ってことで計算。
スクラム(エブリィ)は4サイクルエンジンの3気筒です。
4サイクルエンジンなので回転軸2回転で1回点火ということは720°で1回点火。
それが3気筒なので720°/3気筒で240°毎に点火していることになる。
ということは360°/240°=1.5なので、点火間隔時間を1.5倍してやれば1回転のパルスが計算できる。
メーター読み1000rpmの時の波長の場合、1000ミリ秒/(41ミリ秒X1.5)X60=975rpm
メーター読み3000rpm弱の時の波長の場合、1000ミリ秒/(16ミリ秒X1.5)X60=2500rpm
となって近い値が計算できることがわかる。
この計算式でエンジン回転数「タコメーター」が作れそう♪


これらの考察であっているかどうか、ブレッドボードを使って簡単な回路を作って検証してみます。


この回路の流れとしては…。
ECUの「速度パルス」と「エンジン回転数」をマイコンに取り込んで、マイコン内でパルスの間隔時間を測定します。
測定した生データをUARTという通信規格にもとづき「SBDBT5V」というBluetoothモジュールへ送ってやります。
受信した「SBDBT5V」は生データをiPhoneへBluetoothの無線送信を使ってひたすら続けます。
受信したiPhoneはアプリによって「速度」「回転数」を計算しiPhone上に表示させてやります。

今回のECUからのデータは8Vや12Vの電圧の信号のようです。このままでは電圧が高すぎてマイコンには直接突っ込むことができません。トランジスタのスイッチングを使って5Vの信号に変えマイコンに取り込んでやります。

マイコンは、「PIC16F1705」を使いました。14ピンの小さなボディに機能が満載です。パルスの時間間隔はCCPの「キャプチャー」を使って測定しています。

Bluetoothモジュール「SBDBT5V」のBLE(Bluetooth Low Energy)という規格は、「近距離無線通信技術 Bluetoothの拡張仕様」でありBluetooth4.0て策定された規格です。この規格により個人でも、このように気軽に無線通信のプログラムが作れるようになりました。確かiPhone4Sから使える機能でiOS7あたりからアプリが作れたと思います。

「マイコン」で計算を行うのと「iPhone」とでは圧倒的にiPhoneの方が計算速度は速いです。なので、マイコンではデータのみを取ってやってそのデータをそのままiPhoneに送ります。そしてiPhoneアプリで細かい計算を行っています。


せっかくここまでデータを取って回路も作ったのでデバッグ用の簡単な「アプリ」を作りました。

何もない「速度」と「エンジン回転数」を表示するだけのアプリですw

開発言語は「Swift2.0」。iOSはバージョン9.1。開発統合環境はXcode7.1で今の最新の環境を使って開発しました。iPhoneは「6」です。
Swiftも2.0となり大分使いやすい言語になってきました。もうレガシー言語Objective-Cには戻れません…w

この手のアプリはBLEの接続部分のプログラムが複雑で面倒臭いです。一度ライブラリーを作ってしまえば、表示プログラムなんぞは1時間もあれば作れちゃいます。


実際にアプリを作って車に乗り込み使ってみました。

クルマについているメーターと照らし合わせても大きな違いもなく正常に「速度」「回転数」を指していると思います。

なので、上記の考察はあってる……多分。

通常の走行での表示は全く問題なしですが、強めにアクセルを踏み込むとおかしな値を示します。これはおそらくノイズを拾ってるんだと思う。時速250kmとか15,000rpmとか…。
回路側でこのノイズ除去処理を考えると色々面倒くさいので本番のソフトではある程度ノイズを無視するフィルターを作ってやります。


クルマとの接続は、もちろん無線で接続しているのでこんな風に配線無しで表示できてしまいます。
ちなみに、このBluetoothモジュールは送受信ができるので、今回はiPhoneへ送信だけですが、逆にiPhoneからの操作ってこともできます。遊び道具としては面白い。

また久々に凝ったアプリも作りたいしもう一度「カーモニター」アプリVer.3を作ってみます♪
Posted at 2015/11/01 13:35:55 | コメント(0) | トラックバック(0) | 電子回路 | 日記

プロフィール

「[整備] #N-ONE メッシュグリルにしてみる https://minkara.carview.co.jp/userid/1540421/car/3584390/8101874/note.aspx
何シテル?   02/01 13:30
satto.v11です。 機械を弄るのが大好きですw クルマ・バイク・パソコン多趣味な人間です。
みんカラ新規会員登録

ユーザー内検索

<< 2025/8 >>

     12
3456789
10111213141516
17181920212223
24252627282930
31      

リンク・クリップ

バンパー、グリル、ネット取り付け 
カテゴリ:その他(カテゴリ未設定)
2025/02/06 06:05:02

愛車一覧

ホンダ N-ONE ホンダ N-ONE
N-ONE RSに乗り換えました。 通勤用として久しぶりの新車購入。 "通勤中も楽しく" ...
アウディ TT クーペ TT (アウディ TT クーペ)
メイン車です。 これは自分では弄りません。 全てディーラーにお任せw
ホンダ ゴールドウイング (GL1800) GL1800 (ホンダ ゴールドウイング (GL1800))
ホンダGold Wind Tour DCTに乗っています。 水平対向6気筒1800ccを ...
ホンダ モンキー ホンダ モンキー
モンキーを作りました。 10年前に所有していたモンキーフレームの残骸からナンバーを取得 ...

過去のブログ

2024年
01月02月03月04月05月06月
07月08月09月10月11月12月
2020年
01月02月03月04月05月06月
07月08月09月10月11月12月
2018年
01月02月03月04月05月06月
07月08月09月10月11月12月
2017年
01月02月03月04月05月06月
07月08月09月10月11月12月
2016年
01月02月03月04月05月06月
07月08月09月10月11月12月
2015年
01月02月03月04月05月06月
07月08月09月10月11月12月
2014年
01月02月03月04月05月06月
07月08月09月10月11月12月
2013年
01月02月03月04月05月06月
07月08月09月10月11月12月
2012年
01月02月03月04月05月06月
07月08月09月10月11月12月
ヘルプ利用規約サイトマップ
© LY Corporation