稼働中

マイクロビット(e_50)サウンドセンサー

音センサー モジュール

音の検出します。外部の周囲音が設定されたしきい値を超えるとGNDレベルを出力します。

外観

Soundセンサーモジュールの外観です。以後、Soundセンサーと記すことがあります。
マイクの出力と感度調整値と比較(コンパレータ)して、感度調整したレベルより音が大きいと音検出LEDが点灯します。
この時の出力(OUT)はGNDレベルです。通常は電源電圧です。
サウンドセンサ

実体図

SoundセンサーのVCC、GND、OUTをmicro:bitに接続するだけです。そのため接続図は省略します。
動作電圧はDC 3.3V~5Vなのでmicro:bitから供給します。OUTはmicro:bitの16pinと接続しました。
以下は実体図です。
実体図
感度調整は写真左側の音検出LEDが消灯するようにポテンションメータを調整します。消灯した点より少し余裕を持たすようにします。
表示LED

スクリプト

音を検出したらカウントアップします。その値の1桁目0~9をmicro:bitのLEDディスプレイに表示させます。
サウンドセンサの出力が音検出するとLOWになるので、その時間を測る
machine.time_pulse_us(pins,0)
を使って検出することにしました。検出が無い時には-2が返ります。
スクリプトは以下のようにしました。※thonny-microbitのMicroPythonを使っています。


sound_01b.py
from microbit import *
import machine
import utime
# micro:bit input pin sound module OUT pin
pins=pin16
#pin0.set_pull(pin0.NO_PULL)
pins.set_pull(pins.NO_PULL) #これが必要

display.clear()
# 検知回数
cnt=0
# 検知時間(ms)
ms_dur=30000
start = utime.ticks_ms() # 開始した稼働時間
while True:            
    d = machine.time_pulse_us(pins,0) # 時間測定(usec)
    if (d != -2) and (d != -1):
        cnt=cnt+1
        print(cnt,d)
        display.show(str(cnt%10))
        sleep(100) # 無検出時間 チャタリング
        
    current = utime.ticks_ms()  # 現在までの稼働時間
    diff=current-start          # 現在までの時間
   
    # 検知時間を超えたら終了
    if diff >= ms_dur:        
        pins.set_pull(pins.NO_PULL)  # 確実に元に戻す
        display.clear()
        print('break')
        break

実行結果

検出時間を10秒にして音を検知しました。机をボールペンでノックして音を発生させました。
ボールペンでノック音のToff時間は割りと一定な値になっていました。


>>> %Run sound_01b.py
1 737           # 回数  Toff時間(usec)
2 749
3 780
4 715
5 669
6 629
7 602
8 636
9 589
break
>>> 

動画 ※上結果と同一動作の動画ではありません。

まとめ

micro:bitでSoundセンサーの動作を確認しました。