カテゴリー別アーカイブ: JavaScript

AM2302(DHT22/RHT03)を5個使って温度・湿度を測定

2014-11-27 15.00.05 2014-11-27 14.58.13 [概要]
AOSONG社のAM2302(DHT22,RHT03とも呼ばれているらしい)を5個使って室内の温度・湿度の測定値を蓄積してみた。使ったのは、SainSmartUno+EhternetShield+ブレッドボードと自作のWebサービス。
[測定プログラム]
AM2302の測定値取得には以下のWebサイトのコードを利用させたいただいた。作者の方に感謝。
(Arduino温湿度測定ロガー・湿度センサーの比較)
http://www.geocities.jp/bokunimowakaru/diy/arduino/humidity.html
[測定値蓄積Webサービス]
同時に複数の測定値を蓄積してグラフ化したかったのでWebサービスを自作した。Webサービスは公開して、みんなに使ってもらえるようにしたい。連続稼働テストの様子を見ながら、その時が来たら公開したいと思う。
現在は最速で約7秒間隔で(温度+湿度)*5個=10個の測定値をまとめて送信している。
Webサービスは1台運用なので、サーバが停止している、ArduinoからWebサービスに送信できない、といった障害が起こると、測定値はどこにも蓄積されない。つまり、失われる。
商用化する場合は、障害への対応が(サーバ側、センサー側とも何かしら)できる必要がある。

2014-11-30_temperature 2014-11-30_humidity [測定値のグラフ表示]
とりあえず、Highchartsを使うことにした。有償で商用利用できるのだが、現状どうするか決めていないので、試用させていただく。
http://www.highcharts.com/

【測定期間】2014/11/30 00:00:00~2014/11/30 23:59:59
【湿度個数5センサー分】26000個(3.2秒)
【温度個数5センサー分】14000個(2.4秒)
()の数値はhtmlデータの生成時間、実際に描画する時間が数秒程度以上かかる。 (全データを吐き出させると湿度、温度毎にそれぞれ63800個になる。同じ値が連続する場合は、途中の測定値を間引いて個数を減らしている。描画間隔を5分とかに拡大して、平均値をプロットさせようと思うが、現状は生データを素直に出力させている)
11/30のデータだがグラフは12/30-12/31のようになっている。これは、JavaScript出力させていている Date.UTC(2014,10,30…
の月の部分を0始まりなのに誤って1始まりとして以下のように記述したため。
Date.UTC(2014,11,30…

HighchartsはJPG/PNG形式などでグラフを保存できるのだが、今回テスト表示したグラフでは画像が作成できずエラーメッセージが表示された。センサーを1個にすれば画像が作られたが5個になると無理っぽい。

実際に動かすといろいろなことがあって面白い。

さて、肝心の温度・湿度センサーの評価だが、個々のセンサーにより値が異なるが、全体の傾向は同じである。個体差があること、誤差があることを考慮したうえで使うのであれば問題はないと思う。温度はカタログ精度は±0.5℃、真値はわからないけど、緩めて±1℃と思えば使えそうかなと思う。湿度も同じように精度を緩めればいけるかな。

温度と湿度を測定できるようになったので、次は、このブレッドボードに照度センサー、気圧センサーを付けて測定してみようと思う。温湿度センサーは5個は多いと思うけど、スペースがあったら置いておきましょうか。

JavaScriptでURL引数で渡された変数値を取得する

JavaScriptでURL引数で渡された変数値を取得する


// urlのparts.html?id=xxxのxxx部分を取得
function get_url_item(id)
{
var url=location.search;
var arr=url.split("?");
var value="";
// ?の直後を取得
if(arr.length>1){
// &で項目を分離
var items=arr[1].split("&");
var max=items.length;
// &で分割した項目を=でキーと値に分離
for(var i=0;i key_values=items[i].split("=");
if(key_values[0]==id){
value=key_values[1];
break;
}
}
}
return value;
}