ファミマの入店音ってなんか親しみやすくて好き。落ち着くし。
あの音には正式名称があるみたいですね。
今日も新宿の紀伊国屋で「大盛況」が鳴っててびっくりした。
このアットホームな入店音を自宅に導入すれば、家の居心地もさらに良くなるのでは?!という仮説が浮かんだので、このためだけにラズパイ(周辺機器含めて約15,000円)を購入してシステムを構築した。その動画が以下。
我が家は冷蔵庫の上に電子レンジ、その上にプリンター、その上にラズパイというトーテムポールもびっくりのチグハグさをしている。
原理
実に簡単なアルゴリズムだけど、気にしちゃだめ。
用意したもの
ハード
- RaspberryPi 2 Model B
- Microsoft Lifecam HD-3000(USBカメラ)
- Sanwa Supply MM-SPU5BK(USBスピーカー)
- Planex GW-USMicroN (無線LAN子機)
- AC電源付きの適当なUSBハブ
ソフト
各機器/ソフトウェアのセットアップ/インストールは各々済ませておく。
当方の環境では、AC給電のUSBハブがないとUSBスピーカーがうまく動作しなかった。
Motionの設定
上記サイトがかなり参考になる。
$ sudo vim /etc/motion/motion.conf # とりあえず変えるべき箇所は以下。 # 11行目 daemon on # デーモン化させる # 208行目 gap 1 # トリガとトリガの間隔を1秒に最小化 # 515行目 on_event_start 'echo `date` >> /tmp/motion_triggered.log' # トリガ時にログ出力。dateコマンドはおまけ。
ログの更新を監視するRubyスクリプト
ソースコード
非常にかっちり作った。
設定項目
- PLAYER_BIN
- 音源再生プレイヤーのパス。デフォルトで入っているaplayでうまく動作しないときは以下の設定ファイルを /.asoundrcに置く。
pcm.!default { type hw card 0 } ctl.!default { type hw card 0 }
- FAMIMAD_LOG
- 本スクリプトが吐くログのパス
- WATCHING_FILE
- Motionが吐くログのパス。デフォルトは/tmp/motion_triggered.log。ここが違うと動かない。
- FAMIMA_FILE
- ファミマの音源ファイルへのパス。絶対パスで指定。
- MIN_TRIGGER_TIME
- 音が鳴ってから次の音が鳴るまでの最小時間。
- WAIT_SEC
- ログ監視のためにループする時間。
起動
$ sudo ruby famimad.rb start
試しにカメラの前を横切ってみる。ファミマの音が鳴れば成功。
音が鳴らない場合:
1週間ほど運用してみた感想
玄関に置くカメラの映像に変化が生じると音が鳴るので、たとえば照明のON/OFFでも音が鳴る。一人暮らしワンルーム程度だと、居間の照明も玄関に届いてしまう。
「寝るかー」と思い電気を消すとファミマ入店音が鳴るので「ひぃぃ、誰か来た!!!」って毎晩なる。まさに大盛況。
技術的な観点から
勘の良い方はお気づきだと思うが、
on_event_start 'echo `date` >> /tmp/motion_triggered.log'
の部分で直接音を鳴らすようにすれば実はRubyスクリプト自体が必要ない。
しかし、なぜだか私の環境ではMotionからaplayを使って音を鳴らすことができなかった。念のためsoxを使ったり、sudoしてみたりと色々やったがダメ。詳しい方教えてください。
今後の応用予定
http://RaspberryPiのIP:8081/にアクセスするとカメラの映像をリアルタイムに監視できる。便利。
ベタだけど、「会社の定時時間内にトリガひいたら携帯のメールにアラート流す」とか、防犯対策になるんじゃないかと。その際はファミマじゃなくてブザー鳴らすとか。いろいろできそう。