技術を磨くだいぱんまん

散歩とインターネットが大好きなシステムエンジニア。暮らし、おでかけ、テクノロジーについて書いています。

Raspberry Piと100円の人感センサでつくる防犯スピーカー

f:id:donchan922:20170624084910p:plain

こんにちは、だいぱんまん(@donchan922)です。

人感センサ(HC-SR501)買いました!Amazonで145円(ほぼ100円)でした。安い!

さっそくこのセンサとRaspberry Piでなにか作ってみたいなと思い、防犯スピーカーを作ってみました。具体的には、玄関から人が入ってくるとスピーカーからお姉さんの声で「おかえりなさい」と言ってくれる装置をつくりました。泥棒がドアを開けてこんな声を聞いたら、驚いて引き返すんじゃないかなと。

お姉さんの声を選んだ理由はご想像におまかせします。防犯メインであればドスのきいた声の方がいいかと思います。

完成形がこちら

玄関のドアを開けたときにスピーカーから音が鳴るようにしました。これで泥棒を追い返せる!?

必要なもの

まずは以下のものを用意しましょう。

Raspberry Pi

前提として、Raspberry Piのセットアップが完了しているものとします。セットアップの手順は以下記事でまとめています。
www.daipanman.com

スピーカー

ジャンパワイヤ(メス-メス)

3本使います。

人感センサ

安いですが、海外からの発送なので届くのに1週間ほどかかりました。

実装方法

人感センサについて

今回使用する人感センサ(HC-SR501)については、以下の記事で詳しくまとめられています。
[*Raspberry Pi*] 夏だ!人感センサーを使って蝉を鳴かせよう - Qiita

f:id:donchan922:20170624072609j:plain
人感センサには黄色のネジのようなものを回すことで、感度と遅延時間を調整できます。

  • 感度:検知距離のこと
  • 遅延時間:検知出力保持時間のこと

左回り(最小値) 右回り(最大値)
感度 弱(3m) 強(7m)
遅延時間 短(5s) 長(300s)
今回は感度を最大(7m)に、遅延時間を最小(5s)に設定しました。

人感センサを接続する

人感センサにはジャンパワイヤ(メス)を挿すところがあります。Raspberry PiのGPIO端子との対応表を以下にまとめます。

人感センサ(HC-SR501) Raspberry Pi
VCC 5v
OUT GPIO
GND Ground


f:id:donchan922:20170623222145p:plain
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)クライアントをインストールしましょう。ドラッグ&ドロップで簡単にファイル転送ができます。以下記事が大変参考になりました。
Macからラズパイにファイルを転送する - ものづくりブログ

実装!

Python3で書きました。ファイル名はcrime_prevention.pyとします。

#-*- coding: utf-8 -*-

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

まとめ

そもそも泥棒って礼儀よく玄関から入ってくるのかな。窓を割って侵入してくる気が……そうなるとこの装置の意味って……