Raspberry Piと100円の人感センサでつくる防犯スピーカー
こんにちは、だいぱんまん(@donchan922)です。
人感センサ(HC-SR501)買いました!Amazonで145円(ほぼ100円)でした。安い!
さっそくこのセンサとRaspberry Piでなにか作ってみたいなと思い、防犯スピーカーを作ってみました。具体的には、玄関から人が入ってくるとスピーカーからお姉さんの声で「おかえりなさい」と言ってくれる装置をつくりました。泥棒がドアを開けてこんな声を聞いたら、驚いて引き返すんじゃないかなと。
お姉さんの声を選んだ理由はご想像におまかせします。防犯メインであればドスのきいた声の方がいいかと思います。
完成形がこちら
Raspberry Piと人感センサで防犯スピーカー作ってみました。お姉さんの声がいいです。 pic.twitter.com/C3tlKlm22o
— donchan🐶 (@donchan922) 2017年6月23日
玄関のドアを開けたときにスピーカーから音が鳴るようにしました。これで泥棒を追い返せる!?
必要なもの
まずは以下のものを用意しましょう。
Raspberry Pi
前提として、Raspberry Piのセットアップが完了しているものとします。セットアップに必要な機器および手順は以下の記事でまとめています。
スピーカー
人感センサ
安いですが、海外からの発送なので届くのに1週間ほどかかりました。
実装方法
人感センサについて
今回使用する人感センサ(HC-SR501)については、以下の記事で詳しくまとめられています。
[*Raspberry Pi*] 夏だ!人感センサーを使って蝉を鳴かせよう - Qiita
人感センサには黄色のネジのようなものを回すことで、感度と遅延時間を調整できます。
- 感度:検知距離のこと
- 遅延時間:検知出力保持時間のこと
左回り(最小値) | 右回り(最大値) | |
---|---|---|
感度 | 弱(3m) | 強(7m) |
遅延時間 | 短(5s) | 長(300s) |
人感センサを接続する
人感センサにはジャンパワイヤ(メス)を挿すところがあります。Raspberry PiのGPIO端子との対応表を以下にまとめます。
人感センサ(HC-SR501) | Raspberry Pi |
---|---|
VCC | 5v |
OUT | GPIO |
GND | Ground |
Raspberry Pi側はGPIO14番を使いました。あとは電源(5v)とグランドにつなげて接続完了です。
以下コマンドで動作確認を行いましょう。人感センサに手のひらを近づけると検知するはずです。
# GPIO14を使用する $ echo 14 > /sys/class/gpio/export # GPIO14で出力を行う $ echo in > /sys/class/gpio/gpio14/direction # 0 -> 未検知, 1 -> 検知 $ cat /sys/class/gpio/gpio14/value # GPIO14の使用を終了する $ echo 14 > /sys/class/gpio/unexport
おかえりなさい音声の取得
音声は以下サイトからお借りしました。雛乃木まやさん、ありがとうございました。
"お帰りなさい"のフリー女性音声ボイスを無料でお使い頂けます。 | 商用利用OK・クレジット表示不要の無料音声ボイス素材・女性ナレーション声優雛乃木まや
「おかえりなさい」の種類は3つあって、今回は優しいお姉さんのボイスにしました。優しさ大事。
- 明るいお姉さん
- しっかりお姉さん
- 優しいお姉さん
ファイル名はダウンロード時のvoice-okaerinasai-yasashime.wav
にしました。wav形式はRaspberry Piで簡単に再生できるので嬉しいですね。
SFTPでWAVファイルを転送する
WAV形式のファイルをRaspberry Piにファイル転送します。そのためにMacにCyberduckというSFTP(sshを利用したFTP)クライアントをインストールしましょう。ドラッグ&ドロップで簡単にファイル転送ができます。以下記事が大変参考になりました。
実装!
Python3で書きました。ファイル名はcrime_prevention.py
とします。
import RPi.GPIO as GPIO from time import sleep import subprocess GPIO.setmode(GPIO.BCM) GPIO.setup(14, GPIO.IN) # 各ファイルパスは適宜変更してください。 CMD = "aplay /home/pi/voice-okaerinasai-yasashime.wav" try: while True: if GPIO.input(14) == GPIO.HIGH: subprocess.call(CMD, shell=True) sleep(0.01) except KeyboardInterrupt: pass GPIO.cleanup()
あとは以下コマンドを実行してやれば、人感センサが反応したときだけ、「おかえりなさい」ボイスが再生されます。電子工作、お疲れさまでした。
$ python crime_prevention.py
まとめ
そもそも泥棒って礼儀よく玄関から入ってくるのかな。窓を割って侵入してくる気が……そうなるとこの装置の意味って……