オフィス移転したらインターホンがなかったのでRaspbeerry Piでカメラ付きインターホン作ってみた
こんにちは、dotstudioモノづくり担当・うこです。
dotstudioはめでたく新オフィスに移転したのですが、インターホンがついておらず不便なんですよね。
代表・のびすけ「うこ先生、これRaspberry Piでインターホン作れない?」
僕「秒でいけます」
ということで作ってみました!
全体の構成
今回はボタンを押したら室内のスピーカに音がなる機能に加えて、押した人の姿が見えるカメラ機能も搭載してみました。
全体の構成はこんな感じです。
Raspberry Pi 3(以下ラズパイ)をベースにして、Grove接続されたタッチセンサに触れると室内のBluetoothスピーカー(今回はBASE EGG)から音が流れる仕組みを作ります。
さらに、ラズパイカメラをドアの外に出して、外の様子がオフィス内のモニタから見られるようにします。
使ったもの
- Raspberry Pi 3
- Raspberry Pi カメラモジュール
- Grove タッチセンサ
- Bluetoothオーディオトランスミッタ
- Bluetoothスピーカー(今回はBASS EGG)
- スピーカー(100円)
- オーディオ分岐プラグ(100円)
- マグネット付きプラスチックケース(100円)
呼び鈴の製作
ハードウェア部分
まずはじめに、来客者がボタンを押すと室内で音が鳴って訪問を知らせるようにする機能を作ります。
ラズパイはマグネット付きのプラスチックケースに入れて、金属製のドアの内側に貼り付けます。ケースはケーブルが引き出せるように適宜加工します。
次にGroveタッチセンサですが、そのままだとラズパイに接続できないためジャンパワイヤを3本用意します。接続するピンは以下のとおりです。
タッチセンサのピン | ラズパイGPIO |
---|---|
VCC | 3.3V |
GND | Ground |
NC | |
SIG | 24 |
ラズパイGPIOのピン番号と位置については、以下の公式ページにある2番目の図を参照してください。
参考:GPIO: MODELS A+, B+, RASPBERRY PI 2 B AND RASPBERRY PI 3 B
次に、100円程度で売られているオーディオ出力分岐器をラズパイのオーディオ出力に接続し、さらにBluetoothのオーディオトランスミッタと小型のスピーカーに接続します。
オーディオトランスミッタは室内に来客を知らせるスピーカーを鳴らす用、小型スピーカーはドアの外に出して来客者に「呼び鈴が鳴った」ことを知らせる用です。USB接続のアンプ付きスピーカーなどで大きな音が出せるのならそれで代用することができます。
最後に電源を近くのコンセントからUSBアダプタ経由で接続してハードウェア部分は完了です!
ソフトウェア部分
まず、適当なインターフォンの音となるmp3を用意しましょう。簡単なピンポン音でも、ネタのような効果音でもいいです。dotstudioでは、「ファミマ入店音」が好評だったため採用しました。
mp3が用意できたら、/home/pi
などのディレクトリにsounds
というフォルダを作ってその中にmp3を入れましょう。
次に、sudo apt-get install mpg321
を実行し、サウンド再生用のソフトウェア「mpg321」をインストールします。mpg321 sounds/サウンド.mp3
などと実行して、スピーカーから音が出ていればOKです。もしここで音が小さい場合は、alsamixer
コマンドを実行すると音量調整ができますので、矢印キーで大きくしておきます。
音の再生が確認できたら、以下のPythonプログラムをsounds
ディレクトリと同じ場所に保存して実行します。タッチセンサを触ると同時に、音が鳴ってターミナル上に’Ping-pon!‘と表示されれば成功です。
#!/usr/bin/python
import RPi.GPIO as GPIO
import glob
import subprocess
from time import sleep
from random import shuffle
GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN)
# mp3が保存されているディレクトリは適宜変更してください
soundlist = glob.glob("./sounds/*.mp3")
while True:
if GPIO.input(24) == GPIO.HIGH:
shuffle(soundlist)
print('Ping-pon!')
subprocess.call("mpg321 -q "+soundlist[0], shell=True)
else:
sleep(0.01)
最後に、再起動しても動くように、/etc/rc.local
ファイルの末尾に/usr/bin/python /home/pi/interphone.py &
と追記しておきましょう。
ちなみにですが、上記のコードではsounds
ディレクトリ内に複数のmp3が入っているとランダムで再生されるような仕組みにしています。
監視カメラ部分の製作
監視カメラはラズパイ専用カメラを使用します。接続はとても簡単で、HDMI端子とオーディオ端子の間にある細長い端子にケーブルを差し込むだけです。sudo raspi-config
コマンドで、カメラを使うことができるように設定を変更しておきましょう。raspistill -p
コマンドを実行し、特にエラーが出なければ正常に接続されています。
今回はカメラと呼び鈴部分は連動させず、カメラはmotionEyeというオープンソースウェアを使って単独で動作させます。 motionEyeのインストールは以下を参考にしました。
参考:らずぱい motionEye (Web UIベースのカメラサーバ) - Qiita
こちらのページにも書かれていますが、ラズパイのカメラモジュールを使用するので、以下のコマンドを実行しておくのを忘れないようにしましょう。
grep bcm2835-v4l2 /etc/modules || echo bcm2835-v4l2 | sudo tee -a /etc/modules
インストールが完了して、室内に常設してあるPCのブラウザからアクセスしてみました。 ばっちりドアの外が撮影されていますね! 1秒おきに更新されていますが、python上で動作しているためか、少々重たいようです。
試してみる
インターホンを押すと……
入店っぽい音が流れます!
旧スタイルに比べるとだいぶ未来になりました。
まとめ
今回は数時間ほどでこのシステムを作ることができました。カメラと呼び鈴が独立してしまっていますが、可能ならば「呼び鈴を押した瞬間の画像を保存してhipchatにアップロード」するような仕組みを作ってみたいです。 次は何をつくってやろうか……。