### 4.3.5 Earthquake Detection Alarm
#### 4.3.5.1 概要

地震検知アラームは、地震波や機械的振動を検知して、音声および視覚的な警報を発する装置です。主に地震リスクの早期警報に使用されます。
このプロジェクトでは、OLEDディスプレイはmicro:bitの加速度センサーが検出した値をリアルタイムで表示します。傾きや軽い揺れを検出したときにスピーカーが鳴り、5×5 LEDマトリクスは警告・注意喚起のための表示パターンを表示します。
これらの装置(ここでは特に地震早期警報受信端末を指します)は、学校、家庭、公共の場所、地質災害監視地域などで広く使用されています。これらの核心的価値は「時間との闘い」にあります。

#### 4.3.5.2 コンポーネントの知識

**Microbit 加速度センサー**

LSM303AGRは、micro:bit基板に統合された超低消費電力の高性能加速度計で、主に三次元(X軸、Y軸、Z軸)の運動検出に使用されます。デジタル線形加速度計と磁力計を統合して正確な姿勢測定を実現します。 このセンサーの主な特徴は次のとおりです:
通信インターフェース: I2Cシリアルバスインターフェースをサポート(標準、ファストモード、ファストモードプラスおよびハイスピードモードに対応し、最大100kHz、400kHz、1MHz、3.4MHzまで)およびSPIシリアル標準インターフェースをサポートし、マイコンやその他周辺機器との接続を容易にします。
分解能: 動作モードに応じて8ビット、10ビット、12ビット出力に設定可能(例:低消費電力モードでは8ビット、高解像度モードでは12ビット)。
レンジ設定: 加速度レンジは±2g、±4g、±8g、±16gにプログラム可能で、さまざまなアプリケーションシナリオの感度要件を満たします。
加速度計に対応するX、Y、Z方向は以下の通りです:


#### 4.3.5.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(**自分で用意**) ×6| | |
#### 4.3.5.4 配線図
⚠️ **配線する際は、ワイヤーの色にご注意ください。**
| OLED display | wire color | micro:bit shield pin | micro:bit board pin |
| :----------: | :--------: | :------------------: | :-----------------: |
| GND | 黒色 | G | G |
| VCC | 赤色 | V2 | V |
| SDA | 青色 | 20 | P20 |
| SCL | 緑色 | 19 | P19 |

#### 4.3.5.5 コードの流れ

#### 4.3.5.6 テスト用コード
⚠️ **Tip 1: Before downloading the code to the Microbit board, please import the library file “oled_ssd1306\.py” refering to ** “[Import Library on MU](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” .

⚠️ **Tip 2: if() 構文中の閾値 900 と 1200 は、実際の状況に応じて変更できます。**
**完全なコード:**
```Python
'''
Theme: Earthquake detection alarm
Function: OLED displays information related to earthquake intensity and the microbit accelerometer controls a 5×5 dot matrix and speaker.
Compiling IDE: MU 1.2.0
Author: https://docs.keyestudio.com
'''
# 関連ライブラリをインポート
from microbit import *
from oled_ssd1306 import *
import music
# oled を初期化してクリア
initialize() # oled を初期化
clear_oled() # oled をクリア
def get_acceleration_strength():
"""
Read the combined acceleration intensity of the accelerometer
Return the magnitude of the total acceleration rate (unit: mg, milli-g)
"""
# 三軸の加速度値を読み取る
x = accelerometer.get_x()
y = accelerometer.get_y()
z = accelerometer.get_z()
# 合成加速度(ベクトルの大きさ)を計算
strength = (x**2 + y**2 + z**2) ** 0.5
return strength
while True:
strenght = get_acceleration_strength() # micro:bit の加速度センサーが検出した強度を読み取る
if strenght < 900 or strenght > 1200: # 加速度が900未満または1200より大きいとき
clear_oled() # OLED をクリア
add_text(0, 0, 'Earthquake Warning') # OLED の該当位置に文字列を表示
add_text(0, 2, 'Earthquake Level: ') # OLED の該当位置に文字列を表示
add_text(0, 4, str(int(strenght))) # OLED の該当位置に strength の値を表示
music.play("C4:1") # スピーカーで C4 の音を再生
display.show(Image.GHOST) # LED マトリクスにゴーストパターンを表示
else: # それ以外
clear_oled() # OLED をクリア
display.clear() # 全ての LED の明るさを0(オフ)にする
music.reset() # 音を停止
sleep(500)
```

**簡単な説明:**
① microbit、oled_ssd1306、music のライブラリをインポートします。
```Python
from microbit import *
from oled_ssd1306 import *
import music
```
② OLED の初期化とクリアを行います。
```Python
initialize() # oled を初期化
clear_oled() # oled をクリア
```
③ micro:bit 加速度センサーが検出する加速度値のサブ関数を定義します。
```Python
def get_acceleration_strength():
"""
Read the combined acceleration intensity of the accelerometer
Return the magnitude of the total acceleration rate (unit: mg, milli-g)
"""
# 三軸の加速度値を読み取る
x = accelerometer.get_x()
y = accelerometer.get_y()
z = accelerometer.get_z()
# 合成加速度(ベクトルの大きさ)を計算
strength = (x**2 + y**2 + z**2) ** 0.5
return strength
```
④ 読み取った加速度値を変数 strength に代入します。
```Python
strenght = get_acceleration_strength() # micro:bit の加速度センサーが検出した強度を読み取る
```
⑤ 判定文: if()...else...
検出した加速度値が900未満または1200より大きいとき、OLED に文字列と加速度値を表示し、5×5 LED マトリクスは  を表示し、スピーカーが警報を鳴らします。そうでない場合は、OLED と 5×5 LED マトリクスには何も表示されず、スピーカーも鳴りません。
```Python
if strenght < 900 or strenght > 1200: # 加速度が900未満または1200より大きいとき
clear_oled() # OLED をクリア
add_text(0, 0, 'Earthquake Warning') # OLED の該当位置に文字列を表示
add_text(0, 2, 'Earthquake Level: ') # OLED の該当位置に文字列を表示
add_text(0, 4, str(int(strenght))) # OLED の該当位置に strength の値を表示
music.play("C4:1") # スピーカーで C4 の音を再生
display.show(Image.GHOST) # LED マトリクスにゴーストパターンを表示
else: # それ以外
clear_oled() # OLED をクリア
display.clear() # 全ての LED の明るさを0(オフ)にする
music.reset() # 音を停止
```
#### 4.3.5.7 テスト結果

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

テストコードをアップロードした後、micro:bit の背面にあるリセットボタンを押します。

micro:bit基板を傾けるか軽く揺らします。検出された加速度値が900未満または1200より大きいと、OLED に文字列と値が表示され、5×5 LED マトリクスは  を表示し、スピーカーが警報を鳴らします。そうでない場合は、OLED および 5×5 LED マトリクスは何も表示せず、スピーカーも鳴りません。

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