Rasberry Piで音センサーと連携する

##はじめに
今回の記事は、[前回の記事（Rasberry Pi の標準プレーヤ（omxplayer）で、音楽を鳴らす）](https://qiita.com/kazu_tekuru/items/ed19b4119a316df5759f)の続きです。
「赤ちゃんが泣いたら、ランダムな音楽を鳴らす」というアプリを、Raspiで構築しようとしています。
**※音センサーを使用したいだけの方は、この記事だけ参照してもらえば問題ありません。**



この仕組みを作るためには、以下のことができなければなりません。
**1.Rasberry Piで音楽を鳴らす**
**2.音センサーで検知させる**
**3.センサー検知後に、ランダムな曲を選択する**
などなど

**今回は、「2.音センサーで検知させる」**ということを主眼に記事を書いていきます。


##環境（準備するもの）
・Python
・Rasberry Pi
・音センサー(Grove - Loudness Sensor）
・ジャンパーケーブル（メス-メス）

※音センサーは、[ここ](https://www.amazon.co.jp/gp/product/B074Z39BDM/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)からポチりました。
※ジャンパーケーブル（メス-メス）は、[ここ](https://www.amazon.co.jp/gp/product/B01A4DDUTA/ref=ppx_yo_dt_b_asin_title_o05_s00?ie=UTF8&psc=1)からポチりました。





##音センサーとRaspiを接続する
さて、今回参考にさせていただいたURLがこちらです。

・参考URL
http://dotnsf.blog.jp/archives/1052664142.html

この、音センサーを繋げる方法ですが、
**ネットを調べてみても、「GrovePi」という別売りの制御モジュールを使用する方法がほとんどでした。**
そんな中、**GPIOケーブルで直接繋げていらっしゃった方**が今回参考にさせていただいた方でした。

そんな貴重な情報を参考にして、**raspiと音センサーをジャンパーケーブルで繋ぎます。**
↓こんな要領で接続します↓

<img width="731" alt="スクリーンショット 2019-08-10 8.05.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/9f6a2dcb-6256-6d35-7717-e7e5ed027f38.png">

**※「NC」と記載されているところは、ケーブルを通しません。**

画像右の「GND」「VCC」「NC」「SIG」は、センサーを裏返すと、記載があります。
裏面はこんな感じです。
<img width="524" alt="スクリーンショット 2019-08-10 8.15.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/d039981c-3caf-f7b6-0f1d-2a76d94b95ab.png">

ちなみに、各種の説明はこんな感じらしいです。
・GND：アースのようなもの。厳密にはちょっと違うらしい
・VCC：電源電圧
・NC：「Not Connection」の略で、何も繋がない場所
・SIG：シグナル?信号を受信するところ?



接続したいけど、**「GPIOの1番とかってどこ?」という方!**
↓ざっくりこんな感じです↓

<img width="453" alt="スクリーンショット 2019-08-10 8.29.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/773c0c50-6736-14c6-ff1b-beab3e0c06d3.png">



また、今回は使用しないのですが、機器同士を連携させる場合、便利なモジュールがあるとのことなので、一応インストールしておきます。

```
pip install paho-mqtt
```

これで、音センサーとの接続は終了です。

##コード
次に、接続ができたかを確認するため、以下のようなコードを用意します。

```otosensor_test.py
#!/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回）、何回音を認識したかを出力しています。

|<img width="510" alt="スクリーンショット 2019-08-09 17.32.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/dfd0185a-3f50-b385-716a-d6a82b68bdb5.png">|
|:---:|



**もしもどんなに音を立てても、数値が「0」しか出力されない場合**は、
センサーの感度が厳しくなっている可能性があります。

以下のように、**音センサーに付いているネジを回してみましょう。**
センサーの感度を変更することができます。
**・左回し：感度増加（小音でも認識）**
**・右回し：感度低下（なかなか認識しない）**


<img width="553" alt="スクリーンショット 2019-08-10 8.05.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167745/b2e3cf8c-2704-63a3-ddfb-70b360f0680c.png">


これで、「音センサーで検知させる」ということができるようになります。

さて、次回、前回の記事と組み合わせて、「音を認識したら、ランダムな曲をかける」というところまでやっていきたいと思います。