androidスマートフォン・タブレットとBluetoothで無線接続する入出力装置(AE-RN-42使用)

●概要
 スマホ等から、離れたところにある機器の制御や、離れたところにあるセンサー等のアナログデータを取得することができるものです。制御出力は、on/off(デジタル出力)が3つ、PWMが4つです。入力(デジタル入力)は、on/offが3つ、アナログ入力が3つです。
 PWM出力は、LEDの明るさ調整などに利用出来ます。アナログ入力は、各種センサーをつなぐことで、A/D変換された値をスマホで確認することができます。また、デジタル入力に変化があった場合や、アナログ入力のレベルが変化し、あらかじめ設定しておいた設定値を外れた場合に、音を発生させることができます(監視機能)。
 このセットは、主に下記の3つの部分から構成されています。下記の入出力回路において、PICを用いています。
 なお、このセットは、同様のRN42XVP-I/RMを使用したセットと同機能です。PICも同じ物です。 Bluetoothモジュール周りの配線が異なるだけです。
 1.Bluetooth モジュール
 2.入出力回路
 3.Androidアプリ

●お送りするパーツリスト
                       
部品名 型式等 数量
Bluetoothモジュール AE-RN-42 1個
PIC 16F1827 1個
コンデンサ 100μF 1個


 下記の製作例では、アナログ入力に温度センサーを、PWM出力に3色LEDを接続しています。そのために次のパーツを使用していますが、これはセットには含まれません。
                           
温度センサー MCP9701 2個
トランジスタアレイ TD62083(ULN2003AN) 1個
コンデンサ 0.1μF 2個
LED用抵抗 270Ω ※ 3個
RGB3色LED 不明 ※ 1個



●使い方について
 1.作成した回路の電源を入れておく。緑色のLEDが点滅する。
 2.下記リンクから、BluetoothControl.apkをダウンロード、インストールする。
 3.アプリ上にて「接続」ボタンを押と、周囲で検出されたブルートゥース端末のリストが表示される。下記は参考画面です。
 4.作成した回路のBluetoothモジュールが表示されているはずなので、それをタップする。正常なら「接続されました」と表示されます。
 5.強制的に接続が遮断された場合など、モジュールの緑色のLEDが点滅していない場合は、接続することが出来ません。そこで、通信が滞った場合、強制的にリセットをかけるようにしています。
 6.接続されれば、自動的に入力値の表示がされます。また、端末操作により信号が出力されます。
  これと同様です

●応用機能について(PWM組み合わせ保存機能)
 4つのPWM出力は、それらを3原色のLEDに接続して、リモコン照明に応用することも考え、設定を組み合わせて保存する機能を有しています。
 具体的には、PWM1(赤)、PWM2(緑)、PWM3(青)、PWM4(予備、黄色等)を4種類のそれぞれの設定値を4組登録・再現することができます。シークバーで各色の設定を行った後に、「設定1」等のボタンを長押しするとそのパターンが保存されます。「設定1」等のボタンを短く押すと、各色の設定値が再現されます。
 なお、長押しすることによって、ボタンの色が変わります。正確ではないですが、およそどのような色を登録したのか判別するためにボタンの色を変えています。
 それと、このPWMの設定値は端末側に保存しています。Bluetoothモジュール固有のアドレスも併せて保存しているため、多数の回路(Bluetoothモジュール)専用に、保存・再現することができます(寝室、リビングなど複数の照明を作った場合、それぞれ別の設定が可能)。
  これと同様です

●仕様について
 ・回路の電源電圧は3.3Vです。モジュールを載せているピッチ変換基板上に3.3Vレギュレータがありますので、5Vを供給すれば良いです。
 ・PWMの出力は、約8kHz、分解能10ビット(0〜1023)です。
 ・A/D変換入力は、分解能が10ビット(0〜1023)、サンプリングは毎秒5サンプル程度です。(A/D変換数値がふらつく場合、各入力とGND間に0.1μF程度のコンデンサを入れると比較的安定します。)
 ・BluetoothはSPPで通信を行っています。
 ・通信可能距離は、環境に左右されると思いますが、10m程度が限界とお考え下さい。
 ・端末アプリから、制御用コマンド・データ要求コマンドを送ると回路側が反応するようにしています。
  下記にコマンド、応答信号の説明がありますが、基本動作を確認するだけなら理解する必要はありません。アプリを自作する場合に必要となります。
 ・画面の向きを縦・横に変更すると、一時的に通信が途切れます。
 ・BluetoothモジュールAE-RN-42には、USB−シリアル変換であるFTDI社製チップ(FT231)が搭載されており、パソコンと接続できるようになっていますが、この機能は使っていません。また、USBでパソコンと接続しないでください。
 ・BluetoothモジュールAE-RN-42上にディップスイッチがありますが、すべてOFFに設定してください。
  その他にについては、これと同様です

●端末から送信するコマンドの種類
 ・on/off出力
     例1、 Command:DO1-0 (デジタル出力1のポートを0(=Lレベル)にする)
     例2、 Command:DO2-1 (デジタル出力2のポートを1(=Hレベル)にする)
    ※注意 コマンドの最後に0x00を付加すること。
 ・PWM出力
     例1、 Command:AO1-3ff (PWM出力1を100%とする)
          16進数で0x3ffは、10進数で1023であり、これが最大値である。
     例2、 Command:AO2-100 (PWM出力2を約25%とする)
          16進数で0x100は、10進数で256であり、最大値の約25%である。
    ※注意 コマンドの最後に0x00を付加すること。
 ・PWM出力一括設定(PIC側未実装)
     「Command:RGBA」に続いて3桁の16進数を4つつなげ、最後に0x00を送信する。
     例1、 Command:RGBA3ff3ff3ff3ff (PWM出力1〜4をすべて100%とする)
          16進数で0x3ffは、10進数で1023であり、これが最大値である。
     例2、 Command:RGBA100100100100 (PWM出力1〜4をすべて約25%とする)
          16進数で0x100は、10進数で256であり、最大値の約25%である。
    ※注意 コマンドの最後に0x00を付加すること。
 ・データの取得
    Command:Z
    ※注意 コマンドの最後に0x00を付加すること。
    これにより、デジタル入力、アナログ入力に加え、デジタル出力値、PWM出力値を一括で48バイトで表現して返送する(下記「回路から返答する信号の構造」参照)。
  これと同様です

●回路から返答する信号の構造
 ・返信される信号は、48バイト(見やすいようにテキスト)で構成されている。
 ・先頭から、デジタル入力4バイト、デジタル出力4バイト、PWM出力16バイト、アナログ入力16バイト、空き7バイト、終端0(=null)となっている。
 ・デジタル入力
  本来、1バイトで8入力を判別することできるが、テキストとしたことから、1バイトで4入力とした。1バイトを使って'0'〜'f'を表現し、4ビット(入力)に割り当てている。合計4バイトを割り当てているが、このセットでは先頭の1バイトのみ使用している(しかも入力ポートが3つだけなので、先頭1バイトの'0'〜'7'の範囲で使用している)。
 ・デジタル出力
  デジタル入力と同様に、テキストで表現しているため、1バイトで4出力を割り当てている。出力ポートが4つであることから、先頭1バイトのみ使用している。
 ・PMW出力の設定値
  1出力あたり、4バイトを割り当て、4出力で16バイトを使用している。
  0〜1023を16進数で表現すると、'0x0'〜'0x3ff'であるが、4バイトに満たない場合は先頭に0を入れて、さらに、'0x'を除いて'0000'〜'03ff'として指定する。
 ・アナログ入力
  1ポートあたり、4バイトを割り当て、4ポートで16バイトを使用している(使用PICの制約から、使用しているのは3ポートであり、1ポートは空き。)。
  PWM出力と同様に、1ポートあたり、4バイトを割り当て、4ポートで16バイトを使用している。
  ※上記以外に端末と回路の組み合わせが正しいことを確認する認証用応答があります(詳細非公開)。
  これと同様です

●Androidアプリについて
 ・現時点では、PlayStoreに登録できておりません。従って、私のHPから直接ダウンロードしていただく必要があります。この際、端末の「提供元不明のアプリ」のインストールを許可する必要があります。
 ・初めて作成したアプリであり、完成度は十分とはいえません。場合によっては強制終了されてしまうこともあります。
 ・万一、このアプリをインストールしたことによって端末の他の機能に影響が出ても補償いたしかねます。
 ・ソフトの内容(ソースファイル等)は、性質上非公開とさせて頂きます。
 ・全てのandroid端末(バージョン2.2.1以上)で汎用的に使用することができない可能性があります。購入前にインストール可能であることを確認することをおすすめいたします。
 ・端末の処理能力によっては正常に動作しない可能性があります。
 ・ダウンロードは「 このリンク 」から可能です。
  これと同様です

●アナログ入力の変換式について
 アナログ入力値の換算式(1次式)の定数の設定や、単位表示等の設定が可能です(下記スクリーンキャプチャ2参照)。
 この設定は、3つ(4つ)のアナログ入力それぞれ個別に設定可能です。また、センサーのばらつきによる補正(下記bの値でオフセットを補正できます)としても活用できます。
 (例)温度センサーなどの特性に応じて表示数値を換算する必要がある場合、換算式の係数(下記a, b)を設定します。

      Y = aX + b     ( Y:表示数値、 X:入力(0〜1023)) において

    (例)電源電圧が3.3Vであり、アナログ入力が1Vの時に「100」を、アナログ入力が3V の時に「0」を表示させたい時。
        1V時 → X = 1023÷3.3 = 310
        3V時 → X = 1023÷3.3×3 = 930    となるので、

        a = (0 −100)÷(930−310) = −0.1613
        b = 0 − (−0.1613)×930 = 150    となる。

●デジタル入力、アナログ入力の監視機能について
 ・デジタル入力の信号の変化のタイミングで音を鳴らすことができます。「DI警報」ボタンを押すと設定画面が表示されます。それぞれの入力において、L→H、H→Lの指定が可能です(下記のキャプチャ画像3参照)。
 ・アナログ入力の数値が、ある値以上になったり、ある値以下になったときに表示数値の色を赤色に変えるとともに、音を鳴らすことができます。アナログ入力の個別設定画面にて設定可能です(下記のキャプチャ画像2参照)。
 ・上記、いずれも、条件に達した場合、音が鳴るようになっています。音の種類の変更はできません。

●温度センサーとしてMCP9701
 温度センサーとしてMCP9701用を使用する場合、定数a,bとして下記を設定します。

  定数 a = 0.16542597, b = -20.51 と設定します。

●動作確認時の注意事項
 Bluetoothモジュール単体で動作確認しようとしても、単なるペアリングまでは行えますが、それ以降の操作はできません。




Bluetoothモジュールとして「AE-RN-42」を使用した場合の回路図(+5Vの供給は下記写真を参照してください(オレンジ色の配線))


応用回路図(温度センサー、3色LED等を接続)


応用回路写真1(赤色LED、RGB3色LED、それら用の抵抗はセットに含まない。)


応用回路写真2(Bluetoothモジュールから出ているオレンジの線は、外部からモジュールに5V電源供給するためのものです。)


Bluetoothモジュール写真1(加工前)


Bluetoothモジュール写真2(5V電源の供給位置参照用)




スクリーンキャプチャ1(アナログ入力2,3にセンサーを取り付けている。最新バージョンのものではありません。)


スクリーンキャプチャ2(アナログ入力2の設定画面、定数・単位・警報設定が可能)


スクリーンキャプチャ3(デジタル入力の「DI警報」画面、入力の変化による警報設定が可能)


スクリーンキャプチャ4(「接続」ボタンを押すと、デバイスの一覧が表示される。)


●オークション関係トップページへ(他にもいろいろと出品しています)
●PIC関連の出品物の入札を考えている方に(必ずお読み下さい)