4.3.4 Smart Noise Tester

4.3.4.1 概要

Img

スマート騒音テスター(サウンドレベルメーター、デシベルメーターとも呼ばれる)は騒音を検出するための装置です。騒音は強度に応じていくつかのレベルに分類され、micro:bit のマイクは周囲の音の強度をリアルタイムで検出します。強度に基づいて、micro:bit はいくつかの等級に分けます。

このプロジェクトでは、OLED 表示が現在の騒音レベルをリアルタイムに表示し、5×5 LED マトリクスが騒音レベルに応じて一部の LED を点灯/消灯します。

この種の装置は騒音監視の技術的ハードルとコストを大幅に下げたため、環境騒音監視、労働安全衛生、建設現場、娯楽施設などで広く応用されています。

Img

4.3.4.2 部品の知識

Img

Microbit マイク

Img

micro:bit V2 ボードには音やオーディオ信号を検出するマイクが搭載されています。マイクは基板の上部に配置されており(小さな穴が周囲の音を拾う部分で、その横に LED インジケータがあります)。マイクを制御・処理するチップは基板の裏側にあります。

使用時は、単に micro:bit 基板を表向きに置いてください。

Img

基板が音を検出すると、マイクの LED インジケータが点灯します。

Img

Img

4.3.4.3 必要な部品

Img

Img

Img

micro:bit V2 main board ×1

micro:bit shield ×1

OLED display ×1

Img

Img

Img

micro USB cable ×1

4 pin wire ×1

battery holder ×1

Img

AA battery(self-prepared) ×6

4.3.4.4 配線図

⚠️ 配線する際は、ワイヤーの色に注意してください。

OLED display

wire color

micro:bit shield pin

micro:bit board pin

GND

black

G

G

VCC

red

V2

V

SDA

blue

20

P20

SCL

green

19

P19

Img

4.3.4.5 コードの流れ

Img

4.3.4.6 テスト用コード

⚠️ ヒント1: Microbit ボードにコードをダウンロードする前に、ライブラリファイル “oled_ssd1306.py” をインポートしてください。参照: Import Library on MU” .

Img

完全なコード:

# 関連ライブラリをインポート
from microbit import *
from oled_ssd1306 import *

# OLED を初期化してクリア
initialize()  # initialize oled
clear_oled()  # clear oled

# 任意の範囲の数値を別の範囲にマッピングする関数
def map(value, fromMin, fromMax, toMin, toMax):
    fromRange = fromMax - fromMin
    toRange = toMax - toMin
    valueScaled = float(value - fromMin) / float(fromRange)
    return toMin + (valueScaled * toRange)

# シンプルな棒グラフ用の画像セット
graph5 = Image("99999:""99999:""99999:""99999:""99999")
graph4 = Image("00000:""99999:""99999:""99999:""99999")
graph3 = Image("00000:""00000:""99999:""99999:""99999")
graph2 = Image("00000:""00000:""00000:""99999:""99999")
graph1 = Image("00000:""00000:""00000:""00000:""99999")
graph0 = Image("00000:""00000:""00000:""00000:""00000")

allGraphs = [graph0, graph1, graph2, graph3, graph4, graph5]

# 最初の音レベル読み取りを無視
# soundLevel = microphone.sound_level()
# sleep(100)

while True:
    # 画像選択のために音レベルを 0-255 から 0-5 にマップする
    soundLevel = int(map(microphone.sound_level(), 0, 255, 0, 5))
    display.show(allGraphs[soundLevel])
    clear_oled() # OLED をクリア
    add_text(0, 0, "Acoustic Sound Level:")  # OLED の該当位置に文字列を表示
    add_text(0, 2, str(microphone.sound_level()))  # OLED の該当位置に soundLevel を表示
    sleep(200)

Img

簡単な説明:

① microbit と oled_ssd1306 のライブラリをインポートします。

from microbit import *
from oled_ssd1306 import *

② OLED のピクセルを初期化し、OLED をクリアします。

initialize()  # initialize oled
clear_oled()  # clear oled

③ 任意の数値範囲を別の範囲にマップする map サブ関数を定義します。

def map(value, fromMin, fromMax, toMin, toMax):
    fromRange = fromMax - fromMin
    toRange = toMax - toMin
    valueScaled = float(value - fromMin) / float(fromRange)
    return toMin + (valueScaled * toRange)

④ シンプルな棒グラフ用の画像セットを定義します。

graph5 = Image("99999:""99999:""99999:""99999:""99999")
graph4 = Image("00000:""99999:""99999:""99999:""99999")
graph3 = Image("00000:""00000:""99999:""99999:""99999")
graph2 = Image("00000:""00000:""00000:""99999:""99999")
graph1 = Image("00000:""00000:""00000:""00000:""99999")
graph0 = Image("00000:""00000:""00000:""00000:""00000")

allGraphs = [graph0, graph1, graph2, graph3, graph4, graph5]

⑤ 音の値の範囲 0-255 を、表示するグラフ画像のインデックス 0-5 にマップします。

soundLevel = int(map(microphone.sound_level(), 0, 255, 0, 5))
display.show(allGraphs[soundLevel])

⑥ 検出した値を読み取り、OLED に表示します。

clear_oled() # clear OLED
add_text(0, 0, "Acoustic Sound Level:")  # Display the character string in the corresponding position of OLED
add_text(0, 2, str(microphone.sound_level()))  # Display soundLevel in the corresponding position of OLED
sleep(200)

4.3.4.7 テスト結果

Img

配線を行い、micro USB ケーブルで電源を入れた後、外部電源(単6電池×6)を接続して十分な電源供給を確保し、 「Flash」 をクリックしてコードを micro:bit ボードにダウンロードしてください。

Img

テストコードをアップロードしたら、micro:bit の裏面にあるリセットボタンを押してください。

Img

micro:bit 基板のマイクに向かって息を吹きかける(または非常に大きな音を出す)と(⚠️ 特別な注意: 息を吹きかけるとより明確な効果が得られます)、OLED 表示は息を吹きかけた(または騒音)強度に関連するリアルタイム情報を表示し、ユーザーは息の強さ(または騒音の強さ)を直感的に理解できます。同時に、micro:bit 基板上の 5×5 LED ドットマトリクスは、息の強さ(または騒音)に応じて画面上の点灯する行数を増減し、息(または騒音)の強度を知らせる効果を実現します。

Img

⚠️ 注意: 実験に使用するブロック類はこのキットには含まれていません。

(Tip: 結果が表示されない場合は、micro:bit ボードのリセットボタンを押してください。)

Img