マイクロビット(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が消灯するようにポテンションメータを調整します。消灯した点より少し余裕を持たすようにします。
スクリプト
音を検出したらカウントアップします。その値の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センサーの動作を確認しました。