##はじめに
今回の記事は、前回の記事(Rasberry Pi の標準プレーヤ(omxplayer)で、音楽を鳴らす)の続きです。
「赤ちゃんが泣いたら、ランダムな音楽を鳴らす」というアプリを、Raspiで構築しようとしています。
※音センサーを使用したいだけの方は、この記事だけ参照してもらえば問題ありません。
この仕組みを作るためには、以下のことができなければなりません。
1.Rasberry Piで音楽を鳴らす
2.音センサーで検知させる
3.センサー検知後に、ランダムな曲を選択する
などなど
**今回は、「2.音センサーで検知させる」**ということを主眼に記事を書いていきます。
##環境(準備するもの)
・Python
・Rasberry Pi
・音センサー(Grove - Loudness Sensor)
・ジャンパーケーブル(メス-メス)
※音センサーは、ここからポチりました。
※ジャンパーケーブル(メス-メス)は、ここからポチりました。
##音センサーとRaspiを接続する
さて、今回参考にさせていただいたURLがこちらです。
・参考URL
http://dotnsf.blog.jp/archives/1052664142.html
この、音センサーを繋げる方法ですが、
ネットを調べてみても、「GrovePi」という別売りの制御モジュールを使用する方法がほとんどでした。
そんな中、GPIOケーブルで直接繋げていらっしゃった方が今回参考にさせていただいた方でした。
そんな貴重な情報を参考にして、raspiと音センサーをジャンパーケーブルで繋ぎます。
↓こんな要領で接続します↓
![スクリーンショット 2019-08-10 8.05.57.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F167745%2F9f6a2dcb-6256-6d35-7717-e7e5ed027f38.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1df716e44b84e41bcfb21a7abdabab82)
※「NC」と記載されているところは、ケーブルを通しません。
画像右の「GND」「VCC」「NC」「SIG」は、センサーを裏返すと、記載があります。
裏面はこんな感じです。
ちなみに、各種の説明はこんな感じらしいです。
・GND:アースのようなもの。厳密にはちょっと違うらしい
・VCC:電源電圧
・NC:「Not Connection」の略で、何も繋がない場所
・SIG:シグナル?信号を受信するところ?
接続したいけど、「GPIOの1番とかってどこ?」という方!
↓ざっくりこんな感じです↓
![スクリーンショット 2019-08-10 8.29.11.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F167745%2F773c0c50-6736-14c6-ff1b-beab3e0c06d3.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=c1d222ca9a3d48b74d37d68bb1cf448d)
また、今回は使用しないのですが、機器同士を連携させる場合、便利なモジュールがあるとのことなので、一応インストールしておきます。
pip install paho-mqtt
これで、音センサーとの接続は終了です。
##コード
次に、接続ができたかを確認するため、以下のようなコードを用意します。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# SEN02281P ----- RaspberryPi GPIO
# =SIG ---------- 13
# =NC
# =VCC ---------- 2
# =GND ---------- 20
#import paho.mqtt.client as mqtt
import time
import RPi.GPIO as GPIO
import subprocess
import time
import glob
import random
def reading(sensor):
sum = -1
if sensor == 0:
# print "test function."
sum = 0
for i in range(0,20):
time.sleep(0.1)
a = GPIO.input(SIG)
sum += a
# print sum
else:
print "Incorrect function."
return sum
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
SIG = 13
GPIO.setup(SIG,GPIO.IN)
while True:
msg = reading(0);
print(msg)
#pass
GPIO.cleanup()
print('Finiish')
##実行
python otosensor_test.py
##実行結果
用意したコードを実行すると、以下のように数字が出力されるはずです。
この数値は、2秒間の間に(0.2秒 * 10回)、何回音を認識したかを出力しています。
![]() |
---|
もしもどんなに音を立てても、数値が「0」しか出力されない場合は、
センサーの感度が厳しくなっている可能性があります。
以下のように、音センサーに付いているネジを回してみましょう。
センサーの感度を変更することができます。
・左回し:感度増加(小音でも認識)
・右回し:感度低下(なかなか認識しない)
![スクリーンショット 2019-08-10 8.05.48.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F167745%2Fb2e3cf8c-2704-63a3-ddfb-70b360f0680c.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=aea700eb126b59710c5ee3e8366b2c27)
これで、「音センサーで検知させる」ということができるようになります。
さて、次回、前回の記事と組み合わせて、「音を認識したら、ランダムな曲をかける」というところまでやっていきたいと思います。