稼働中

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を接続しました。
Soundセンサー接続図

スクリプト

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’時間を計測する方法で使ってみました。