4.3.4 Smart Noise Tester
4.3.4.1 概要

スマート騒音テスター(サウンドレベルメーター、デシベルメーターとも呼ばれる)は騒音を検出するための装置です。騒音は強度に応じていくつかのレベルに分類され、micro:bit のマイクは周囲の音の強度をリアルタイムで検出します。強度に基づいて、micro:bit はいくつかの等級に分けます。
このプロジェクトでは、OLED 表示が現在の騒音レベルをリアルタイムに表示し、5×5 LED マトリクスが騒音レベルに応じて一部の LED を点灯/消灯します。
この種の装置は騒音監視の技術的ハードルとコストを大幅に下げたため、環境騒音監視、労働安全衛生、建設現場、娯楽施設などで広く応用されています。

4.3.4.2 部品の知識

Microbit マイク

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

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


4.3.4.3 必要な部品
|
|
|
|---|---|---|
micro:bit V2 main board ×1 |
micro:bit shield ×1 |
OLED display ×1 |
|
|
|
micro USB cable ×1 |
4 pin wire ×1 |
battery holder ×1 |
|
||
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 |

4.3.4.5 コードの流れ

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

完全なコード:
# 関連ライブラリをインポート
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)

簡単な説明:
① 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 テスト結果

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

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

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

⚠️ 注意: 実験に使用するブロック類はこのキットには含まれていません。
(Tip: 結果が表示されない場合は、micro:bit ボードのリセットボタンを押してください。)







