バッテリ充放電マネージャ


【バッテリ充放電マネージャの概要】
リチウムイオン電池の充放電器で一般に市販されているものは、LEDの表示しかない
のが一般的です。これでは、充電池がどの程度充電されているかとか、放電能力が
どれほど残っているかなどを正確に知ることはできません。

そこで、この充電、放電の状況をグラフで表示すればバッテリの能力を正確に把握する
ことができるだろうということで本充放電マネージャを製作することにしました。
完成したバッテリ充放電マネージャの全体外観は下図のようになります。
写真のようにグラフ表示器にはタブレットを使いました。Nexus 7(2013)です。
Android 4.4.4、Android 5.0でも動作確認済みです。通信はBluetoothです。



実際に表示させた例が下図のようになります。



【全体構成と仕様】

バッテリ充放電マネージャの全体構成は下図のようにしました。
充放電制御ボードとグラフ表示用のタブレットで構成しています。
充放電制御ボードでは、充電制御は専用のバッテリ充電制御ICを使って、難しい制御は
お任せということにしました。
放電の方は定電流回路を構成して一定電流で放電させて熱に変換します。
この充電と放電両方のバッテリの電圧と電流値を、一定間隔でPICマイコンにて計測し、
その結果を液晶表示器に表示すると同時に、Bluetoothで無線送信します。
この計測回路にPIC内蔵のアナログモジュールを活用します。
計測データを受信したタブレット側ではこれをグラフとして表示します。 
グラフで描画した結果はタブレット側でデータとして保存、読出しができるようにします。



タブレット側の機能仕様は下表のようにしました。基本的にデータを受信してグラフとして
表示する表示器の役割ですが。それ以外に計測結果をデータファイルとして保存、読出し、
削除ができるようにしました。
充放電制御ボード側ではメモリには保存しませんので、グラフを描画する際には
タブレットを最初からずっと接続したままにする必要があります。
PICマイコンのRAMメモリが少ないのでこれは我慢することにしました。

 項 目  機能・仕様  備考
表示操作 モニタ開始ボタンタップでデータ収集開始
データ取得ごとに順次グラフ表示
 グラフ解像度 1560×1000ピクセル
 横軸 0〜390分 15秒ステップ
 縦軸 0〜5.00V  5mVステップ
    0〜500mA 5mAステップ
表示グラフと色
 赤線  :充電電流  緑線:充電電圧
 マゼンタ:放電電流  黄色:放電電圧 
 開始時点をグラフの開始時点とする
Bluetooth接続 端末を検索してリスト表示
端末を選択して接続
接続状態をメッセージで表示 
 
モニタ開始 通信を開始してグラフ表示を実行開始する   
データ保存 ファイル名を指定して保存  ファイルリストは5個mで表示  
データ読み出し ファイル名を指定して読出し グラフで表示
データ削除 ファイル名を指定して削除

これらの機能を実現するために必要なタブレットと充放電制御ボード間の
Bluetoothによる無線通信データのフォーマットは下表のようにしました。

 項目 タブレット → 制御ボード  制御ボード → タブレット 
計測開始要求と応答 開始ボタンタップ時に送信
「0x53、0x4F、0x45、パディング」
(”SOE”)
常時32バイト固定長
応答として返送
 「「M」「O」「K」「E」パディング」
 常時32バイト固定長で送信
計測応答  なし 応答として返送
「M」「A」cVu、cVl、cCu、cCl、
 dVu、dVl、dCu、dCl、「E」パディング」
 cV:充電電圧  cC:充電電流
 dV:放電電圧  dC:放電電流
 xXuは上位バイトで(計測値÷128)
 xXlは下位バイトで(計測値%128)
 32バイト固定長で送信
計測終了 1560点計測完了で送信
「0x53、0x4E、0x45、パディング」(“SNE”)
常時32バイト固定長
応答なし、計測値送信を終了
単体では計測継続し液晶表示器に表示

【タブレットのアプリの全体構成】
製作する充放電マネージャアプリの全体の構成は下図のようにしました。
全体を3つのJava実行ファイルで構成しています。

アプリケーション本体(ChargerController.java)では、ボタンがタップされたときのイベント
ごとの処理、Bluetoothからの受信データの処理を実行します。

Bluetoothの端末探索(DeviceListActivity.java)と、Bluetoothのデータ送受信を制御する部分
(BluetoothClient.java)は、ライブラリとして独立ファイル構成としています。

Androidタブレットには標準でBluetoothが実装されていて、それを駆動するための
クラスとメソッドも標準で用意されていますから、これを使って制御します。
この部分は、Googleの例題を基本にしていますので、他のBluetoothを使うアプリにも
受信処理部分を少し修正するだけで共通に使えます。

この他にリソースがあり画面を構成するレイアウトや表示する文字列などを設定しています。
マニフェストには全体に関わる基本設定が記述されていて重要な働きをしています。
タブレットの内蔵Bluetoothの使用許可もこのマニフェストで行います。


アプリケーションの機能としてはボタンに対応させていますので、画面構成を説明します。
画面は下図のようにしました。機能はすべてボタンタップから開始されます



【アプリケーションの詳細】
Eclipseで製作するタブレットのアプリケーションの構成は下図のようにしました。
プロジェクト名は「ChargerController」です。




 パッケージ名「com.picfun.chargercontroller」が本アプリケーションを区別する名前で、
タブレットにダウンロードする際、このパッケージ名で認識区別されます。
したがって、同じ名前のパッケージ名があるとダウンロードエラーとなりますので、
パッケージ名は唯一の名前にする必要があります。
通常は図のようにURLを逆にする構成の名前を付けるようにしているようです。

srcフォルダがソースファイル格納フォルダで、ここにメインのソースとBluetooth用ライブラリ
のソースが2つあります。

resフォルダにはいくつかのリソースファイルと呼ばれる主に画面構成用のファイルがあります。
しかしこのプロジェクトでは、画面をソースプログラム中に記述してしまいましたので
layoutフォルダ内にあるrowdata.xmlだけで構成しています。

「AndroidManifest.xml」というマニフェストファイルが、作成するプロジェクトの特性を指定する
ファイルで、この中で画面の向きの指定や、Bluetoothを使う指定などをしています。
その他のファイルはプロジェクトを作成するとEclipseが自動生成するファイルです。

 このアプリケーション部のファイルの全体構成は、下図のようになっています。





アプリの本体はアクティビティクラスとして記述していて、最初にフィールドの定数と変数を
宣言しています。その後にメソッドが続きますが、次のイベントごとの処理メソッドで構成しています。

 @アプリ起動、終了の状態遷移イベントへの対応処理
 ABluetoothの送受信ハンドラからの戻り値の処理
 Bボタンのタップイベントの処理
 C受信データごとの処理
 Dグラフ描画処理

 アプリケーションの状態遷移イベントとは、アプリケーションの起動から終了までの間に
アクティビティに対して発生するイベントのことです。
アクティビティは操作により状態遷移をしますが、その都度イベントを生成し、
それぞれがonCreateやonResumeなどの処理メソッドを呼び出します。
Android OSには、これらの遷移イベントに対してあらかじめデフォルトのイベント処理が
用意されていますが、異なる処理をする場合は処理メソッドを上書き追加する必要があります。


充放電マネージャのアプリは下記からプロジェクト1式がダウンロードできます。

  ★★★ バッテリ充放電マネージャのタブレットアプリのダウンロード ★★★

ダウンロードしたbinフォルダの中にapkファイルもありますので、いったんパソコンに
ダウンロードしたあと、直接タブレットにapkファイルをダウンロードすることもできます。