人感センサーと音声出力

【ラズパイ】Raspberry Piと人感センサーを使い、検知すると音声を出力する仕組みを作る。

人感センサーと音声出力

 今回は、人感センサーで検知すると、指定した音声が流れる仕組みをpython(パイソン)で作成しました。時間指定を行うことで、再生される時刻の制限や音声ファイルを変えることもできますので、色々活用してみてはいかがでしょうか。

ラズベリーパイの準備

 ラズベリーパイは、Raspberry Pi4 Model B 4GBを使用しました。

 こちらのセットは、カバーや電源、マイクロSDカードまで付属しており、必要な基本パーツが揃っています。

人感センサーの準備

 人感センサーの正式名称は、焦電型赤外線モジュールと呼びます。人体などから発する熱(赤外線)を検知することができます。

 今回使用した人感センサーは、秋月電子の焦電型赤外線センサーモジュール(焦電人感センサー)[SB612A(2019)]です。

 このセンサーは、ラズベリーパイの5V電源で利用できますので、使いやすいと思います。検知角度が115度と広いため、必要に応じて検知範囲を調整すると良いです。下の写真のように、センサーをスポンジで包むだけで、センサーの検知範囲を狭くすることができます。

人感センサー_拡大

手作り感満載の見た目ですが、ご了承を・・・


 プログラムで制御するため、センサー裏側の3本脚の方を使用します。ラズベリーパイと接続するため、ブレッドボード・ジャンパー延長ワイヤー(メスーメス)を準備します(こちらのワイヤーも秋月電子通商で揃えました)。

 人感センサー側に、【+】【OUT】【−】のピンがあります。それらをラズベリーパイ側の【5V】【GPIO18】【グラウンド】ピンに接続します。


・実際に繋いだ感じが下記の写真になります。

電源コード(白)とスピーカーのコード(黒)があって見にくいかもしれませんが、赤色の3本のコードで人感センサーとラズベリーパイを繋いでいます。

(ジャンパーワイヤーのメスーメスが手元に無かったため、オスーメスのオス部分をメスに変換して繋いでいます。こういった、小道具も秋月電子通商にあります。)

ラズパイとの接続

スピーカーの準備

 次に、スピーカーを準備します。今回は、USB接続できるものを選びました。

 スピーカー購入の際は、ワット数を確認してください。ラズパイ自身にアンプ機能がないため、スピーカー側で準備する必要があります。今回、60Wを利用しました。

 60Wは、かなりの大音量で、鳴らすことができます。自宅等で利用するには、大音量過ぎるかもです…。工場出入り口に設置すると良い感じの音量でした。


 スピーカーは、USB2ポートに接続しています。また、写真内のAC電源(白いコード)は、ラズパイの電源(5.1V3AUSB-Cアダプタ)です。スピーカーの電源は、スピーカー付属のAC電源を利用します。

コード(python)

 音声ファイルは、test.wavという名前で準備しました。音声ファイルと、パイソンのファイルは同じフォルダ内に入れます。そうすると、長いパスを入力しなくても、音声を出力できます。

from datetime import datetime
import time
import RPi.GPIO as GPIO

import subprocess

INTERVAL = 1
SLEEPTIME = 6
GPIO_PIN = 18


GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN, GPIO.IN)


if __name__ == '__main__':
    try:
        print ("処理キャンセル:CTRL+C")
        cnt = 1
        while True:
            # センサー感知
            if(GPIO.input(GPIO_PIN) == GPIO.HIGH):
                print(datetime.now().strftime('%Y/%m/%d %H:%M:%S') +
                ":" + str("{0:05d}".format(cnt)) + "回目")
                cnt = cnt + 1
                
                if 6 < datetime.now().hour < 9:
                    print(datetime.now().hour)
                    subprocess.call("aplay -D plughw:2,0 test.wav", shell=True)
                        

                        
                time.sleep(SLEEPTIME)
            else:
                print(GPIO.input(GPIO_PIN))
                time.sleep(INTERVAL)
    except KeyboardInterrupt:
        print("終了処理中...")
    finally:
        GPIO.cleanup()
        print("GPIO clean完了")
  • 7行目:INTERVALは、検知の間隔。1秒に指定しています。
  • 8行目:SLEEPTIMEは、1度音声が再生されたら6秒間、プログラムを停止させて、センサー検知を止めています。センサーの前に人が立ち止まると、音声が常になり続けてしまうため、SLEEPTIMEを設けています。

INTERVALとSLEEPTIMEは、適宜変更して下さい。

  • 27行目:datetime.now().hourで、時間を取得しています。プログラムでは7:00~8:59の間のみ、音声がなるようにif文を使用しています。
  • スピーカーを3.5mmステレオミニジャックで接続する場合や、HDMI接続する場合は、29行目のカードを変更する必要があります。コードは下記のように、書き換えて下さい。詳しくは関連記事のリンクをご参照下さい。
# 【3.5mmのステレオミニジャック】
    subprocess.call("aplay -D plughw:1,0 test.wav", shell=True)

# 【USB接続】
    subprocess.call("aplay -D plughw:2,0 test.wav", shell=True)

# 【HDMI接続】
    subprocess.call("aplay -D plughw:0,0 test.wav", shell=True)
関連記事

 ラズベリーパイで音声を出力する方法は、【① 3.5mmのステレオミニジャック】、【② USB接続】、【③ HDMI接続】があります。  今回は、実際に行った①と②での音声出力をご紹介し、そのあと、pythonで音声を再生します。[…]

ラズパイで音声出力

まとめ

 いかがたっだでしょうか。

 プログラム内に、if文を追加していくと、時間の指定や、音声ファイルの選択など、細かく指定することができます。 

 今回の人感センサーの仕組みを使って、タイムカードの押し忘れ防止のために、下駄箱付近にセンサーを取り付けました。ある程度の音量が必要だったため、60Wのスピーカーはちょうど良い音量でした。

 プログラムの組み方次第で、音声が急に鳴り出すことがあります。ただ、プログラムの問題なので、修正可能でした。今は、誤反応せず、良い感じに機能しています。

人感センサーと音声出力
最新情報をチェックしよう!