ブログ

Armadillo-IoT+絶縁デジタル入出力/アナログ入力アドオン:土壌水分センサー(WD-3-WET-5Y)のデータをクラウド(Heroku)経由で見る

at_kazutaka.bito
2016年3月4日 10時54分

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

と 株式会社A・R・P様の土壌水分センサー(WD-3-WET-5Y)

を使って、 Armadillo-IoTからアナログ入力で、土壌水分センサー(WD-3-WET-5Y)の 体積含水率、電気伝導率、温度のデータを読み取って、クラウド(Heroku)経由で見てみました。

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

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

以下、
絶縁デジタル入出力/アナログ入力アドオンモジュールは、「DI/DO/ADアドオン」
土壌水分センサー(WD-3-WET-5Y)は、「土壌水分センサー」
と呼称します。

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

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

1.機材、資料

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

土壌水分センサー(WD-3-WET-5Y)

今回の動作確認において、下記の資料を参考にしました。
土壌水分センサー(WD-3-WET-5Y)の取扱説明書
(詳細なご質問については、株式会社A・R・P様にお問い合わせ願います。)

※)
土壌水分センサーは、体積含水率、電気伝導度、温度を3本の信号線でアナログ出力します。
DI/DO/ADアドオンのアナログ入力は2系統であるため、2個のDI/DO/ADアドオンを使用します。

土壌水分センサーとDI/DO/ADアドオンの接続

土壌水分センサーは、体積含水率、電気伝導度、温度をアナログ出力またはデジタルI/Fで取得することが可能です。 ここでは、アナログ出力からデータを取得します。

土壌水分センサーの信号線の色と信号の関係は以下のようになっています。
 赤 :電源(+)
 赤白:データ
 灰 :電源(-)
 黒白:体積含水率(VMC)
 緑白:電気伝導度(EC)
 緑:温度(℃)
 黒:電源(-)
黒白:体積含水率(VMC)、緑白:電気伝導度(EC)、緑:温度(℃)の信号線がアナログ出力になっています。

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)
 3ピン:ADC_CH1:アナログ入力CH1
を使用します。

土壌水分センサーの取扱説明書に記載のアナログ出力からデータを取得する場合の接続方法を参考に、
Armadillo-IoT+DI/DO/ADアドオンと土壌水分センサーを接続します。 Armadillo-IoT+DI/DO/ADアドオンと土壌水分センサーの接続図

上図に基づいてArmadillo-IoT+DI/DO/ADアドオンと土壌水分センサーを接続した写真

この接続では、 Armadillo-IoTのCON1側のDI/DO/ADアドオンの
 CON3の1ピン:ADC_CH0:アナログ入力CH0で、体積含水率(VMC)
 CON3の3ピン:ADC_CH1:アナログ入力CH1で、電気伝導度(EC)
Armadillo-IoTのCON2側のDI/DO/ADアドオンの
 CON3の1ピン:ADC_CH0:アナログ入力CH0で、温度(℃)
のデータを取得するような接続になっています。

3.土壌水分センサーからデータを取得するサンプルスクリプト

土壌水分センサーのデータは、
 体積含水率(VMC):0-1[V]
 電気伝導度(EC):0-1[V]
 温度(℃):0-1.2[V]
の電圧で出力されています。

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変換値] × [最小入力電圧変動]

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

ここでは、上記の入力電圧の取得、算出に加えて、土壌水分センサーの取扱説明書のグラフを参考に、
 体積含水率(VMC):0-1[V]: [%]にするには、100倍する
 電気伝導度(EC):0-1[V]: [mS/cm]にするには、7倍する
 温度(℃):0-1.2[V]: [℃]にするには、1.2で割って、50倍する
の計算を行い、ログの表示とログファイルへの出力を行うサンプルスクリプトを作成しました。
x5_sample_adin_wd3.tar.gz
このファイルを展開したディレクトリx5_sample_adin_wd3内のget_***という3つのファイルが、
 get_vmc: 体積含水率(VMC)を取得するスクリプト
 get_ec: 電気伝導度(EC)を取得するスクリプト
 get_tmp: 温度(℃)を取得するスクリプト
となっています。

備考)スクリプト内のiio:device、in_voltage_rawの"*"の値で、取得するデータを選択しています。
 (iio:device0, involtage0_raw):(CON1側のDI/DO/ADアドオン、CH0):体積含水率(VMC)
 (iio:device0, involtage1_raw):(CON1側のDI/DO/ADアドオン、CH1):電気伝導度(EC)
 (iio:device1, involtage0_raw):(CON2側のDI/DO/ADアドオン、CH0):温度(℃)

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

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

[root@armadillo-iotg (ttymxc1) ~]# ls
get_vmc
[root@armadillo-iotg (ttymxc1) ~]# chmod +x get_vmc
[root@armadillo-iotg (ttymxc1) ~]# ./get_vmc
vmc(Analog Input)=0.627[V]
vmc(Calclulated)=62.7[%]

補足)
vmc(Analog Input)=0.627[V]:アナログ入力をAD変換した値
vmc(Calclulated)=62.7[%]:取扱説明書のグラフに基づいて[%]で算出した値

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

[root@armadillo-iotg (ttymxc1) ~]# cat log_vmc.txt
vmc=62.7

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

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

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

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

app.js

・HerokuのURL(***.herokuapp.com)にアクセスした際、index.ejsを表示するようにします。
 表示の際、index.ejsに体積含水率、電気伝導度、温度を与えています。

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

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

vmc=59.2&ec=1.050&tmp=31.042

という形式のデータを想定しています。"&"で体積含水率、電気伝導度、温度の各データを区切っています。

app.post('/series', function(req, res) {
    console.log('post:/series');
 
    vmc = req.body.vmc;        // 体積含水率
    ec = req.body.ec;        // 電気伝導度
    tmp = req.body.tmp;        // 温度
 
    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 "wd3"
[atde ~/temp/myapp]$ git push heroku master:master

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

5.土壌水分センサーのデータをクラウド(Heroku)で見る

Armadillo-IoTから土壌水分センサーのデータをクラウドに送信するスクリプトは、添付の x5_sample_adin_wd3.tar.gz を展開したディレクトリx5_sample_adin_wd3内の send_adin_wd3.sh になります。

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

[root@armadillo-iotg (ttymxc1) ~]# chmod +x send_adin_wd3.sh
[root@armadillo-iotg (ttymxc1) ~]# ls /root
get_ec
get_tmp
get_vmc
send_adin_wd3.sh

send_adin_wd3.shは、下記のように使用します。

send_adin_wd3.sh <HerokuのURL>
引数
 HerokuのURL:手順4.1で確認したHerokuのURL

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

[root@armadillo-iotg (ttymxc1) ~]# ./send_adin_wd3.sh http://***.herokuapp.com/series
vmc(Analog Input)=0.627[V]
vmc(Calclulated)=62.7[%]
ec(Analog Input)=0.197[V]
ec(Calclulated)=1.379[mS/cm]
tmp(Analog Input)=0.739[V]
tmp(Calclulated)=30.792[degC]
(以降、10秒ごとにログが追加される。)

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

[root@armadillo-iotg (ttymxc1) ~]# cat log_vmc.txt
vmc=62.7
[root@armadillo-iotg (ttymxc1) ~]# cat log_ec.txt
ec=1.379
[root@armadillo-iotg (ttymxc1) ~]# cat log_tmp.txt
tmp=30.792

Armadillo-IoTは、10秒毎に土壌水分センサーのアナログ出力の電圧値を取得して、 体積含水率、電気伝導度、温度のデータの算出値を書き込んだログファイル
 log_vmc.txt
 log_ec.txt
 log_tmp.txt
から読みだして、クラウド(Herokuのhttps://***.herokuapp.com/series)に送信します。
補足)手順4のクラウド側のアプリに合わせて、各データを"&"で区切った文字列を送信しています。

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

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