Installation of hardware has done for door peephole camera and door lock monitoring.
先日、玄関にモニタカメラを付けてみる(続編)にて Raspberry Pi を使った監視カメラの製作を取り上げましたが、その際にシステムの動作に「当たり」を付けられたので、もう少し見栄え良く設置してみました。このようなものは見栄えが良いほうが長持ちしますし、家族の反感も避けやすいものです。 🙂
まず最初に、カメラの部です。アパートの玄関にはドアスコープカメラというものが付いていますね。
余談ですが、ドアスコープって外から覗いて室内の様子が分かるらしいですね。今回のようなモニタカメラを付けておけば、外から屋内が見えなくなるので安心ですね。(家族への言い訳)
ドアスコープカメラ編
今回、ドアスコープのところに Raspberry Pi Camera Module v1.3 を取り付けました。カメラモジュールの周りを「ひっつき虫」という粘土で仮固定し、ドアとの間にスペーサをかませ、周りを木工用ボンドで固定しました。私はホットメルトと誤解して、いずれ簡単に剥がせるだろうと踏んで木工用ボンドを使ったのですが、その後調べてみると、これは意外と外すのが大変のようです。アパート退去時に復元義務があると思いますので、皆様は適切なツールを使って固定してください。。。(ホットメルトだと、熱したり、エタノールを垂らしたりして除去できる。)
カメラには、小型のマイコン Raspberry Pi Zero W も取り付けました。通信は Wi-Fi でできるので、USB 電源さえ接続できれば、屋内どこでも動かせます。
ドアスコープカメラのほうは、前回取り上げた pistreaming が使えそうですが、画像の動きが少ないとちゃんと動画が取り込めているかどうか分かりづらいので、タイムスタンプを表示するようにしてみました。プログラムが Python で書かれているので、このような修正も簡単ですね。
あ、当然ですけど、御近所のプライバシーには十分配慮し、自宅のセキュリティ用途のためだけに使用するようにしましょう。
なお、動き検出等を追加して、不審者が近づいたときに映像を録画しておく、というようなことができたら嬉しいですが、Raspberry Pi Zero W には負荷が重いかも知れませんので、これはパソコンや Linux PC に動画をフォワードして、そちらで処理することにしたいと思っています。pistreaming というソフトは websocket 技術を使って MPEG1 動画を送信しているので、外部から受信して処理することは可能です。(テスト済み。いずれ報告いたします。)
ドア錠監視システム編
これは一般名称としては、なんて呼んだら良いのでしょう? 玄関には錠(鍵で回してドアをロックするやつ)が付いていると思いますが、これが開状態なのか閉状態なのか、監視したい訳です。防犯目的ということもありますが、外出中に「あれ、私はちゃんと玄関の錠を閉めたかしら?」と心配になることはありませんか? 私は心配性なので、そういうことがよくあります。戸外から、玄関の錠の状態を知ることができたら安心ですね。
センサとしては、リードスイッチというものを使いました。私はずっとこれを lead switch だと思っていたのですが、正しくは reed switch だそうです。reed というのは、管楽器のリードと同じ意味だそうです。舌状の形をしている、ということですね。
閑話休題。リードスイッチは、外部に強い磁界があるとスイッチが閉じ、磁界が消えるとスイッチが開になるという電気部品です。(normally open ではなく、normally closed のモノもあるようです。) 今回は、秋月電子通商というお店で、こんなリードスイッチを購入しました。
これをドアノブの近くに設置する訳ですが、同時に磁石も取り付けないといけません。私はあまり器用でないので綺麗に付けられませんでしたが、皆様は工夫してください。十分に磁石に近づけたほうが良いのですが、リードスイッチは多くの場合ガラスで封止されているので、無理な力をかけると壊れます。磁石やノブにぶつからないよう、かつ、十分に磁石に近く取り付けるようにしましょう。取り付ける向きですが、リードの方向に磁界が貫くようにします。詳しくは専門サイトを御覧ください。なお、私は強力なネオジムを使いましたが、磁力が強くて危険なので、お子様がいたずらする可能性がある場合は、十分にお気を付けください。
以下が完成図です。
これくらいになっていれば、家族の反感は避けられるかなあ、と踏んでいるのですが、どうなることやら。
リードスイッチのテストには、Python の GPIO ライブラリを利用しました。私は、実はこのライブラリは使い慣れないのですが、とりあえず次のようなコードでテストしました。本当はイベントトリガを使って、常時ポーリングしなくて済むらしいのですが、動作確認なので、このままにしています。なお話は前後しますが、Raspberry Pi の GPIO は、概ね内部プルアップができるらしいので、今回は外部抵抗によるプルアップは省略しました。
import datetime import time from gpiozero import Button button = Button(3) last = False while True: cur = button.is_pressed timestr = str(datetime.datetime.now()) if cur and not last: print("Door is Locked: %s" % timestr) elif last and not cur: print("Door is Unlocked: %s" % timestr) last = cur time.sleep(0.25)
これで、こんな感じの出力が得られれば動いています。(設置後、2回、ドアを開け閉めしています。)
Door is Locked: 2019-06-18 10:50:24.337690 Door is Unlocked: 2019-06-18 11:47:43.031484 Door is Locked: 2019-06-18 11:47:49.309865 Door is Unlocked: 2019-06-18 12:10:35.368818 Door is Locked: 2019-06-18 12:10:42.152881
疲れたので、ソフトを書くのはまた今度。何が辛かったかって、ドアの前に立ったままリードスイッチの位置決めをしたりハンダ付けしたりするのがしんどかったです。皆様は手を抜かず、できるだけ作業台で工作してから設置作業をするようにしましょう。(ある程度の立ち作業は必要になるんですけどね。)
今日はここまで。