たまに長期出張で家を不在にする時があるのですが、いつも帰ってきて玄関を開ける瞬間がちょっと緊張してしまうんですよね。
今回は、万が一に備えて侵入者を発見したら通報するふりをするシステムを作ってみました。
「ふり」ってのがポイント。
実際は何もしない。
今のところは。
今回使ったものはこちら
- RaspberryPi 2B
- スマートスピーカー [Google Nest Mini]
- LEDモジュール
- PIRセンサ [HC-SR501] (人感センサ)
これらを、下記のように接続します。
LEDモジュールが3.3V、PIRセンサが5Vです。
今回使ったPIRセンサは、カバーをめくれば配線の並びが書いています。
RaspberryPiの端子はこのような感じになりました。
繋げ終わるとこんな感じ。
PIRセンサはフラフラすると実験しづらいので固定しました。
スマートスピーカーはwifiに繋げておけばOK
これでハード側は完成。
ソフト側はNode-REDを使いました。
色々と試してみたのですが、最終的にはこのようになりました。
各ノードの中を見ていきます。
rpi-gpio-in
このノードでPIRセンサからの入力を行います。
今回はPIN 18を使用しました。
抵抗のところは「なし」「プルアップ」「プルダウン」の3つから選択できましたが、今回は「なし」にしてみました。
本当は回路に合わせてここも合わせるべきですが・・・。
注釈にも書かれていますが、「0」または「1」の数値が入力されるようです。
rpi-pio-out
このノードでLEDモジュールへの出力を行います。
今回はPIN 7を使用しました。
出力形式はデジタル出力なので、「0」または「1」の数値が出力されます。
Cast
このノードでスマートスピーカーを喋らせます。
スマートスピーカーのIPアドレスを入力し、しゃべらせたい内容と言語、音量を設定します。
漢字も割とちゃんと読み取ってくれるので優秀です。
switch
このノードでは、PIRセンサからの反応に応じて処理を振り分けます。
PIRセンサの入力をそのままCastノードに繋ぐと、「1」→「0」に変わったときも反応して喋ってしまいました。
「1」のときは喋らせて、「0」のときは何もしない。
そういう設定ができるのがこのswitchノードです。
下の方にある「+追加」ボタンを押して、設定を2つに増やした後、数値の「0」と「1」を入力します。
ちなみに、数値じゃなくて文字列の「0」と「1」でも反応はしてくれました。
完了ボタンを押すと、switchノードの右側が2つに増えるので、下側(「1」側)をCastノードの接続します。
ここまで出来れば、あとは動作確認を行うだけです。
PIRセンサの反応が若干悪いですが、ちゃんと動いてくれましたね!
LEDをパトライトとかにすれば完璧では?と思ってみたり。
実際に通報するようには出来ていないのですが、こんなこと言われたらビックリして逃げ出すでしょう!
ちなみにこのシステムだと、RaspberryPiとPIRセンサの数を増やしてもスピーカーは1つだけで済むので、意外と良いかもしれない。
玄関や窓の近くに複数設置するのも良いですね。
RaspberryPi Zeroを部屋中にばらまくイメージで。
<エラー関係>
実は、結構な頻度でエラーが出ます。
原因はgoogle-tts-apiのバージョンが最新ではないからだと思うのですが、ノードの中を編集することまでは出来ないのでこのまま。
(2022.6.22追記)
ノードを最新版にしたらエラーが無くなりました!
次はカメラを使って画像を残すようなことをしたいですね。
出張までにまだまだ作るぞ!