Ambient からデータをダウンロードしてみると、4~6秒毎の蓄積、最小時間単位が秒になっています。1Hzで発信しているので、Wi-Fiかサーバー側の問題ですね。次はMEMSで振動を計測しようと考えていましたが、これではダメかな。
バッテリー電圧は、Ambient側では小数点以下2桁まで保存されていました。LCD表示は整数です。これは CO2濃度と同様に drawNumber を使用していたのが原因。
M5.Lcd.drawNumber(vbat, 120, 110, 4);
下2桁まで表示するにするには、カーソルを合わせてから print。
M5.Lcd.setCursor(96, 110, 4);
M5.Lcd.print(vbat);
drawNumber のx座標は中央配置用の指定になっています。setCursorは左端指定でした。
テストをクリアする最小限の実装が終わったので、いよいよ実験開始。
風上の窓をほんの少し開けて、その隙間風を計測できるよう、窓の鍵にUSBケーブルをかけてセンサーをぶら下げておきました。USBケーブルは数年前に100均で購入していたモバイルバッテリーにつないでおきます。
22:46 にスタートして流していると、1時前に反応がありました。外から入ってきたタバコでした。匂うよりも先にM5StickC-Plus の発する音と光で気づきました。音が小さいので昼間に別の部屋にいると気づかないかも。これは要改善点です。
窓際に立つと、外から入ってきたタバコの匂いがします。が、部屋全体には広がっていません。屋内にセンサーを設置する関係上、これ以上は早く感知できないでしょうね。窓を全開にしている流入量が多くてと使い物にならないか?流速が小さくなって同程度?
ま、いきなりタバコに反応するということが確認できただけでも収穫です。いったい、タバコには何が入っているのでしょうね。
翌朝、バッテリーが切れてM5は停止していました。
Ambient側の記録を見ると 4:30 までのデータが保存されていました。バッテリー電圧は降下していましたが、3.7V でしたのでまだ動くはず。おかしいなあと思い確認してみると、データ数制限のようでした。
https://ambidata.io/refs/spec/
- 送信から次の送信まではチャネルごとに最低5秒空ける必要があります。それより短い間隔で送信したものは無視されます。
- 1チャネルあたり1日3,000件までデーターを登録できます。平均すると28.8秒に1回のペースです。
- 件数のカウントは0時に0クリアされます。
- チャネルデーターを削除しても1日の登録件数のカウントは0クリアされません。
0時以降、3363件のデータが保存されていました。4~6秒毎も同様に制限に引っかかっていたのですね。これ、有料版だと50Hzサンプリングの記録をミリ秒単位で保存できるのでしょうか?
https://ambidata.io/samples/vibration/vibration/
電圧降下開始が4:08でしたので、そこから40分稼働するとすると、モバイルバッテリー追加で6時間稼働する事がわかりました。
初回から良い結果を得られたのですが、閾値を低くしていたので誤検知も多くなっている状態かと思われます。Ambient の限界?もわかりました。代替えクラウドを探してみましょうか。
あとは、RTCを使ったセンサー側の時刻付与、観測時のディスプレーoff(Aボタン押下で切り替え)、Bボタン押下で音と点滅の停止、余計な電力消費のカット、マルチモーダル化(音の取り込み)、そして閾値の調整(誤検知軽減)ですかね。コツコツ実装してまいりましょう。