自作電子小物/HA7車両情報データロガー/iPhone版0.5
自作電子小物/HA7車両情報データロガー/iPhone版0.5
HA7 logger mini V0.5
2015年3月23日月曜日
ホンダの軽自動車 アクティ トラック用の燃費計、データロガー、簡易ドライブレコーダです。スマートフォンを利用し、判り易い表示とデータの記録を手軽に行え、万一の事故に備え映像記録も行われます。自作アダプタを車両診断コネクタ(OBD2)に差し込み、アップル社のiPhoneに専用アプリをインストールしておけば、リアルタイム燃費などを画面で確認できます。また、iPhone内に全走行情報が記録保存されますので、乗車していない時でも過去データを参照したり、PCにダウンロードしたりする事も可能です。
アダプタは、300円ぐらいで入手出来るマイクロコントローラ【マイクロチップ社のPIC32MX250F128】と、PC用のUSB-Bluetoothドングルを利用し、総計3000円ぐらいで製作可能。ソフトウエアは標準の統合開発環境、MPLAB X+XC32でC言語にてコーディング。iPhone側のアプリケーションプログラムは、開発環境をXcodeで、Objective-C言語にてコーディングしています。Xcode自体は無料で使用出来ますが、実端末へインストールするには有料の開発者登録を要します。
V0.4からの変更点
・アダプタ側
使用するマイクロコントローラを変え、全て再設計
安く製作1/2、小型化1/4、低消費電力化1/5
・スマートフォン側ソフトウエア
簡易的ですが映像を記録するドライブレコーダ機能を付加
横表示(ランドスケープ)対応
方位(コンパス)情報の項目を追加
アダプタ、スマートフォン側共にV0.4<->V0.5相互運用性があり、自由な組み合わせが可能です。
<機能/特徴>
■アプリを起動したスマートフォンを携帯して乗車すれば、自動的にデータが記録・蓄積される
■ガソリンを節約する運転をするための情報が画面に表示される
■どこにいても過去の実績をスマートフォンで確認出来る
■データの持ち出し・出力も全く苦にならない、CSV形式ファイルでPCに取込み可能
■事故の際に、より多くの情報を残せる
■汎用部品で安価・製作容易、調整不要
重要:誤動作した場合、車両の暴走等で生命の危険に及ぶ可能性があります。
注意:全ては、車内にあるコネクタが、OBD2仕様であるという想定を元に開発しています。メーカが仕様開示している訳ではないので、得られる情報は正しいとは限りません。電気的な接続で通信を行いますので、車両に対し物理的もしくはソフトウエア的な故障につながる事もあり得ます。これは、全くの無保証の元に提供する情報です。
<仕様>
接続形態:
OBDコネクタ
車両:
対応車種:HONDA ACTY TRUCK GBD-HA7(2006年式)のみ
アダプタ側:
名称:HA7 logger mini V0.5 Gateway
分類:車両データ転送装置
接続方法: グローブボックス下のOBD2コネクタへの接続
車両側接続:OBD (On Board Diagnostic)
転送媒体:近距離無線通信 Bluetooth
転送タイミング:約1〜2秒間隔(1項目約100ms)
入出力:OBDコネクタ(16ピン台形)
OBD対応プロトコル:ISO9141-2、およびISO15031-5(SAE J1979)
Bluetooth対応プロトコル:BLE アトリビュートプロトコル、もしくはRFCOMM
電源:OBDコネクタ経由で車両バッテリより供給、約0.5W
外形:縦84[mm]、横50[mm]、高さ20[mm]
重量:約55[g] (ケーブルコネクタ込み90[g[)
製作費:約3000円ぐらい(ケースは含みません)
スマートフォン側
名称:HA7 logger mini V0.5 Application Program
分類:車両データ表示・記録、映像記録アプリケーションプログラム
対応機種: Apple iPhone5,5s,6,6plus iPad
基本ソフト:iOS 8以降
通信方法: Bluetooth 4.0 LE
転送手順:アトリビュートプロトコル、およびGATTプロファイル
表示項目:
「Dashboard」画面(カメラ・オフ)
車両よりデータが来ていない場合(オフライン時)は、表示が薄くなります。
車速[km/h] 数値
エンジン回転数[r/m] 回転針様式と数値
瞬間燃費[km/l] 棒グラフ様式
日平均燃費[km/l] 棒グラフ様式と数値
総平均燃費[km/l] 棒グラフ様式と数値
当日使用燃料量[l] 数値
当日走行距離[km] 数値
走行率[%] 棒グラフ様式
停車時間[m:s] 数値
残り燃料率[%] 棒グラフ様式
残り走行可能距離[km]
クーラント温度[℃] 棒グラフ+数値
バッテリ電圧[V] 棒グラフ+数値
Cam: カメラON/OFF
「Dashboard」画面(カメラ・オン)
OBDがオンラインになると、自動的にカメラがオンとなります。
カメラオンの間は、常に録画していますが、何もしなければ記録として残りません。「Save」スイッチをオンにすると、1分前からの映像が「写真」のコレクションにビデオとして残るようになります。このスイッチは衝撃(前後方向に3G以上の加速度を検出)で自動オンになります。
記録される「ビデオ」は音声付の1280x720ピクセルで、画面のような数値情報は入りません。1分毎に区切られた動画ファイル(約300MBの容量)になります。最低3分ぶん、1GB以上の空きが必要です。区切り処理に4〜5秒を要しますので、その間は映像記録されません。映像例 IMG_8067.MOV(281MB)
「Vehicle data」画面
「Now」グループ
収集している全データのリアルタイム値が表示されます。
「Day Estimate」グループ
当日の積算値が表示されます。
「Life Estimate」グループ
このアプリを使用し始めてからの積算値が表示されます。設定画面で変更する事が出来ます。
「History」画面
「Route map」画面
走行したルートを地図上に青線で表示されます。現在地は青ポイントです。
拡大、縮小等の基本的な操作が可能です。
最大360点のデータしか表示されませんので、最初の1時間分の奇跡となります。オーバした場合は、線の色がオレンジになります。
「設定」画面
出力ファイル:
ファイル形式:CSV(カンマ区切り)、1行目は項目名
記録データ項目:
(0) 日時
(1) エンジン冷却水温度 ect[℃]
(2) 短期空燃比補正値 shrtft1[%]
(3) 長期空燃比補正値 longft1[%]
(4) 吸入管絶対圧力 map[kPa]
(5) エンジン回転数 rpm[rpm]
(6) 車速 vss[kn/h]
(7) 点火時期 sparkadv[°]
(8) 吸気温度 iat[℃]
(9) スロットル開度 tp[%]
(10) O2センサ出力電圧 o2s11[V]
(11) 空然比補正値 shrtft11[%]
(12) バッテリ電圧 vpwr[mV]
(13) 移動距離 dist[km/s]
(14) 使用燃料量 fuse[ml/s]
(15) 瞬間燃費 eff[km/l]
(16) 累積移動距離 dist_s[m]
(17) 累積使用燃料量 fuse_s[ml]
(18) 平均燃費 eff_s[km/l]
(19) 稼働時間 runtm[s]
(20) 走行時間 movtm[s]
(21) 絶対位置座標(GPS)
(22) 標高(GPS)
(23) 向き(ボタンから正面カメラ方向の方位、北を0とした時計回りの度数、0〜359)
格納場所:iPhone本体内恒久ファイル
外部出力方法:PC上のiTunesアプリケーションの機能にてに取込み(App共有ファイル)
記録時間間隔:
1秒(OBD上は約1.8秒間隔の精度です)
注意点:
バッテリの消費がかなり多いので、外部(車両)より電源を供給しなければなりません。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ 設計書 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
この小物を再現するのに必要な、設計の結果情報です。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Ⅰ 全体構成
1. 機能分担
Ⅱ 接続アダプタ側
1. 技術的なポイント
1.1 ハードウエア
1.2 ソフトウエア
1.3 開発法
2. 回路図
3. 部品表
4. ソフトウエア
4.1 開発に必要な物
4.2 ダウンロード
4.3 接続仕様
4.4 フローチャート
4.5 ソースコード
5. 実装
5.1 基板
5.2 ケース
Ⅲ スマートフォン側
1. 技術的なポイント
1.1 ソフトウエア
1.3 開発法
2. ソフトウエア
4.1 開発に必要な物
4.2 ダウンロード
4.3 フローチャート
4.4 ソースコード
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Ⅰ 全体構成
1.機能分担
文書ファイル:Summary.numbers
「接続アダプタ」は、OBD/ISO9141-2とBluetooth-LE Peripheralのプロトコル変換と、OBDで得られない車両情報の内、バッテリ電圧を計測、データストリームに加えます。データ加工・蓄積は全く行いません。電源はエンジンと連動させます。
データを受信して画面表示するのはBluetooth機能を持ったスマートフォン等の携帯デバイスを利用します。専用のアプリケーションをインストールし、Bluetooth-LE Central通信を常に監視し、車両情報を受け取ります。また受け取ったデータを使い燃費計算を行い、携帯デバイス上で得られるデータ(時刻+位置+方位)をマージし、携帯デバイス上の記憶装置に保存させます。
過去データの参照は、携帯デバイスでも行えるようにしますが、より自由なデータ利用を出来るように、PCへの転送機能を実装します。
Ⅰ 接続アダプタ側
1.技術的なポイント
1.1 ハードウエア
・Microchip Technology社のPIC32MXマイクロコントローラ
・UART と ISO9141-2(K-line) 変換
・電圧の計測
分圧抵抗による直流電圧の計測
PIC32MX内蔵のA/Dコンバータの使用
・電源電圧変化の検出
PIC32MX内蔵のコンパレータの使用
1.2 ソフトウエア
・プログラミング言語はC、開発環境はMPLAB X、コンパイラはXC32
・Microchip提供標準ライブラリ群(Harmony)の利用と、USBホスト機能への新規クラスの実装
・自家製Bluetooth-LEソフトウエアスタックの利用
・ISO9141-2プロトコルの実装
1.3 開発法
・OSX上で無料で利用出来るMPLAB X+XC32を使用
・回路設計は、無料で利用出来るCadSoft Computer社のEAGLEを使用。
2.回路図
回路の簡単な説明:
K-LINE接続部は、NPNトランジスタを使った簡単な電圧レベル変換。
電源オン/オフ制御は、マイクロコントローラ自身はスリープ機能で44μA程度に落とせるので、特別な回路を付けませんが、USBホストコネクタへの5V電源については、オン/オフをマイコンから制御する必要があります。今回は、手持ち部品の関係でオン/オフ制御ピン付のボルテージレギュレータを使っています。USBへの供給電流が10mA程度と小さいので、こんな単純な回路でも問題ないでしょう。
3.部品表
文書ファイル:V0_5_parts.numbers
線材、ケースを除きます。
4.ソフトウエア
4.1開発に必要な物
PC(MPLAB Xが動作する環境、Windows, Linux, Mac等が可)
ソフトウエア
MPLAB X (*1)
XC32 (*1)
MPLAB Harmony (*1)
PICkit等の書込み器
*1)無料で利用できます。Microchip社のサイトからダウンロードして下さい。
4.2 ダウンロード
MPLAB Xプロジェクトファイル:
ライセンス: フリーソフトウエア(GPL v3)
作成者:富樫豊彦 tog001@nifty.com
開発環境:
Mac OS X 10.10.2
MPLAB X v2.26
XC32 v1.33
MPLAB Harmony 1.01
PICkit 3
Mac OS X 10.11
MPLAB X v2.30
XC32 v1.40
MPLAB Harmony 1.06.02
PICkit 3
4.3 接続仕様
(1)OBD2
ISO 9141-2のみに対応、かつK-LINE信号線のみ使用します。
また、バッテリー信号線は、最大50mA、未使用時で190μAを消費します。
(2)Bluetooth
2つのインタフェースの両方を利用出来ます。
(a)RFCOMM(仮想シリアル通信)
PIC32MXの名前のデバイスをペアリング。(OSX10.10の例)
特に確認応答は無いはずですが、聞かれたら「0000」を入力。
仮想シリアルポートを開くと、だらだらと繰り返しデータが流れ始めます。
”項目名=データ値[単位]”と言ったように、人間が目で見て認識出来る様なフォーマットです。
1項目0.1秒位です。
(画面はOSXの「ターミナル」での例)
(b)ATT(Attribute Protocol)
各アトリビュートのデータは、基本的にはunsigned short(2byte integer)となっています。(文書としてまとまっていませんので、ソースコードを参考にして下さい)
図のRPMの例では、0xEC,0x03であれば、バイトオーダ処理をして0x03EC、10進数にすると1004[RPM]と言った感じです。
notification機能が使えますので、車両からデータが届いたタイミングと同じに、データを入手する事が出来ます。
4.4 フローチャート
メイン関係のフローチャートです。中核となるのはアプリケーションタスクです。
アプリケーションタスクのフローチャートを書いても複雑なだけで解りにくいと思い、状態遷移図の形で表現してみました。線が太い程、流れる頻度が多い所です。
文書ファイル:FlowChart.numbers
4.5 ソースコード
ソースツリー
モジュール関連図
文書ファイル:ModuleRelation.numbers
5.実装
5.1 基板
大した回路ではないので、蛇の目基板にて作成可能です。
一応、PCBエディタのEagleでパターンを引いております。
5.2 ケース
市販のケースを利用するならば、タカチのSS-90辺りが適当でしょう。
私は、簡単なカバー程度のケースを余り物のアクリル板で作ってみました。
下部は、1枚のアクリルシートを「コ」の字形に折り曲げ、上部も同様な手法で作って重ね合わせる形です。
用意するのは、3mm厚黒色アクリルシートと、1mm厚の透過率50%の透明アクリルシートを若干。半透明にするのは、基板上のステータスランプが外部から確認できるようにする為です。下部板は手持ちの材料の関係で、透過率90%のスモーク材にしましたが、本当は黒にしたかった所です。また、上部板も、透明アクリルシート+自動車窓用の遮光フィルムで対応しました。スプレー塗料をを利用する手もあります。
基板の固定は、タッピング加工した5mmアクリル小片を下部板に接着しておき、上部から5mm長のビスで行うようにしました。
必要な部材が揃った所です。上部板は、始点位置に虫ピンを通して開けられるようにしておきます。これは、基板上にリセットボタンがあるためです。外から、リセットボタンを押せる様な工夫があれば、完全な密閉でも良いかと思います。
背面には、車両への固定に便利なシート磁石を貼付けておきました。磁力が強力タイプでないとすぐはがれてしまいますので、購入の際には注意を。
Ⅱ スマートフォン側
1.技術的なポイント
1.1 ソフトウエア
・プログラミング言語はObjective-C、開発環境はXcode
・Bluetooth4.0のAttributeプロトコルを利用する事による、追加ライセンス費用の削減
(CoreBluetoothフレームワーク「BLE Central機能」の利用)
・燃費の計算と絶対位置の取得およびデータの日別蓄積
・走行ルート絶対位置情報の地図上への重ね合わせ表示
・無制限動画録画
1.2 開発法
・スマートフォン側プログラム開発は、Apple社の標準IDEであるXcodeを使用
2.ソフトウエア
2.1 開発に必要な物
パソコン
Macintosh
ソフトウエア
Xcode(*1)
*1) App Storeより無料でダウンロード出来ます。
2.2 ダウンロード
Xcodeプロジェクトファイル:
バージョン0.5 iOS8, Xcode6対応版
バージョン0.5b iOS10, Xcode8対応版 (2016.12.23)
ライセンス: フリーソフトウエア(GPL v3)
作成者:富樫豊彦 tog001@nifty.com
開発環境:
バージョン0.5:Mac OS X 10.10.2、Xcode 6.2
バージョン0.5b:macOS 10.12.3、Xcode 8.2.1
実行環境:
iOS8以降
現在、本ソフトウエアは「App Store」には登録しておりませんので、簡単に実行してみるという事は出来ません。
Xcodeでソースコードをビルドして、デバイスにダウンロードする必要があります。さらに、年間100ドルの「iOS Developper Program」に参加しなければなりません。
2.3 フローチャート
GUIのプログラムの場合、フローチャートという表現方法では理解しにくいと思いましたので、機能関連図としました。
文書ファイル:FunctionRelation.numbers
■燃費計算法 ...V0.2と同じ
燃料を消費するのは、エンジンだけなので、燃料噴射量の積算で燃料量を算出します。燃料噴射量の値がダイレクトに車両から得られなかったので、以下の方法で推量しています。内燃機関工学の知識が全くなく、私の勝手な考えです。理想燃焼混合比を使うという発想は、Wikipediaより得ました。
歴史的に自動車の排ガス規制をクリアする為に、出来るだけ理想燃焼混合比での燃焼になるよう、エンジンを制御をしなければならないのは自明の理でしょう。それを、バルブ・歯車等の機械的な仕組みで行うには複雑すぎる事であっても、コンピュータを利用すれば簡単なので、OBDが付いたような車両は、きっと理想燃焼混合比に近い状態で動いているものと思われます。つまり、「理想燃焼混合比」という固定パラメータでも、かなり近い値が出てくると考えられます。具体的には、吸入空気量が判ると使用するガソリン量もおおむね推量できるのではないかと言う事です。
実際問題として、アクセルオン/オフのスロットル要求に沿うように出力を調整をしているでしょうから、その調整率を加えれば、もっと正確な数値が出るでしょう。私は、空燃比補正値という項目がそれに当たるのではないかと仮定し、計算する事にしました。
HA7では、吸入空気流量が直接得られませんので、他のデータから計算で得ています。
空気密度の計算方法は、Wikipediaより得ました。また、吸入管圧力[atm]は車両から得られる情報が[kPa]単位なので単位変換が必要、質量[g]からガソリン容積への変換は、ガソリンの密度の一般値783[kg/㎡]を用いたのも同様です。
2.4 ソースコード
< 開発情報 >
<関連>
「自作電子小物/HA7車両情報データロガー/iPhone版0.4」
「自作電子小物/HA7車両情報データロガー/SDカード版0.3」
「自作電子小物/HA7車両情報データロガー/Mac版0.2」
「自作電子小物/HA7車両情報データロガー/Mac版0.1」
<あとがき>
安くて自作しやすいマイクロコントローラで動くBluetoothスタックが出来上がったので、まず初めに適用してみました。接続アダプタだけ新造し、iPhoneアプリはそのままで現行バージョンに記事を追加する位かなあと考えていました。
所が、です。先月(2015年2月)自動車事故に合ってしまい、図らずもロギングデータの有用性を実感してしまいました。でも、このような目的としては画像データは絶対必要と考え、iPhoneアプリ改良で対応可能と思い、合わせて新たなバージョンとして作り込む事にしました。
事故の方は瑕疵が無かったのですが、悪い事は続くもので代車のレンタカーも車両接触されるというレアケースに遭遇してしまいました。二度ある事は三度あると言います、レンタカーはすぐ返却し、我慢して自転車/徒歩にするという判断を行いました。これで、保険金総支払額を下げる事に貢献出来た訳ですが、やはり車が無いと不便際わりなく知らず知らずに愚痴ってしまいます。事故は、責任がなくとも色々と嫌な思いをします。とにかく無いのが一番良いんです。
<独り言>
私的な経験で言うと運転に集中していない時が危ない。
例えば、横断歩道に人が待っていれば、100%の確率で気づいて、なお余裕で止まれないようだったらNGと思っています。
簡単だと思うかもしれませんが、この状況は意外に単純ではありません。例えば、後続車が訳も解らず追い越してしまい、もし横断者をはねてしまったら...自分のせいではないかも知れませんが、かなりショッキングな出来事です。それを防ぐにはどうする?右にも左にもパスされないように車線の中央にきちんと停止するのが無難だし、追い越したくて車間を詰めてウズウズしている後続車の場合には、わざと強めのブレーキして速度を落とさせたり、最悪、自分の車のドアを全開にして歩行者を守る覚悟をしなければならないとか。(かえってひどい結果になるかも知れません)また、左折/右折する場合でもウインカーを出してしまったら、後続車が反対側を一気に越してしまって同じ状況が生まれてしまいます。これらは経験から考えさせられた状況です。みなさんはそこまで考えて運転していますでしょうか?
富樫 豊彦 tog001@nifty.com
Simple fuel efficiency meter and
vehicle data logger for HONDA's light weight truck GBD-HA7.