【オシロスコープの概要】
PICマイコンで信号をサンプリングしたデータを、Bluetoothを使って一括で
タブレットに送信し、タブレットで波形として表示するオシロスコープです。
製作は、PICマイコンを使ったデータ収集ボードと、タブレットのアプリケーションプログラムとなります。
このワイアレスオシロスコープの全体構成は下図のようになります。
基本的にはタブレットと実際に信号を入力するデータ収集ボードとで構成していますが、
データ収集ボード用の電源としてスマホ充電池を流用しています。
充電池の代わりに単3電池4本の直列接続でもよいですし、DC5VのACアダプタ
でも問題ありません。
タブレットにはNexus 7(2012)またはNexus 7(2013)を使いました。表示領域が、
7インチで1280×800ピクセルまたは1920×1200ピクセルとなっています。
ピクセル数が同じタブレットであれば問題なく動作すると思います。
製作するワイアレスオシロスコープのシステム構成を下図のようにするものとします。
データ収集ボードを計測する信号源の近くに置き、そこで計測します。
計測結果はBluetoothの無線で送信されますから、少し離れたところででも、
実際に測定している信号の波形をリアルタイムで見ることができます。
データ収集ボードの電源をバッテリとすれば、どこにでも設置できますので、
結構便利に使うことができます。
ワイアレスオシロスコープの機能として、タブレット側の機能を下表のように
するものとします。
グラフ表示はNexus 7(2012)の場合は、タブレットの表示領域(1280×800ピクセル)
から、1000×700ピクセルで表示するものとしました。
Nexus 7(2013)の場合は、タブレットの表示領域(1920×1200ピクセル)から
1520×1000ピクセルで表示するものとしました。
水平同期だけタブレットアプリのボタンで選択できるようにしますが、垂直ゲイン
と垂直位置はデータ収集ボード側の可変抵抗で行うこととします
項 目 機能・仕様 備考 端末選択機能 ペアリング済みの端末リストを表示し、そこから選択する グラフ表示 7インチ タブレット
波形のグラフ表示 1000×700ピクセルまたは1520×1000ピクセル
2チャネルの内、選択されたいずれかのチャネルを表示する
垂直方向の位置とゲインはデータ収集ボード側の可変抵抗で行うトリガ0Vレベルとする 入力チャネル 2チャネル
ボタンタップで2チャネルの表示を交互に切り替え水平同期切替 アプリケーションのボタンによる選択で水平同期時間を切り替える。ひと目盛の単位時間を下記から選択
水平同期選択 6種類
単位時間 サンプリング周期
10μs 1μs
20μs 1μs
100μs 1μs
200μs 2μs
1ms 10μs
5ms 50μs
トリガ機能あり
トリガレベル 0V固定最高サンプリング周期 1Msps
2000サンプルを格納し表示はトリガ位置から1000または1500サンプル分とする
これらの機能を実現するためのBluetoothの無線通信データのフォーマットを下表のようにします。
水平同期指定、チャネル指定などの必要な情報をすべて測定開始コマンドに含めましたので、
1種類のコマンドだけとなっています。
また、折り返しのデータも測定データだけですので、1種類だけです。測定データは10ビットの
2000サンプル分になりますので、4kバイトのデータとなりますが、これを一括で送信しています。
機能 タブレット → PICマイコン タブレット ← PICマイコン 計測開始
コマンド「S」「T」, h, c,「E」パディング
h:水平同期種別(0〜5)
c:チャネル指定(0 or 1)
パディングは64バイト固定長にするため0を挿入「M」「N」,data0,data1,・・・・・,
data3999,「E」パディング
datax:10ビットのサンプリングデータで上位バイト、
下位バイトの順
パディングで合計4100バイトの固定長で送信
【タブレットアプリの全体構成】
Eclipseで生成されたプロジェクトの全体構成は下図のようになっています。
パッケージ名「com.picfun.bt_oscillo」が本アプリケーションを区別する名前で、
タブレットにダウンロードする際、このパッケージ名で認識区別されます。
したがって、同じ名前のパッケージ名があるとダウンロードエラーとなりますので、
パッケージ名は唯一の名前にする必要があります。
srcフォルダがソースファイル格納フォルダで、ここにメインのソースと
Bluetooth用ライブラリのソースがあります。
「BT_Oscillo.java」がアプリケーション本体で新規作成部分になり、
ボタンがタップされたときのイベントごとの処理、Bluetoothからの受信データの処理と
波形表示処理を実行します。
Bluetoothの端末探索「DeviceListActivity.java」と、クライアントとしての送受信を
制御する部分「BluetoothClient.java」は、独立ファイル構成としています。
レイアウトツールを使いませんので、リソースファイルのファイルはペアリングリスト
表示用画面のrowdata.xmlだけとなっています。
アプリケーションの機能としてはボタンに対応させていますので、画面構成で説明します。
オシロスコープのアプリケーションの画面構成は、下図のようにしました。
この画面はEclipseのグラフィックレイアウトツールは使わず、プログラムの中に記述して
作成しています。
左側が操作表示部で、右側がグラフ表示部になります。
操作表示部には、端末の接続ボタン、入力チャネルの切り替え、サンプリング周期の
切り替えボタンが6個用意されています。
グラフ表示部は、1000×700ピクセルまたは1520×1000ピクセルの範囲に座標が
常に表示されていて、1秒周期で計測した波形を表示するようにしています。
中央の横線が0Vのレベルになります。グラフ表示部の下側に選択中のサンプリング周期
とチャネル番号を表示しています。
ボタンと画面に対応する機能は下表のようにしました。
これらの機能はBluetoothの制御以外すべてアプリケーション本体で実行しています。
ボタン 機能内容 備考 端末接続 最初にBluetoothで接続する端末を選択し接続する。選択できる端末はペアリング済みのものに限定
接続状態をメッセージ領域に下記のように表示する
「接続待ち→接続中→接続完了または接続失敗」選択可能端末はダイアログで表示する
Bluetoothが無効になっている場合はダイアログで有効化を促すCH切替 ボタンをタップするごとにCH0とCH1を交互に切り替える
次の計測実行コマンドで送信されるサンプリング周期 ボタンタップで水平同期を指定する
次の計測実行コマンドで送信されるまだ計測が開始されていない場合は、ボタンタップで計測実行コマンドを送信する グラフ表示 データ受信で下記を表示する
・座標表示
・波形表示
・チャネル番号と水平同期種別表示垂直位置はデータ収集ボード側の可変抵抗で調整
オシロスコープとしてのアプリケーション本体のプログラムである「BT_Osscillo.java」
ファイルの詳細を説明します。
まず、アプリケーション本体の全体構成は下記リストのようになっています。
アクティビティ本体の最初でフィールドの変数や定数を宣言定義しています。
次にアプリケーションの状態遷移に伴うイベントごとの処理メソッドがあります。
最初に実行されるonCreateメソッドで、GUIを表示してからボタンのイベントリスナの
生成をし、さらにBluetoothのオブジェクトを生成しています。
その次は、端末接続、チャネル切り替え、サンプリング周期を設定するボタンの
イベント処理があります。
次がBluetooth受信のスレッドです。スレッド内は永久ループとなっていて、
1秒間隔でデータ計測要求をしては、4100バイトのデータを受信しバッファに保存します。
全部のデータの受信が完了したら、グラフ描画メソッドを呼び出して波形グラフを
表示しています。グラフ描画クラスでは、座標とデータ表示を実行します。
【ダウンロード】
ワイアレスオシロスコープのタブレットのアプリケーションは下記からダウンロード
できます。Eclipseのプロジェクトファイル1式となっています。
binフォルダの中にはapkファイルも含まれていますので、パソコンに展開したあと
直接タブレットにダウンロードできます。
★★★ オシロスコープのアプリ ダウンロード (Nexus 7(2012)用) ★★★
★★★ オシロスコープのアプリ ダウンロード (Nexus 7(2013)用CH追加修正版) ★★★