重さで郵便が届いたことを検知して、メールでお知らせしてくれる郵便受けが完成しました。
HX711で重さを計測
歪みゲージとその値をデジタル化してくれるHX711モジュールを使って「はかり」を作り、重さが測定できるようになりました。1分に1回重さを測定し、Ambientにデータを送信。しばらく屋外で放置して、長期的に安定動作するのかを確認しました。
長期的にみると、はかりに物が載っていないのに、日や時間によって重さが変動することがわかりました。そのため、「何gになったから郵便物が届いた」という判断するのではなく、「前回の測定値から何g増えたから郵便物が届いた」という、重さの変化で郵便物の有無を判断する方法にします。
また、HX711はたまにノイズのような異常値が測定されてしまうことがわかりました。簡単なアルゴリズムでかなり軽減できましたが、それでもまれに異常値が測定されることがありました。
そこで、測定した重さが変化し規定した変化量を超えたとしても、すぐには郵便物が届いたとは判断せず、次の測定においても同じような重さが測定された場合に、郵便物が届いたと判断することにしました。
ESP32を電池で動作させる
合わせて、ESP32が電池で動作するよう、DCDCコンバータの回路も作りました。電池2本でも動作することを目標にしていましたが、無線LANに接続する際にESP32が大電力を消費するために、電圧が低下しESP32がハングアップしてしまうことがありました。電池2本は諦めて、充電電池3本で動作させることにしました。
プログラム
ハードウェアが揃ったので、プログラムを作ります。プログラムの流れは
- 重さを測定
- DeepSleepからの目覚めでなければ過去の重さの履歴を現在値で初期化
- 2つ前に測定した(2分前の)重さから、前回(1分前)と今回の重さがどちらとも2g以上増えていれば郵便が届いたと判断
- 前回郵便物が届いたと判断されていて、1つ前に測定した重さから今回の重さが50%以上減っていれば郵便を取り除いたと判断
- 電池の電圧を測定
- 郵便が届いたか取り除かれた場合には、Ambientに重さと電圧、郵便物の有無を送信
- 郵便が届いた場合にはメールを送信
- 1分間のDeepSleepに入る
となっています。6番は、ログを取りたかったのでAmbientにデータを送信していますが、ログが不要であれば不要なプログラムです。
7番のESP32でメールを送信するプログラムはKeri's LabさんのMail.hを利用させてもらいました。
このMail.hのおかげで、ESP32から簡単にgmailを送信できるようになりました。
完成したプログラム全体はこちらからダウンロードできます。
ご利用の際には、SSIDやパスワード、メールアカウントなどを適切に設定してください。
こちらが、実行した時のログになります。
2分前、1分前、現在を3回重さを測定し、1分前と今回の重さが、どちらとも2分前よりも2gを超えていれば、メールが送信されることを確認しました。
装置もプログラムも完成したので、郵便受けにセットアップします。
セットアップとテスト
郵便受けの中に「はかり」を、郵便受けの上に回路を設置しました。
試しに葉書を郵便受けに入れてみます。
程なくしてメールがスマートフォンに届きました。メールなのでメールを受信されるまでちょっと遅延がありますね。
しかしながら、郵便が届いたらお知らせしてくれる「はかり」内蔵の郵便受けが、遂に完成しました!!これで、郵便が届いたのに気づかず、次の日まで放置することが無くなると思います。
しばらく使って様子を見てみます。あと電池の持ちも気になりますね。
2021.4.6 追加
郵便が届いても反応しない場合があったので、プログラムを修正しました。
追加終わり
2021.4.18 追加 電源回路を改良しました
追加終わり
コメント