お店の入り口に設置して、お客さんが入ってきたら「いらっしゃいませ」と音声が流れるという感じのものです。
今回はまず、基本となるプログラムを作成します。けっこう難儀するかと思っていたのですが、意外とすんなりできました。
いろいろ使えそうですが、まずは、獣害対策として、この前作った太陽光発電の電源と組み合わせて田畑に寄ってきたイノシシを驚かせるようなものが作れたらと思っています。
Raspberry PiはZero WH(Wのピンヘッダ実装モデル)、人感センサーモジュールはHC-SR501を使いました。
Ren He HC-SR501人体赤外線感応モジュール モジュール焦電型赤外線検出器PIRモーション 人体の赤外線の感応器 人感センサースイッチ ボディセンサーモジュール 3個
by SimpleImageLink
ELEGOO 120pcs多色デュポンワイヤー、arduino用ワイヤ—ゲ—ジ28AWG オス-メス オス-オス メス –メス ブレッドボードジャンパーワイヤー
by SimpleImageLink
人感センサーモジュールをジャンパーワイヤーでRaspberry Piに接続します。
HC-SR501側:Raspberry Pi側(ピン番号)
電源:5V(4)
出力:GPIO18(12)
GND:GND(6)
オレンジのつまみは、左が時間調節、右が感度調節です。右に回すと時間は長く、感度は良くなるみたいです。
Ren He HC-SR501人体赤外線感応モジュール モジュール焦電型赤外線検出器PIRモーション 人体の赤外線の感応器 人感センサースイッチ ボディセンサーモジュール 3個
by SimpleImageLink
昨年末に購入した時には、中国からどんぶらこと1か月くらいかけて届いたのですが、今現在はすぐ届く状態になっていますね。
ELEGOO 120pcs多色デュポンワイヤー、arduino用ワイヤ—ゲ—ジ28AWG オス-メス オス-オス メス –メス ブレッドボードジャンパーワイヤー
by SimpleImageLink
最短の接続は、メス-メスのジャンパーワイヤー。
では、作っていきます。
今回は主に、以下の2サイトを参考にさせていただきました。
・【Raspberry Pi】自作人感センサーの使い方と活用法 - CHASUKE.com
・Raspberry Piで音楽(wav/mp3)ファイルを再生する方法 python編 - Qiita
では、作っていきます。
今回は主に、以下の2サイトを参考にさせていただきました。
・【Raspberry Pi】自作人感センサーの使い方と活用法 - CHASUKE.com
・Raspberry Piで音楽(wav/mp3)ファイルを再生する方法 python編 - Qiita
▼ Raspberry Piの下準備
Raspberry Piの準備をします。
① Raspberry Pi OSのセットアップ
② IPアドレスの固定
③ VNC、SSHを有効化
④ PythonのデフォルトをPython3に変更
⑤ 日本語入力パッケージのインストール(「fcitx-mozc」、「ibus-mozc」 等)
やり方は、検索すればたくさんでてきますので省略。
②③は、作業時に、いちいちモニターとキーボード、マウスをつなぐのが大変なので、リモートアクセスで作業できるようにします。⑤の日本語入力は必要があれば。
▼ 人感センサーを接続する
左から、グランド(GND)、出力、電源(4.5-20V)になります。
電源:5V(4)
出力:GPIO18(12)
GND:GND(6)
さらに、右側端っこにリピート設定の切り替えスイッチがあるはずなんですが、なぜか付いていませんでした(笑)。まぁ、どちらにせよ、時間やリピートについてはプログラムで制御する形にします。
▼ 音声データと音声出力の準備
Raspberry PiでPythonから音声を再生する方法はいろいろあるようですが、今回は最初からパッケージとしてインストールされているpygameというモジュールを使います。音声データはmp3、もしくはogg形式のものを準備をします。
ちなみに、Raspberry Pi Zero WHにはミニジャックがないので、ミニHDMI、microUSB、GPIOのいずれかから出力する必要があります。
ROADOM 7インチ Raspberry Pi用タッチモニター IPS 1024X600 スピーカー内蔵 Raspberry Pi 4/3/2/1 Xbox PS4 Ubuntu Windows 7/8/10に適用…
by SimpleImageLink
例えば、スピーカー内蔵のモニターだとHDMI接続で音声がでます。
▼ Pythonスクリプト
人感センサーが反応した際に音声を再生するPythonスクリプトです。ディレクトリやファイル名は適当に。
#!/usr/bin/env python3 from datetime import datetime import time import RPi.GPIO as GPIO import pygame.mixer INTERVAL = 3 # 判定の時間の間隔 SLEEPTIME = 10 # 音声再生後の休止時間 GPIO_PIN = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(GPIO_PIN, GPIO.IN) if __name__ == '__main__': try: while True: if(GPIO.input(GPIO_PIN) == GPIO.HIGH): pygame.mixer.init() pygame.mixer.music.load("音声データ(絶対パスで記述)") pygame.mixer.music.play(1) time.sleep(音声データの秒数) pygame.mixer.music.stop() print(datetime.now().strftime('%Y/%m/%d %H:%M:%S')) time.sleep(SLEEPTIME) else: print(GPIO.input(GPIO_PIN)) time.sleep(INTERVAL) except KeyboardInterrupt: print("finished") finally: GPIO.cleanup()
書き換えが必要な箇所は以下の通り。
・20行目「音声データ(絶対パスで記述)」
例えば、Musicフォルダの場合は、「/home/pi/Music/ファイル名」になります。
・22行目「音声データの秒数」
音声データの秒数を記述します。1分の音声データであれば「60」。
また、8行目の「INTERVAL」、9行目の「SLEEPTIME」の時間によって反応のタイムラグができますので、用途によって適宜調整してください。「INTERVAL」は反応の判定をする時間の間隔、「SLEEPTIME」は音声再生後の休止時間になります。
▼ 動かしてみる
実行。
$ python ms_sound.py pygame 1.9.4.post1 Hello from the pygame community. https://www.pygame.org/contribute.html 0 0 0 2021/05/04 21:55:45 0 2021/05/04 21:56:03 0 0 ^Cfinished
こんな感じになります。
人感センサーが反応した場合は、日時が表示され、音声が流れます。無反応の場合は、3秒ごとに「0」と表示。
「Ctrl + C」でプログラムが終了します。
***
ということで、Raspberry Piを使い、人感センサーの反応に合わせて音声を再生するプログラムでした。
・関連投稿
Twitter(@nkkmd)日々更新中です。