### 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](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” .

**完全なコード:**
```Python
# 関連ライブラリをインポート
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 のライブラリをインポートします。
```Python
from microbit import *
from oled_ssd1306 import *
```
② OLED のピクセルを初期化し、OLED をクリアします。
```Python
initialize() # initialize oled
clear_oled() # clear oled
```
③ 任意の数値範囲を別の範囲にマップする map サブ関数を定義します。
```Python
def map(value, fromMin, fromMax, toMin, toMax):
fromRange = fromMax - fromMin
toRange = toMax - toMin
valueScaled = float(value - fromMin) / float(fromRange)
return toMin + (valueScaled * toRange)
```
④ シンプルな棒グラフ用の画像セットを定義します。
```Python
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 にマップします。
```Python
soundLevel = int(map(microphone.sound_level(), 0, 255, 0, 5))
display.show(allGraphs[soundLevel])
```
⑥ 検出した値を読み取り、OLED に表示します。
```Python
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 ボードのリセットボタンを押してください。)
