スマートロックを自作しました
Raspberry Piとサーボモーターを使ってスマートロックを作ってみました。
買ったもの
- Raspberry Pi 3
- SG92R サーボモーター
- タミヤ ユニバーサルアームセット
- ダイソー 防犯センサー(リードスイッチ)
- ブレッドボード ボタン ジャンパワイヤなど
構成
ぱっと見はこんな感じ。いろいろむき出しで雑だけど逆にカッコいいよね?そのうちちゃんとするから…そのうち。
リードスイッチはドアの開閉検知用とドアノブが捻られたのを検知する用にそれぞれ一つずつ設置してあります。
鍵の認証についてですが、最初は先駆者の方々同様NFCリーダを設置してSuicaとかIC学生証を鍵にするようにしました。ただ実際やってみるとドアの前に立って、財布からカードを取り出して、リーダにカードをかざすって流れが想像以上に面倒くさいんですね。これだったら普通の鍵でも変わらねえじゃんと。
そこでドアにくっついてるRaspberry Piに携帯が近づいたら解錠されるようにしてみました。ドアノブを捻ったタイミングであるMACアドレスをもつBluetoothデバイスが近くにいれば解錠という仕組みです。(ただこれには問題があります。詳しくは後述)こうすると本当にハンズフリーで勝手に鍵が開くので結構未来っぽいです。
ついでにhomebridgeのプラグインを書いてスマホからも鍵の開け閉め+αをできるようにしました。
機構部
一番肝心な部分ですが、Qiita@undo0530さんの機構を丸パクリ参考にさせていただきました。ありがとうございます。
qiita.com
今の所サーボモータはダンボールと養生テープのガバ固定なのでたまにちゃんと鍵が動かないことがありますね。3Dプリンタでちゃんとした土台をつくれるといいんだけどね…。
ソフト側
サーボモータの制御はservoblasterを。デーモンを起動するときにservod --p1pins=15
のようにサーボ制御に使うピンを指定してやらないとRaspberry PiのGPIOピンの入出力が全部効かなくなるので注意です。
鍵システムはPythonで雑に書きました。
ラズパイ上に室内のスマート家電全体を管理するWebAPIを立てておき、スマート電球とかスマートロックは全てAPI越しに操作するようにしました。こうすることで全てのスマート家電の操作のログを取ることができます。
ちなみに、WebAPIの名前は"maid"にした。メイドです。どうでもいいですね。
動作
家を出るとき
室内のボタンを押すと解錠されて、ドアを開けて外に出て、更にドアを閉めるとロックされるようになってます。ついでにそのタイミングで廊下の電気も消えます。
帰宅時
スマホを持って(スマートフォン中毒の私がスマホを持たずに外出することはありえない)ドアノブを捻ると鍵が開き、廊下の電気がつきます。
IMG_5158.TRIM from au s on Vimeo.
ちなみに自分が外出中に誰かがドアノブを捻るとSlackに警告が飛んできます。まあ警告されたところでどうしようもないんすけどね。
いろいろ
このスマートロックはBluetoothのMACアドレスで認証しているため、任意のデバイスでBluetoothMACを書き換えれば容易に鍵を開けられるでしょう(というか実際やってみたら開いちゃった)。そのためもういくつか認証ファクターを増やす必要がありそうです。ただまあ泥棒にとってはスマートロックをハックするより鍵穴をハック(ピッキング)するほうが楽でしょうね。
あと物理鍵を持っていないときに不具合で鍵が開かなくなると部屋に入れなくなるという普通ありえない事態が起こります!気をつけましょう!
もう4ヶ月くらい自作スマートロックを使ってますが慣れれば普通に快適です。もう鍵を出して〜閉めて〜開けて〜なんてできないっすねぇ。
後は友人に"3日間だけ有効な鍵を渡す"なんかも簡単に実現できるのもいいところですね。
追記
最初に使ってたサーボモーターが1年弱経ったところで壊れたので同じメーカーのSG5010というサーボに交換ついでに固定方法もすこし改善した。