Raspberry Pi Pico(d_30)サウンドセンサー モジュール
音センサー モジュール
サウンド(音)センサー モジュールは音を検出します。外部の周囲音が設定されたしきい値を超えるとGNDレベルを出力します。※micro:bitの記事e_50からRaspberry Pi Picoで使えるように追記、修正等をしました。
外観
サウンドセンサーモジュールの外観写真です。(以後はサウンドセンサーと記載します。)
マイクの出力と感度調整値と比較(コンパレータ)して、感度調整したレベルより音が大きいと音検出LEDが点灯します。
この時の出力(OUT)はGNDレベル’L’です。通常は電源電圧’H’です。
接続例
サウンドセンサーのVCC、GND、OUTをRaspberry Pi Picoに接続するだけです。
動作電圧はDC 3.3V~5VなのでRaspberry Pi Picoから供給します。
OUTはRaspberry Pi PicoのGP22と接続しました。
出力状態を表示するためGP21に抵抗を介してLEDを接続しました。
スクリプト
MCP4725のスクリプトは以下のようにしました。
※開発環境はThonnyです。ThonnyでMicroPythonをRaspberry Pi Pico with RP2040にインストールして使っています。
※Raspberry Pi Pico単独で動作させるには’main.py’としてRaspberry Pi Picoにuploadして使います。
#pico_sound_test_01.py
from machine import Pin, Timer
import time
dpin=Pin(22, Pin.IN) #SOUND-OUT detect'0'
led2=Pin(21, Pin.OUT, value=0) #LED
#callback hold-off hold(d_out)
def h_off(t):
global hold
hold=0 #hold clear
led2.low() #led-off led2(0)
wt=time.ticks_ms()
print('hold off wtime=%4d' %(wt-dt)) # hold時間確認
time.sleep_ms(10)
tim=Timer() # machine.Timer class
hold=0 # 保持フラグ
while True:
st=time.ticks_ms() # 時間確認用
d = machine.time_pulse_us(dpin, 0, 950000) # 時間測定(usec)
if d == -1:
print('timeout error') #測定中にタイムアウト
# '-2' 待機中にタイムアウト=音の検知が無い
if (d != -2) & (hold==0):
dt=time.ticks_ms() # 時間確認用
print('detect ----') # 音の検知
hold=1 #hold set 保持
led2(1) #led-on
#保持時間5秒 period(msec)、h_offをcallback
tim.init(period=5000, mode=Timer.ONE_SHOT, callback=h_off)
time.sleep_ms(50) # 検知確認数周期
et=time.ticks_ms()
print('%4d' %hold,'%4d' %d, 'dtime=%4d' %(et-st) )
#print('%4d' %hold,'%4d' %d)
部分説明
machine.time_pulse_us(dpin, 0, 950000)
dpinが’0’の時間を測ります。950msec間にdpinが’0’が無ければタイムアウトで’-2’を返します。time.sleep_ms(50)を加算して1secのタイミングになります。
dpinが’0’、保持フラグ’0’で5secのTimer動作をします。
Timer動作が終わるまで保持フラグ’1’、LED-onします。
Timer動作中もdpinの確認は行われます。
実行結果
結果は以下のようになりました。※Thonnyのshellに表示されます。
>>> %Run -c $EDITOR_CONTENT
0 -2 dtime=1000 # 保持状態 d値 測定時間
0 -2 dtime=1000
0 -2 dtime=1000 # 未保持 未検知 timeout
0 -2 dtime=1001 # 未保持 未検知 timeout
detect ---- # 検知 保持
1 6 dtime= 428 # 保持 dpin=6msec
1 -2 dtime=1000 # 保持 未検知 timeout
1 174 dtime= 651 # 保持 dpin=0 428msec
1 -2 dtime=1000 # 保持 未検知 timeout
1 -2 dtime=1001
1 82 dtime= 140
1 -2 dtime=1001
hold off wtime=5797 # timeup
0 -2 dtime=1011 # 未保持 未検知 timeout
0 -2 dtime=1000
0 -2 dtime=1000
0 -2 dtime=1000
0 -2 dtime=1001
detect ----
1 1422 dtime= 852
1 32 dtime= 97
1 64 dtime= 62
1 -2 dtime=1000
1 -2 dtime=1000
1 -2 dtime=1000
1 130 dtime= 573
1 8 dtime= 52
1 -2 dtime=1000
hold off wtime=5793
0 -2 dtime=1010
0 -2 dtime=1000
0 -2 dtime=1000
0 -2 dtime=1000
0 -2 dtime=1000
0 -2 dtime=1000
Traceback (most recent call last):
File "", line 34, in
KeyboardInterrupt:
>>>
まとめ
Raspberry Pi Picoでサウンドセンサーの出力’L’時間を計測する方法で使ってみました。