### 4.3.5 Erdbeben-Erkennungsalarm #### 4.3.5.1 Überblick ![Img](./media/top1.png) 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](./media/bottom1.png) #### 4.3.5.2 Komponentenkunde ![Img](./media/2top.png) **micro:bit-Beschleunigungssensor** ![Img](./media/j701.png) 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](./media/j701-1.png) ![Img](./media/2bottom.png) #### 4.3.5.3 Benötigte Komponenten | ![Img](./media/microbitV2.png)|![Img](./media/ExpansionBoard.png)|![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 Hauptplatine ×1 | micro:bit Shield ×1 | OLED-Display ×1 | |![Img](./media/usb.png) |![Img](./media/4pin.png)|![Img](./media/batterycase.png)| | micro USB-Kabel ×1 | 4-poliges Kabel ×1 | Batteriehalter ×1 | |![Img](./media/AAbattery.png)| | | |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](./media/couj5.png) #### 4.3.5.5 Codeablauf ![Img](./media/flow-chart-05.png) #### 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](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Tipp 2: Die Schwellenwerte 900 und 1200 in der if()-Bedingung können entsprechend der tatsächlichen Situation geändert werden.** **Vollständiger Code:** ```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 ''' # 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](./media/line1.png) **Kurze Erklärung:** ① Importieren der Bibliotheken microbit, oled_ssd1306 und music. ```Python from microbit import * from oled_ssd1306 import * import music ``` ② OLED initialisieren und löschen. ```Python initialize() # initialize oled clear_oled() # clear oled ``` ③ Definieren der Unterfunktion zur Ermittlung des Beschleunigungswertes, der vom micro:bit-Beschleunigungssensor erkannt wird. ```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) """ # 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. ```Python 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](./media/ab4.png) 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. ```Python 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](./media/4top.png) 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](./media/A127.png) Nach dem Hochladen des Testcodes drücken Sie die Reset-Taste auf der Rückseite des micro:bit. ![Img](./media/A455.png) 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](./media/ab4.png), 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](./media/dongtu-5.gif) ⚠️ **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](./media/4bottom.png)