池と沼は同じだった

いつか札幌に移住したい26歳です。

カメラと技術と時々音楽

RaspberryPiとMotionでお家をファミマにした

ファミマの入店音ってなんか親しみやすくて好き。落ち着くし。

あの音には正式名称があるみたいですね。

portal.nifty.com

今日も新宿の紀伊国屋で「大盛況」が鳴っててびっくりした。

このアットホームな入店音を自宅に導入すれば、家の居心地もさらに良くなるのでは?!という仮説が浮かんだので、このためだけにラズパイ(周辺機器含めて約15,000円)を購入してシステムを構築した。その動画が以下。

我が家は冷蔵庫の上に電子レンジ、その上にプリンター、その上にラズパイというトーテムポールもびっくりのチグハグさをしている。


原理

  1. Motionという映像監視ソフトを使って、動体検知時にログ(/tmp/motion_triggered.log)を更新
  2. デーモン化したRubyスクリプトがログの更新をキャッチ
  3. ファミマの音を鳴らす

実に簡単なアルゴリズムだけど、気にしちゃだめ。

用意したもの

ハード

  • RaspberryPi 2 Model B
  • Microsoft Lifecam HD-3000(USBカメラ)
  • Sanwa Supply MM-SPU5BK(USBスピーカー)
  • Planex GW-USMicroN (無線LAN子機)
  • AC電源付きの適当なUSBハブ

ソフト

  • Motion 3.2.12
  • Ruby 1.9.3p194(プリインストール済)
    • daemons gem (gem install必要)
  • ファミマの音源(YouTubeからとってくる)

各機器/ソフトウェアのセットアップ/インストールは各々済ませておく。

当方の環境では、AC給電のUSBハブがないとUSBスピーカーがうまく動作しなかった。

Motionの設定

safe-linux.homeip.net

上記サイトがかなり参考になる。

$ 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

試しにカメラの前を横切ってみる。ファミマの音が鳴れば成功。

音が鳴らない場合:

  • /tmp/motion/*.jpg が生成されている
  • 生成されていない
    • USBカメラの問題か、Motionがうまく動いていない。

1週間ほど運用してみた感想

玄関に置くカメラの映像に変化が生じると音が鳴るので、たとえば照明のON/OFFでも音が鳴る。一人暮らしワンルーム程度だと、居間の照明も玄関に届いてしまう。

「寝るかー」と思い電気を消すとファミマ入店音が鳴るので「ひぃぃ、誰か来た!!!」って毎晩なる。まさに大盛況。

技術的な観点から

勘の良い方はお気づきだと思うが、

on_event_start 'echo `date` >> /tmp/motion_triggered.log'

の部分で直接音を鳴らすようにすれば実はRubyスクリプト自体が必要ない。

しかし、なぜだか私の環境ではMotionからaplayを使って音を鳴らすことができなかった。念のためsoxを使ったり、sudoしてみたりと色々やったがダメ。詳しい方教えてください。

今後の応用予定

http://RaspberryPiのIP:8081/にアクセスするとカメラの映像をリアルタイムに監視できる。便利。

ベタだけど、「会社の定時時間内にトリガひいたら携帯のメールにアラート流す」とか、防犯対策になるんじゃないかと。その際はファミマじゃなくてブザー鳴らすとか。いろいろできそう。