ブログ

Armadillo-IoT+絶縁デジタル入出力/アナログ入力アドオン:微風速センサー(BS-05S)のデータをクラウド(Heroku)経由で見る

at_kazutaka.bito
2016年5月5日 12時13分

Armadillo-IoT+絶縁デジタル入出力/アナログ入力アドオンモジュール

と ベアトリックス株式会社様の微風速センサー(BS-05のS型)

を使って、 Armadillo-IoTからアナログ入力で、微風速センサー(BS-05S)の 風速のデータを読み取って、クラウド(Heroku)経由で見てみました。

(ブラウザのURLの部分は、後述の手順でHerokuから割り当てられたURLになりますので、伏字(***.herokuapp.com)にしてます。)

当方で確認した手順を下記に説明します。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
注意)
ここでは、当方が確認した簡易的な手順を示しているに過ぎません。(エラー処理等は考慮されていません。)
本格的には、電気的特性、ノイズ等を考慮した回路設計、エラー処理、フェイルセーフ等のソフト設計を行う必要があります。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

以下、 絶縁デジタル入出力/アナログ入力アドオンモジュールは、「DI/DO/ADアドオン」
微風速センサー(BS-05のS型)は、「微風速センサー」
と呼称します。

今回の動作確認は下図のような構成です。

手順の概要は下記のようになります。
 1.機材、資料
 2.微風速センサーとDI/DO/ADアドオンの接続
 3.微風速センサーからデータを取得するサンプルスクリプト
 4.クラウド(Heroku)側のアプリの準備
 5.微風速センサーのデータをクラウド(Heroku)経由で見る

1.機材、資料

機材は下記のもの使用しました。
・Armadillo-IoT+絶縁デジタル入出力/アナログ入力アドオンモジュール
(Armadillo-IoTのアドオンインタフェース(CON1)にDI/DO/ADアドオンを接続します。)

・微風速センサー(BS-05S)

今回の動作確認において、下記の資料を参考にしました。
微風速センサー BS-05S 取扱説明書
(詳細なご質問については、ベアトリックス株式会社様にお問い合わせ願います。)

微風速センサーとDI/DO/ADアドオンの接続

DI/DO/ADアドオンのインタフェースは、 Armadillo-IoT ゲートウェイスタンダードモデル製品マニュアル 19.7. Armadillo-IoT 絶縁デジタル入出力/アナログ入力アドオンモジュール DA00 19.7.3.4. CON3 アナログ入力インターフェース より、CON3の
 1ピン:ADC_CH0:アナログ入力CH0
 2ピン:GND_ISO:電源(GND_ISO)
を使用します。

微風速センサーは、下の写真のようにA方向、B方向の風速を計測し、アナログ電圧で出力します。

風速のアナログ電圧の出力方法は、2種類あります。
・-1V~+1Vで出力(A方向が+、B方向が-)
・A方向とB方向で別々に0~5Vで出力

ここでは、-1V~+1Vの出力(A方向が+、B方向が-)で風速を取得します。
この場合、微風速センサーの配線は下記のようになります。
 1番端子:電源5V
 2番端子:電源GND
 3番端子:アナログ出力(-1V~+1V)
 4番端子:アナログ出力のGND

ただ、Aramdillo-IoTのDI/DO/ADアドオンのアナログ入力の仕様は0~5Vですので、 上記の微風速センサーのアナログ出力(-1V~+1V)を直接入力することはできません。

そこで、ここでは、下記のような-1V~+1Vを1.5V~3.5Vに電圧をシフトさせる簡易的な回路を介することにしました。

上記回路を介して、Armadillo-IoT+DI/DO/ADアドオンと微風速センサーを接続します。

この接続では、 Armadillo-IoTのCON1側のDI/DO/ADアドオンの  CON3の1ピン:ADC_CH0 で、  微風速センサーのアナログ出力(-1V~+1V)を1.5V~3.5Vにシフトした電圧 を取得するような接続になっています。

3.微風速センサーからデータを取得するサンプルスクリプト

手順2の接続の場合、微風速センサーの出力に対して、DI/DO/ADアドオンには、
 1.5V~2.5Vの場合、B方向の風速
 2.5V~3.5Vの場合、A方向の風速
のようなアナログ電圧が入力されていることになります。

Armadillo-IoTで上記のデータを取得するには、 Armadillo-IoT ゲートウェイスタンダードモデル製品マニュアル 6.15. Armadillo-IoT 絶縁デジタル入出力/アナログ入力アドオンモジュール DA00 6.15.3. 電圧を取得する に記載されている方法を使用します。

cat /sys/bus/iio/devices/iio:device0/in_voltage0_raw

で、AD変換した値を確認して、

cat /sys/bus/iio/devices/iio:device0/in_voltage_scale

で、ADコンバータの最小入力電圧変動を確認して、

[ADコンバータへの入力電圧 (mV)] = [AD変換値] × [最小入力電圧変動]

で、入力電圧を算出します。

ここでは、上記の入力電圧を-1V~+1Vに変換したログの表示とログファイルへの出力を行うサンプルスクリプトを作成しました。
script_adin_bs-05s.tar.gz

補足)
電圧から風速への変換については、 微風速センサー BS-05S 取扱説明書 の出力特性のグラフを参考に算出する必要があります。

このファイルを展開したディレクトリscript_adin_bs-05s内のget_windが、  get_wind: 微風速センサーのアナログ電圧出力を取得するスクリプト となっています。

補足)ログファイルは、手順4のクラウド側のアプリに合わせたテキストになっています。

<サンプルスクリプトの用法>
上記のスクリプトをArmadillo-IoTの/rootディレクトリに置いて、実行権限を実行してください。 例として、風速のデータを取得するスクリプトget_windを実行すると下記のようになります。

[root@armadillo-iotg (ttymxc1) ~]# ls
get_wind
[root@armadillo-iotg (ttymxc1) ~]# chmod +x get_wind
[root@armadillo-iotg (ttymxc1) ~]# ./get_wind
wind(Analog Input)=2.572[V]
wind(Calclulated)=0.072[V]

補足)
wind(Analog Input)=2.572[V]:アナログ入力をAD変換した値
wind(Calclulated)=0.072[V]:アナログ入力をAD変換した値から2.5[V]引いた値

ログファイルlog_wind.txtの内容は下記のようになっています。

[root@armadillo-iotg (ttymxc1) ~]# cat log_wind.txt
wind=0.072

4.クラウド(Heroku)側のアプリの準備

4.1.準備

まず、Armadillo-IoT + Heroku(Node.js)でHello World のとおり、 Armadillo側からのデータ送信と動作確認まで行ってください。 以下、この手順を実行したことをベースに説明します。 よって以下では、ATDE5の ~/temp/myapp がクラウド(Heroku)側のアプリ用のディレクトリとします。

4.2.サンプル

クラウド(Heroku)側のアプリのサンプルソースを添付します。
myapp_bs05_20160505.tar.gz を解凍して、myapp_bs05_20160505ディレクトリの中身を ~/temp/myapp ディレクトリの下にコピーしてください。

<サンプルソースの説明>
今回のサンプル特有の部分のみ説明します。

app.js

・HerokuのURL(***.herokuapp.com)にアクセスした際、index.ejsを表示するようにします。  表示の際、index.ejsに微風速センサーの出力電圧を与えています。

app.get('/', function(req, res){
  res.render('index', 
    {
        wind: wind
    });
});

・HerokuのURL(***.herokuapp.com/series)にポストされたデータ(※)をパースして、上記のindex.ejsに渡す変数に代入しています。
※)手順5のサンプルスクリプト(send_adin_wd3.sh)で生成される

wind=0.072

という形式のデータを想定しています。

app.post('/series', function(req, res) {
    console.log('post:/series');

    wind = req.body.wind;

    res.send("Received\n");
});
view/index.ejs

・上記app.get('/', function(req, res)により、受け取った微風速センサーのセンサーデータを表示するhtmlです。

4.3.サンプルの実行

下記のコマンドで、クラウド(Heroku)にアップロードします。

[atde ~/temp/myapp]$ git add --all
[atde ~/temp/myapp]$ git commit -m "bs05s"
[atde ~/temp/myapp]$ git push heroku master:master

4.4.アプリの動作確認

Webブラウザで https://.herokuapp.com (.herokuapp.comの部分は、手順4.1で確認したHerokuのURL) を実行すると、冒頭のWebブラウザの写真のように表示されます。 (ここまでの手順では、データを受信してないので、noneになります。)

5.微風速センサーのデータをクラウド(Heroku)で見る

Armadillo-IoTから微風速センサーのデータをクラウドに送信するスクリプトは、添付の script_adin_bs-05s.tar.gz を展開したディレクトリscript_adin_bs-05s内の send_adin_bs-05s.sh になります。

このスクリプトをArmadillo-IoTの/rootディレクトリに置いて、実行権限をつけてください。 手順3のサンプルスクリプトget_windも Armadillo-IoTの/rootディレクトリに置いて実行します。

[root@armadillo-iotg (ttymxc1) ~]# chmod +x send_adin_bs-05s.sh
[root@armadillo-iotg (ttymxc1) ~]# ls /root
get_wind
send_adin_bs-05s.sh

send_adin_bs-05s.shは、下記のように使用します。

send_adin_bs-05s.sh <HerokuのURL>
引数
 HerokuのURL:手順4.1で確認したHerokuのURL

例)HerokuのURLが***.herokuapp.comの場合の実行例です。

[root@armadillo-iotg (ttymxc1) ~]# /root/send_adin_bs-05s.sh https://***.herokuapp.com/series
wind(Analog Input)=2.572[V]
wind(Calclulated)=0.072[V]
(以降、10秒ごとにログが追加される。)

このとき、ログファイルの内容は下記のようになっています。

[root@armadillo-iotg (ttymxc1) ~]# cat log_wind.txt
wind=0.072

Armadillo-IoTは、10秒毎に微風速センサーのアナログ出力の電圧値を取得して、書き込んだログファイル  log_wind.txt から読みだして、クラウド(Herokuのhttps://***.herokuapp.com/series)に送信します。

Webブラウザで、https://***.herokuapp.comにアクセスすると、Armadillo-IoTが送信した微風速センサーのデータが 冒頭のWebブラウザの写真のように見ることができます。

補足)
Webブラウザの表示の更新には再読み込みが必要です。 今回の設定の場合は、10秒毎に微風速センサーのデータを取得しているので、Webブラウザの表示の更新間隔は10秒程度になります。 クラウド(Heroku)側のアプリがデータを受信した場合は、"Received"という文字をArmadillo-IoTに送信するので、 クラウド(Heroku)側が受け取ったかどうかを、Armadillo-IoTの標準出力で確認することができます。