赤子の寝室環境(温度・湿度)を obniz 定期取得しはじめたメモ
赤子の寝室環境(温度・湿度)を obniz 定期取得しはじめたメモです。
状況
赤子が無事にやって来まして嬉しいわけですが、新たな注意ポイントも増えていきます。その中で、環境(温度・湿度)は、冬にかけて乾燥したり冷え込むことを考えると健康的にも気になるところです。
ひとまずウチのファミリーテックの第一弾は、ゆるいスタートで寝室の環境計測から(現状は温度のみ)
— Tanaka Seigo (@1ft_seabass) October 21, 2019
夫婦で会話してたら新生児が泣く原因に温度&湿度要因もあると気付き、計測だけしてみるのをサクッと #obniz で。ゆるく試す。 pic.twitter.com/ESQE4bw1vo
ということで obniz でサクッと計測。
今はそばにあったLM35DZ温度センサーでやってる。センサー良くしたり、どこかにデータ貯めたり、定期実行は徐々に載せていく予定。
— Tanaka Seigo (@1ft_seabass) October 21, 2019
同部屋に物理が温度計もあるし、別の部屋では台風時計測してる良いセンサもあるのでクロスチェックは大丈夫。
開発してる間に必要がなくなるかもだけども😇 #obniz pic.twitter.com/ZeXppkKuzy
高精度IC温度センサ LM35DZ: センサ一般 秋月電子通商
こちらの温度センサーで計測をしています。
obnizのソースコードはこんな感じ。obnizのLM35DZ ページを参考にしています。
html
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@2.4.0/obniz.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="obniz-debug"></div>
<h3>Home temprature checker ver 0.01</h3>
<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
let temprature = 0;
let pre_temprature = 0;
let calibulation = -2;
obniz.onconnect = async function () {
var tempsens = obniz.wired("LM35DZ", { gnd:0 , output:1, vcc:2});
tempsens.onchange = function(data){
temprature = Math.floor(data) + calibulation;
};
setInterval(async function(){
if(Math.abs(pre_temprature - temprature) > 0){
console.log(temprature + " C");
obniz.display.clear();
obniz.display.print("Home temprature");
obniz.display.print("checker ver 0.01");
obniz.display.print("----");
obniz.display.print(temprature + " C");
}
pre_temprature = temprature;
},1000);
}
</script>
</body>
</html>
台風時に計測していた
どこでも環境センサー WS-USB01-THPも持っています。
なるほど常時計測してるセンサで台風19号の気圧変化把握。ピークが960hPaかー。とてもつよい。 pic.twitter.com/pJAwxkbcRJ
— Tanaka Seigo (@1ft_seabass) October 12, 2019
赤子が産まれるギリギリ直前ではあの大型の台風19号の計測はしていましたが、まさか、赤子のことを考えた途端に、より環境(温度・湿度)への重要性が高まるとは思ってもみませんでした。
湿度も取りたいので温湿度センサー SHT31
湿度も取りたいので温湿度センサー SHT31 を買いました。
#obniz で使いやすそうな温湿度センサー SHT31 来た。 pic.twitter.com/JKodOFUfIC
— Tanaka Seigo (@1ft_seabass) October 25, 2019

付属のピンが付いているのでパキッと5本ぶんで追って準備。これ、ノリで折ってしまったけど、折る数がしくじると辛いやつだった。

マスキングテープで固定してハンダ付けをします。

なんとかできた。

この取り付け方は説明書がオススメしているやり方です。
ということで取り付けてみた
では動かしてみましょう。

温湿度センサー SHT31をこのように取り付けてみました。
obnizのSHT31のドキュメントを参考に組んでいきます。
ソースコードはこちらです。
html
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@2.4.0/obniz.js" crossorigin="anonymous"></script>
</head>
<body>
<div id="obniz-debug"></div>
<h3>Home temprature checker ver 0.01</h3>
<script>
var obniz = new Obniz("OBNIZ_ID_HERE");
let temprature = 0;
let pre_temprature = 0;
let temprature2 = 0;
let humidity2 = 0;
let pre_temprature2 = 0;
let pre_humidity2 = 0;
obniz.onconnect = async function () {
var tempsens = obniz.wired("LM35DZ", { gnd:0 , output:1, vcc:2});
tempsens.onchange = function(data){
temprature = Math.floor(data * 10) / 10;
};
var sensorSHT31 = obniz.wired("SHT31", {vcc:7, sda:8, scl:9, adr:10, gnd:11, addressmode:5});
setInterval(async function(){
temprature2 = await sensorSHT31.getTempWait();
temprature2 = Math.floor(temprature2 * 10) / 10;
humidity2 = await sensorSHT31.getHumdWait();
humidity2 = Math.floor(humidity2 * 10) / 10;
},5000);
setInterval(async function(){
if(Math.abs(pre_temprature2 - temprature2) > 0){
pre_temprature2 = temprature2;
}
if(Math.abs(pre_humidity2 - humidity2) > 0){
pre_humidity2 = humidity2;
}
if(Math.abs(pre_temprature - temprature) > 0){
obniz.display.clear();
obniz.display.print("Room Env");
obniz.display.print("ver 0.02");
pre_temprature = temprature;
}
console.log("temperature1(LM35DZ) : " + temprature + " C");
console.log('temperature2(SHT31) : ' + temprature2 + " C");
console.log('humidity2(SHT31) : ' + humidity2 + " %");
},30000);
}
</script>
</body>
</html>
SHT31とLM35DZは同時に動かします。これで2つのセンサーの挙動が追えるので、ズレが生じたときも情報が多い状態で臨めます。

obnizを起動してみると30秒後にうまく取得ですること出来ました。
温度どうも合わないので調べてみる

さきほどのこちら、なにか気づきませんか?LM35DZと2度ほど大きく食い違っているんです。

アナログの温度計を見ても、さらに違う。

ヨドバシ.comでドリテック DRETEC O-257WT [小さいデジタル温湿度計] も購入して調べてみます。

さらにLM35DZよりも1~2度くらい温度が低いのですね。
SHT31をobnizと離してみたらズレが収まってきた
よく考えたら obniz もディスプレイ部分が熱を持っていて、もしかするとSHT31は放射熱を捉えてしまってるかもと対処してみました。

直挿しではなくブレッドボードから離してみましたが、あまり効果が分からず。

ケーブルを使ってもう少し離してみます。

これでどうだろう?

横から見るとこんな感じ。ケーブル自体が遮ってますし、距離も離れました!

1時間くらい静置してたら良い感じで下がってきました。やっぱこれかな????

その後、数時間かけてLM35DZと差が縮まりました。
さきほどのドリテックのデジタル温度計を見ても 22.3 度だったので、おおよそ1度の誤差まで縮まりました。
まとめるとこんな感じ。
- アナログ温度計
- 目視で21度ちょい越え
- ドリテックのデジタル温度計
- 22.3 度
- obnizにとりつけたLM35DZ
- 23.5 度
- obnizにとりつけたSHT31
- 23.6 度
といった状況。うーん、指標が1つだけしかないと迷いますが、このように指標が多くなっても「どれが本当の環境情報なんだ・・・」と迷いますねー。
センサーの特性・もともとの誤差の許容範囲・各センサーの置いている位置などなど影響を受けそうなので、このあたりは、継続的にデータを取って、一定のズレた値をマイナスしてキャリブレーションしてしまえばいいのか判断してみようと思います。