【M5Stack】荷物の置き配を検知してみた

世帯数の多い集合住宅にお住まいの方なら「あるある」だと思いますが、オートロック前のインターホンで宅配業者の方より「順番に伺います!」と言われてから荷物が自宅へ届くまでに結構時間が掛かることがあります。

我が家では以下のステッカーで玄関先への置き配をお願いしているのですが「もう届いてるかな?」を能動的に確認しなくても済むようにシステム化してみました。

以下の続編的なお話です。

どうやって検知しよう?

市販品では「超音波センサ」や「重量センサ」を用いる例もいくつかみられたのですが、荷物が置かれる場所のばらつきや共用部にセンサ付きの台などを常設できないことから、今回は壁面に取り付けたカメラで検知する方式としました。

M5Stackシリーズの ESP32 PSRAM Timer Camera F (OV3660) を使用します。

概要

Raspberry Pi より右側が今回の制作部分です。(Zero 2 W になりました)

まずインターホンが鳴った際に比較元となる玄関先の画像を取得します。(処理 a, b)

一定時間内に取得された有効な比較元が存在する場合は定期的に玄関先の画像を取得し、差分を数値化して閾値を超えていたら画像付きで通知を行います。(処理 1-5)

通知完了後に画像はすべて削除します。あわせて、通知後n分間は再実行しないといった制御のためのロックファイルを生成するなど細かい処理も行っています。

画像の切り抜きや比較には ImageMagick を使っています。 (convert, compare)

作業中の様子

カメラは真下に向けて設置しており、顔が撮影されないようにしています。

(まったく使っていなかった)表札部分を照らす既設のE17電球ソケットから下記製品を利用してUSBアダプタ用の電源を取得しました。

Timer Camera F での処理

ソースコードはこちらです。

GitHub - georz/arduino_delivery_notification

HTTPリクエストを受けて画像を返すだけの簡単な処理のみ実装しています。

カメラの画質は意図的に XGA (1024x768) に留めています。解像度が高すぎない方が ImageMagick (compare) による画像比較の結果が良かったためです。

通知

こんな感じで送られてきます。

開発中に困ったこと

Wi-Fi接続が不安定な問題に大いに悩まされました。いろいろ調べたところ以下の記事に辿り着き大変助かりました。

ESP32と5V IOのUSB UARTデバイスによるWifi問題まとめ

設計上の問題で、電源の品質(電圧)に大きく影響を受けるようです。

(前回購入した ATOM Lite では同じ電源を使っても問題が起きないこと、ファームウェア更新で対応可能なことから、製造時期などにより違いがあるかもしれません)

今回購入したデバイスでは MacBook のUSB端子および Apple, Anker 製のUSBアダプタから給電される5V電源において全く使い物にならない状態でした。上記で紹介されている対策版のファームウェアを書き込もうにも、手元にWindowsマシンがありません。

それでは結局どうしたのかというと...

ダイソーで買ってきた300円のUSBアダプタで嘘のように解決しました!

低電圧。こんなに嬉しいことはない。このアダプタでスマートフォンを充電したいとは思いませんが。

謝辞

上記のWi-Fi接続問題に関連しスイッチサイエンスさんには迅速かつ多大なるサポートをいただきました。改めてお礼申し上げます。ありがとうございました。

最後に

私が勤める会社ではエンジニアを募集しています。よかったら覗いていってください。