バイト先ロッカーの環境ロガーを作ってみた
去年末からこれまでやっていたバイトに加えて、もう一つ現場作業のバイトを掛け持ちで始めたのだが、ちょっと気になった点が。
それはそのバイトに入る際にはロッカーで一旦私物を置いておくのだが、そのロッカールームが地下にあるため、冬とかはいいとして、梅雨時とかにかなり湿度が高くなってしまいロッカー内がかなり湿った環境になってしまわないかというものだった。
「なんかロッカー内の環境を確認する手段ってないかな~」と考えていたところ「自宅に転がっている raspberry pi zeroとセンサー付きpHATでロガーが作れるのではないか」ということで自作に挑戦してみることにした。
ハード
raspberry pi zero wh
発売当初に「とりあえず買ってみるか」とうことで買ってみたのだがそのままになっていたもので、サイズ的に今回の用途にぴったりそうだったので今回使ってみることにした。
センサーHAT
以前 raspberry pi イベントで購入、マルツか若松のキットの完成品だったと思うが既に販売終了してるようで詳細不明
分かることとしては温度・湿度・気圧が計測できるBME280というセンサー
小型液晶ディスプレイ(秋月電子で販売しているAE-AQM0802+PCA9515相当品と思われる)
加えてスイッチが2つ付いており、GPIO端子に差せるソケットが付いているといったところ。
バッテリー
計測場所がロッカーであり、ロッカーに電源プラグなどはついてないので、電源はバッテリーを使うことにした。
自宅にいくつか転がっているモバイルバッテリーを使おうかと思ったのだが、一回の使用でどれくらいバッテリーを消費するのかというのが知りたかったためこれを買ってみた。
ロガーの仕様
計測場所がネットワークとは無縁である地下のロッカーということと、持ち込む機器等の制約からとりあえず以下のようにした
- raspberry pi zero whに電源を接続したなら自動で計測開始
- 一定間隔で計測し、計測結果は計測開始からの経過時間・気温・湿度・気圧の順でraspberry pi のmicroSDカードにcsv形式でファイルに出力・保存
- pHATに付属のボタンを押すと計測終了&シャットダウン
- 可能であれば液晶ディスプレイに気温・湿度を表示
という辺りを目標に作ってみることにした。
実装
決めた仕様を満たせるものがあるのか調べてみたところ、計測部分はセンサー用のpythonサンプルコードがあり、これの計測部分をループさせると良さそうと目処がついた。
ということでraspberry piで使用するためにGPIO機器を使用するためにI2Cを利用可能に設定
まずはパッケージをインストール
$ sudo apt install i2c-tools
次にrasp-configを起動してI2Cを有効にする設定を行った
$ sudo raspi-config
コマンド実行するとメニューが表示されるのでInterfaceのI2Cをenableに設定する
更にpythonでI2Cを使用するために下記をインストールする
$ sudo apt-get install -y python-smbus $ sudo pip install smbus2
そうして下記コマンドでGPIO機器の状態を確認する
$ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 --
液晶ディスプレイへの表示については液晶ディスプレイの型番を調べてサンプルコードを探してみたところ、適当なものがあったので計測用のコードに組み込んで見ることに。
自動起動は、karaage703さんのraspberry piでの自動起動の記事を参考に、起動時に手を加えたpythonスクリプトを起動して計測結果をファイルにリダイレクトするシェルスクリプトを作成して起動するようにした。
ボタンについては、当初Node-Redを使って試してみたところ、始めのうちはボタンを押すとうまくシャットダウン動作ができていたのだが、何度か起動・シャットダウンを繰り返したあと、何故か起動すると即座にボタンが押されたと認識してシャットダウンするという現象が発生orz Node-Redの使用は諦めることに。
「うわぁ~~どうする」と思ったが、raspberry piのGPIOの検知で検索をかけたところスイッチONを検知するpythonスクリプトを使用する記事を発見
自宅のpHATではそのままではスイッチ検知できなかったが、GPIO番号を順に入れてスイッチの番号を確認、計測開始用のシェルスクリプトにこのpythonスクリプトの起動とスイッチのONを検知したなら計測を停止して終了メッセージを液晶ディスプレイに表示してシャットダウンする機能も加えて、ひとまずロッカーでの計測を行えるようになった。
計測、そしてOSC.do前夜祭での指摘
完成したロガーとモバイルバッテリーをバイト先に持っていき、ロガーを湿気が溜まりやすいとされている下の方に置いてモバイルバッテリーをつないで計測を開始、バイト明けにスイッチを押してロガーを止めて帰宅。
帰宅後、自宅で起動してリモートでロガーにアクセスして作成されたファイルをダウンロードして中をみたところ記録はされており、csvなのでLibreofficeの表計算機能で表示してグラフを作ってみたところ、一応グラフとしては問題ないかなといったところになっていた。
その頃、ちょうどOSC Online/do の前夜祭があり、LTの発表者が途切れたタイミングでやったこととグラフを出したところ
「気圧のグラフが細かく変動していて、温度・湿度もあり得ない変動がある」
「計測しているセンサーの校正ができていないのでは?」
と指摘を受けてしまいセンサーの計測周りを確認することに。
修正そして再計測
指摘があったあと、ソースを調べてみた限りでは校正のコードも入っており「校正できているのに何で値がバラつくんだ?」と原因が分からない状態でフト「センサーの仕様を調べてみるかと」センサーの仕様について調べてみた。
見てみたところ動作モードでということでいくつかあり、どうもサンプルソースは初回校正をかけるだけでよい設定となっていたらしく、校正部分を計測開始時のみにしたところ、結果が安定するようになった。
この状態でバイト先のロッカーでしばらく計測、結果は温度はかなり安定しており、それなりに管理されていることはわかり、梅雨時や夏場などでも一応問題はなさそうではあったが、計測は続けてみることにした。
とりあえず。スクリプト一式はこちらに纏めたので、ご興味があれば試してみてほしい。
上記スクリプトを使う場合に一番問題となるのは使ったセンサーHatが現在は販売されていない点なのだが、似た構成でディスプレイのないタイプのものがAmazonで販売されている。
アップしたスクリプトのディスプレイ表示部分とスイッチの部分を変えるとうまくいくのではないかと思う。 ただしここら辺は動作は保証できかねるので自己責任でお願いしたい。