IoT開発初心者がスマートロックを作ってみました。詰まった箇所をまとめます。
作製したもの
スマートロックを作製しました。開錠・施錠の方法は2つあります。
- あるエンドポイントにリクエストを送った後、ドアノブを一回ガチャっと回す
- 指定のリズムでドアノブをガチャガチャする
内側はこのようになっています。ブレッドボードやジャンパワイヤを使ったままですが、この方が新しい機能をつけやすいのでこのままにします。
構成
エンドポイントを利用した開錠・施錠を実現するため、以下のような構成を作りました。
使用した技術
バックエンドはサーバーレスにしています。私しか利用しないので、サーバーを借りるとコストがかさむからです。デプロイにServerless Frameworkを利用しました。
WiFiを利用したかったのでESP32-WROOM-32を選択しました。初めて利用したのですが開発は非常に楽でした。Arduino IDEで開発可能です。
難所
今回の開発で難しかった点を書いていきます。
消費電力を抑えながら可用性を確保する必要があった
今回はバッテリーから給電することにしました。頻繁に電池切れを起こすとスマートロックとして大変不便ですし、最悪家から締め出されてしまう原因にもなります。そのため消費電力をできる限り抑える必要がありました。
対策として、ESP32-WROOM-32の選定により解決を目指しました。ESP32-WROOM-32にはDeepSleepという機能があり、スリープ状態での消費電流を10uA~150uAに抑えることが出来ます。
しかしながら、実際に運用してみると1週間程度でバッテリーがきれてしまいます。そのため商用のスマートロックと同等の製品にすることはできませんでした。
モバイルバッテリーが自動停止してしまう
モバイルバッテリーはもともと携帯などを充電するために作られており、過充電を防いだり無駄な電力を消費しないように自動停止する機能がついているみたいです。家電量販店で売られているものには基本的にこの機能がついています。
この問題はこのモバイルバッテリーを利用するすることで解決しました。
cheero Canvas 3200mAh IoT機器対応 モバイルバッテリー ホワイト CHE-061
スマートロックを設置する方法に戸惑った
当然、サーボモータをカギに取り付けると以下のようにサーボモータの方が回ってしまいます。
これをしっかりと固定するために、L字の金具などを使いました。しかし自分にこのような金具を使う経験が乏しく見栄えは悪くなってしまいました。
DynamoDBをboto3で操作するのが大変
本筋ではないのですが、Pythonのboto3のAPIを使ってDynamoDBにリクエストを送るのが大変でした。APIの仕様が複雑で、私には理解するのに非常に時間がかかりました。
途中でPynamoDBを利用することにしました。開発が非常に楽になりました。
開発の感想
ドアノブをガチャガチャするだけで開錠できるので、生活は非常に楽になりました。
また友達が一時的に自分の部屋を出入りする場合、物理的な鍵を共有せずに開錠・施錠ができるため、今後も便利なシチュエーションがありそうです。
ESP32-WROOM-32開発ボードを利用した開発は非常にスムーズでした。お金が少し高くても、開発の速度や快適さを求めるなら開発ボードを買うべきだと実感しました。以前はお金をケチってPICを使ったり、ESP-WROOM-02 DIP化キットを使ったりしていました。
スマートロックをドアに取り付けるのに苦労しました。ネット上の先人はよく3Dプリンタを使ってこの問題に取り組んでいるので、私も3Dプリンタを購入しました。次の開発から使ってみたいと思います。