LoginSignup
1
1

More than 1 year has passed since last update.

日常がちょっとだけ便利になる電子工作

Last updated at Posted at 2022-10-02
1 / 13

インターホン検知をスマホに通知しよう

やろうやろうと思っていたがついつい先延ばしになっていたインターホン検知のシステムだったが、この度実際に運用開始できたのでそのメモを残しておきます。


動機

  • リビング以外にいると音を聞き逃すから
  • 外出中の自宅への訪問がわからないから
    主な動機は上記2点。
    高級インターホンならオンライン接続可能でスマホで確認も簡単なんだろうが、マンションの共有部分を交換などできるわけもないのでDIYで解決することにした。

やりたいこと

  • インターホンが鳴ったらLineに通知がくるようにしたい

外出中は来客があったことがわかれば十分だが、在宅中に見過ごすわけには行かないのでお知らせの遅延は極力減らす。


システム構成

  • RaspberryPi zero
    • microSD 8gb
    • microusb to usb cable
  • USB Mic(Aliexpressで200yenくらい)
  • python3

逸般の誤家庭にはよくあるラズパイで初期投資を。
新たに購入したのはUSB Micのみ。Amazonなら700円ほどで即届くがのんびり海を超えて200円ほどで到着したものを使用する。
2022-10-02 17.07.jpg usbmic2.PNG


処理概要

  1. リアルタイムに音の取得
  2. インターホンの音の識別
  3. IFTTT経由でLineNotifyへ通知
    ※notify-apiを直接実行でもいいけど通知先などスマホから操作しやすいので今回はIFTTT経由

ざっくり図

特定の音を拾ったらIFTTT経由でスマホに通知するシンプルな構成


準備

  1. RaspberryPiのセットアップ
    • 公式ページからセットアップツールを使用してOSインストール
  2. 音の取得確認
    • micの確認
      • arecord -lでマイクの認識を確認
        pi@raspberrypi:~ $ arecord -l
        **** List of CAPTURE Hardware Devices ****
        card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
          Subdevices: 0/1
          Subdevice #0: subdevice #0
        
      • card1,device0 で認識されていたのでインターホンを手動で録音してみる
        pi@raspberrypi:~ $ arecord -D plughw:1,0 mic.wav
        Recording WAVE 'mic.wav' : Unsigned 8 bit, Rate 8000 Hz, Mono
        
    • Audacityで録音したインターホンの音の詳細を確認してみる
      • 録音した音を再生しながら、インターホンの波形が現れる箇所を特定
        • インターホンの波長が現れる箇所選択して、「解析→スペクトル表示」を選択する。
          スペクトル表示.png
      • FFT解析(周波数解析)してインターホンの周波数を識別する → FFT解析とは?
        • 横軸が周波数、縦軸は周波数成分の大きさで構成されている
        • 最大振幅の周波数を確認
          • 今回は511Hzと649Hzの周波数を検知したらインターホンが鳴ったと判断する
            周波数解析.png
      • IFTTT、LineNotifyの設定
        1. IFTTTアプレットはトリガー:bellhop:をWebhooks、アクションをLine Notifyを選択する
        2. Webhooksのトリガーイベントキーを設定(POSTの後のURLを後ほど使用する)
        3. Line Notifyの通知のアカウントと、メッセージの設定

          周波数検知時にWebhooksをトリガーにしてLineNotifyへ通知する
          ※IFTTTの基本的な使い方はこちら
          ※Webhooksの基本的な使い方はこちら

プログラム

  1. インターホンの音を検知したらアマゾンエコーに喋らせるプログラムをベースにして一部改変

    git clone https://github.com/kenmasumitsu/intercom.git
    

    検知したあとAlexaに喋らせる部分のコード
    https://github.com/kenmasumitsu/intercom/blob/master/detector.py#L332
    をIFTTTの処理に変更

     detector.py
     speak_alexa() -> requets.post("iftttのwebhooks url")
    
  2. 必要パッケージのインストール

    apt install python3-pyaudio python3-numpy python3-scipy
    pip3 install python-dotenv
    
  3. FFT解析で確認した周波数を入力

    FREQ_1ST: float = 511.0  # ピンポーンのピンの周波数
    FREQ_2ND: float = 649.0  # ピンポーンのポーンの周波数
    

    https://github.com/kenmasumitsu/intercom/blob/master/detector.py#L26-L27

  4. まずは手動でプログラム実行して動作確認を行う

    python detector.py -w wav
    
  5. 問題なく検知できることが確認できたら

    ./run.sh
    

    を実行する
    nohup付きで実行されるのでTerminalを閉じてもプログラムが実行されたままになっている。


参考にしたコード


おしゃれではないインターホン周りの写真


おわりに

RaspberryとMicでインターホンの通知を行うことはできました。
ただ、、、いかんせんおしゃれではない。
全くスマートではないのでここは要改善項目である。


もっとスマートに。。。

M5StickC-Plusというものを見つけた。
マイク、バッテリー内蔵で小型のキットがあるらしい。
みんなのAliexpressでも販売しているようなので機会があればこちらでも試してみようかなと思う。

Sony製のおしゃれなやつは開発用のUIも筐体デザインも洗練されていて素敵です(やすけr

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1