物音がしたかどうかを調べる
ここでは、音センサーを使って、ラズパイの周囲で物音がしたかどうかを調べる方法を説明します。これを応用すると、次のようなプログラムが書けるようになります。
- 物音がしたらカメラで写真や動画を撮る(さらにそのデータをKintoneにアップロードして自分に通知する)
- 物音がしたらマイクで録音する(さらにそのデータをKintoneにアップロードして自分に通知する)
- 物音がしたらLEDを光らせる
- 物音がしたらLINEで通知する
周囲の音を感知するセンサーとして、このセンサーを使います。他の同類のセンサーでも構いません(例えばこれとこれ)。この音センサーは、ある一定の音量(音の大きさ)を超えたかどうかを検知します。
この音センサーには円形のマイクが付いていて、その反対側にピンが3本付いています。本体(ボード)の上には、プラスのドライバーで回すネジ穴があります。このネジを回すことで、音を検知する感度(sensitivity)を調節できます。
音センサーをラズパイに接続する
まずは音センサーをラズパイと接続します。センサーに付いている3本のピンを使います(以下写真の赤く囲った部分)。
この3本のピンをジャンパーワイヤーでラズパイのGPIOピンとつなぎます:
- センサーのOUTを、ラズパイのGPIO 21番ピンと接続
- センサー側のピンの名前がDO(Digital Outputの略)となっている場合もあります。
- ラズパイ側では何番のGPIOピンを使っても構いませんが、以下の説明ではGPIO 21番を使っている想定で書きます。
- センサーのGNDを、ラズパイのGND(グラウンド)ピンと接続
- どのGNDピンでも構いません
- センサーのVCCを、ラズパイの5Vピンと接続
正しく接続すると、以下のようにLEDが点灯します。以下の写真ではLEDがひとつだけ(右側が)点灯していますが、左右ふたつのLEDが点灯するかもしれません。どちらでも問題ありません。
センサー本体(ボード)の上にあるネジを時計回りに回してください。それ以上回せなくなるところまで回しきってください。この状態で、センサーの感度(sensitivity)はゼロになっています。つまり、センサーの音を検知する能力がゼロに設定されています。したがって、センサーの近くでどんなに大きな声を出しても、センサーはその音を検知しません(物音がしていないと判断する)。センサー本体上のLEDは右側だけが点灯しているはずです。この右側のLEDは、センサーが動作していることを示しています。左側のLEDは、センサーが音を検知すると点灯します。現在センサーの感度はゼロなので、どんなに大きな声を出しても左側のLEDは点灯しません。
次に、このネジをゆっくり反時計回りに回しながら、センサーの近くで声を出してください。ネジを反時計回りに回すにつれて、センサーの感度がだんだん高くなります。しばらくすると左側のLEDが点灯します。そこでネジを回すのを止めて下さい。この状態で、今出した声の大きさを検知できるように、センサーの感度を調節できています。
音を検知するプログラムを書く
音の検知をするサンプル・プログラムがsound-detection.pyです。音センサーは、音を検知していないときには21番のGPIOピンに電流を流し続け、音を検知すると電流を流さなくなります。音検知のプログラムはこの特徴を利用して書きます。
プログラムの全体構造は以下のようになっています。
soundDetectionPin = 21
while True:
try:
if GPIO.input(soundDetectionPin) == GPIO.LOW:
print("Sound detected")
except KeyboardInterrupt:
break
ループを使って、GPIOの21番ピンに電流が流れているか、流れていないかを繰り返し調べています。流れていなければ「音が検知された」ということです。その場合、このプログラムでは関数print()を使って「Sound detected」という文字をThonnyのShellに書き出します。
プログラムを動かした後、センサーの近くで声を出して下さい(先ほど出したのと同じくらいの大きさで)。ThonnyのShellに「Sound detected」と表示されるはずです。
このプログラムは音検知をずっと(永遠に)繰り返します。プログラムを止めるにはCtrl-Cをしてください。
音センサーの感度はお好みで調節してください。センサーが動作中のときも、プログラムが実行中のときも、いつでも調節して構いません(ネジを回して構いません)。センサーの感度をどのくらいにするかは、どの程度の音の大きさを検知したいかによります。大きな音だけ検知して小さな音は無視したいなら感度は低くし、大きな音も小さな音も検知したいなら感度は高くしてください。