4.3.5 Erdbeben-Erkennungsalarm

4.3.5.1 Überblick

Img

Ein Erdbeben-Erkennungsalarm ist ein Gerät, das durch Erkennen von Erdbebenwellen oder mechanischen Vibrationen einen akustischen und visuellen Alarm auslöst. Er wird hauptsächlich zur Frühwarnung vor Erdbebenrisiken eingesetzt.

In diesem Projekt zeigt das OLED-Display die vom micro:bit-Beschleunigungssensor in Echtzeit erfassten Werte an. Bei Kippen oder leichtem Schütteln ertönt der Lautsprecher und die 5×5-LED-Matrix zeigt ein Alarmsymbol zur Warnung und Erinnerung.

Solche Geräte (konkret bezogen auf Empfänger für Erdbebenfrühwarnungen) werden häufig in Schulen, Haushalten, öffentlichen Plätzen und Gebieten zur Überwachung geologischer Gefahren eingesetzt. Ihr zentraler Wert liegt im „Kampf gegen die Zeit“.

Img

4.3.5.2 Komponentenkunde

Img

micro:bit-Beschleunigungssensor

Img

Der LSM303AGR ist ein extrem energiearmer, leistungsfähiger Beschleunigungssensor, der in der micro:bit-Platine integriert ist und hauptsächlich zur dreidimensionalen (X-, Y-, Z-Achse) Bewegungserkennung verwendet wird. Er integriert einen digitalen linearen Beschleunigungssensor und ein Magnetometer, um eine präzise Lagebestimmung zu ermöglichen. Zu den Kernmerkmalen dieses Sensors gehören:

Kommunikationsschnittstelle: Er unterstützt die I2C-Serienbus-Schnittstelle (kompatibel mit Standard-, Fast-Mode, Fast-Mode-Plus und High-Speed-Mode, mit maximalen Raten bis zu 100kHz, 400kHz, 1MHz und 3.4MHz) und die SPI-Serienschnittstelle, was die Verbindung mit Mikrocontrollern oder anderen Peripheriegeräten erleichtert.

Auflösung: Sie kann je nach Betriebsmodus als 8-Bit-, 10-Bit- oder 12-Bit-Ausgabe konfiguriert werden (z. B. 8-Bit im Energiesparmodus und 12-Bit im Hochauflösungsmodus).

Einstellbarer Messbereich: Der Beschleunigungsbereich kann als ±2g, ±4g, ±8g oder ±16g programmiert werden, um die Empfindlichkeitsanforderungen verschiedener Anwendungsszenarien zu erfüllen.

Die den Beschleunigungssensor betreffenden X-, Y- und Z-Richtungen sind unten dargestellt:

Img

Img

4.3.5.3 Benötigte Komponenten

Img

Img

Img

micro:bit V2 Hauptplatine ×1

micro:bit Shield ×1

OLED-Display ×1

Img

Img

Img

micro USB-Kabel ×1

4-poliges Kabel ×1

Batteriehalter ×1

Img

AA-Batterien (selbst bereitgestellt) ×6

4.3.5.4 Anschlussdiagramm

⚠️ Beim Anschließen bitte auf die Kabel­farbe achten.

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.5.5 Codeablauf

Img

4.3.5.6 Testcode

⚠️ Tipp 1: Bevor Sie den Code auf das micro:bit-Board herunterladen, importieren Sie bitte die Bibliotheksdatei “oled_ssd1306.py” siehe Import Library on MU” .

Img

⚠️ Tipp 2: Die Schwellenwerte 900 und 1200 in der if()-Bedingung können entsprechend der tatsächlichen Situation geändert werden.

Vollständiger Code:

'''
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
'''
# import related libraries
from microbit import *
from oled_ssd1306 import *
import music

# initialize and clear oled
initialize()  # initialize oled
clear_oled()  # clear 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)
    """
    # Read the three-axis acceleration values
    x = accelerometer.get_x()
    y = accelerometer.get_y()
    z = accelerometer.get_z()

    # Calculate the synthetic acceleration (vector modulus)
    strength = (x**2 + y**2 + z**2) ** 0.5

    return strength

while True:
    strenght = get_acceleration_strength()  # Read the intensity detected by the accelerometer on the microbit board
    if strenght < 900 or strenght > 1200:    # When the intensity detected by the accelerometer is less than 900 or greater than 1200
       clear_oled()   # clear OLED
       add_text(0, 0, 'Earthquake Warning')  # Display the character string in the corresponding position of OLED
       add_text(0, 2, 'Earthquake Level: ')  # Display the character string in the corresponding position of OLED
       add_text(0, 4, str(int(strenght)))  # Display the value of strength in the corresponding position of OLED
       music.play("C4:1")   # speaker plays C4 tone
       display.show(Image.GHOST) # LED matrix displays a ghost pattern
    else: # or
       clear_oled()  # clear OLED
       display.clear() # Set the brightness of all LEDs to 0 (off)
       music.reset()  # no tone
    sleep(500)

Img

Kurze Erklärung:

① Importieren der Bibliotheken microbit, oled_ssd1306 und music.

from microbit import *
from oled_ssd1306 import *
import music

② OLED initialisieren und löschen.

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

③ Definieren der Unterfunktion zur Ermittlung des Beschleunigungswertes, der vom micro:bit-Beschleunigungssensor erkannt wird.

def get_acceleration_strength():
    """
    Read the combined acceleration intensity of the accelerometer
    Return the magnitude of the total acceleration rate (unit: mg, milli-g)
    """
    # Read the three-axis acceleration values
    x = accelerometer.get_x()
    y = accelerometer.get_y()
    z = accelerometer.get_z()

    # Calculate the synthetic acceleration (vector modulus)
    strength = (x**2 + y**2 + z**2) ** 0.5

    return strength

④ Den gelesenen Beschleunigungswert der Variablen strenght zuweisen.

strenght = get_acceleration_strength()  # Read the intensity detected by the accelerometer on the microbit board

⑤ Bedingungsanweisung: if()…else…

Wenn der erkannte Beschleunigungswert kleiner als 900 oder größer als 1200 ist, zeigt das OLED die Zeichenkette und den Beschleunigungswert an, die 5×5-LED-Matrix zeigt Img und der Lautsprecher gibt Alarmtöne von sich. Andernfalls zeigen das OLED und die 5×5-LED-Matrix nichts an und der Lautsprecher bleibt stumm.

if strenght < 900 or strenght > 1200:    # When the intensity detected by the accelerometer is less than 900 or greater than 1200
   clear_oled()   # clear OLED
   add_text(0, 0, 'Earthquake Warning')  # Display the character string in the corresponding position of OLED
   add_text(0, 2, 'Earthquake Level: ')  # Display the character string in the corresponding position of OLED
   add_text(0, 4, str(int(strenght)))  # Display the value of strength in the corresponding position of OLED
   music.play("C4:1")   # speaker plays C4 tone
   display.show(Image.GHOST) # LED matrix displays a ghost pattern
else: # or
   clear_oled()  # clear OLED
   display.clear() # Set the brightness of all LEDs to 0 (off)
   music.reset()  # no tone

4.3.5.7 Testergebnis

Img

Nach dem Anschließen und Einschalten per micro USB-Kabel verbinden Sie die externe Stromversorgung (6 AA-Batterien), um eine ausreichende Stromversorgung sicherzustellen, und klicken Sie „Flash“, um den Code auf das micro:bit-Board herunterzuladen.

Img

Nach dem Hochladen des Testcodes drücken Sie die Reset-Taste auf der Rückseite des micro:bit.

Img

Kippen oder schütteln Sie das micro:bit-Board leicht. Wenn der erkannte Beschleunigungswert kleiner als 900 oder größer als 1200 ist, zeigt das OLED die Zeichenkette und den Wert an, die 5×5-LED-Matrix zeigt Img, und der Lautsprecher gibt Alarmtöne von sich. Andernfalls zeigen das OLED und die 5×5-LED-Matrix nichts an und der Lautsprecher bleibt stumm.

Img

⚠️ Hinweis: Die Bausteine im Experiment sind nicht in diesem Kit enthalten.

(Tipp: Wenn kein Ergebnis sichtbar ist, drücken Sie bitte die Reset-Taste des micro:bit-Boards.)

Img