2017年9月10日日曜日

センサー間の誤差

温度ログを取り始めて2日目。

Raspberry piのチップに内蔵されている温度ログを取っていた時は放置しすぎてsdカードが壊れた気がしますが、tmpもram上に展開させているため、容量は小さいながら過度の書き込みでも気にならない状態です。ただ、放置しておけばtmpが溢れて終わります。


止まらないように sudo crontab -e でロギングスクリプトとtmpからsdストレージへバックアップする日次スクリプトも準備済みです。
1+3+2+2個の数字を記録していますが、ざっくりと計算したところデータだけなら3Mbyte程度のようです。
ちゃんとrebootやshutdownでも保存するように仕込まないと記録が飛びますが、即時バックアップ用のスクリプトでも書いておきましょうかね。

本題の誤差の結果ですが…
sqlite> select max(abs(temperature2 - temperature))*0.001, max(abs(pressure2-pre
ssure))*0.001, max(abs(temperature3 - temperature))*0.001, max(abs(humidity3-hum
idity))*0.001 from temperatures;
0.545|2.132|27.605|53.089
sqlite> select max(abs(temperature2 - temperature))*0.001, max(abs(pressure2-pressure))*0.001, max(abs(temperature3 - temperature))*0.001, max(abs(humidity3-humidity))*0.001 from temperatures where temperature3 != 0;
0.545|2.132|1.719|10.327
sqlite> .quit

こんな感じになりました。
BME280を基準にBMP180とDHT11の最大差異を求めてみました。
DHT11でセンサーからエラーで読めない時があったのでそのデータを除外した結果も求めてみました。

BMP180 温度 0.545 C 気圧 2.132 hPa
DHT11 温度 1.719 C 湿度 10.327%

BME280とBME180の誤差は、実用上全く問題にならないですね。
DHT11は…まぁ無いよりは増し程度でしょうか。スペック上の誤差通りといえばそうなんですが、温度も湿度もどちらかもうちょっと近い数字を期待していたのですが残念です。5V駆動させた方が誤差が小さくなるといった話も見かけましたが、実際どうなんでしょう?
体感としては3.3V駆動でも5V駆動でも違いはないように感じています。



直接SQLが使えるようにapt-get sqlite3しましたが、やはり便利ですね。
ただ、begin transactionしないとデフォルトで常にcommitされてしまうのが恐ろしいところです。
あまり期待していませんでしたが attach database で別の.dbファイルも操作できるので、思っていた以上にきちんと動作するんですね。

0 件のコメント:

コメントを投稿