4.3.5 Aardbevingsdetectie-alarm

4.3.5.1 Overzicht

Img

Een aardbevingsdetectie-alarm is een apparaat dat een hoorbaar en zichtbaar alarm activeert door aardbewingsgolven of mechanische trillingen te detecteren. Het wordt voornamelijk gebruikt voor vroegtijdige waarschuwing bij aardbevingsrisico’s.

In dit project zal het OLED-display in real-time de waarden tonen die door de micro:bit versnellingsmeter worden gedetecteerd. Bij kanteling of lichte trillingen klinkt de luidspreker en toont de 5×5LED-matrix een alarmpatroon als waarschuwing en herinnering.

Deze apparaten (specifiek verwijzend naar aardbeving-voorwaarschuwingsontvangstterminals) worden veel gebruikt in scholen, gezinnen, openbare plaatsen en gebieden voor monitoring van geologische rampen. Hun kernwaarde ligt in “de strijd tegen de klok”.

Img

4.3.5.2 Componentkennis

Img

Microbit Accelerometer

Img

De LSM303AGR is een ultra-low power high-performance accelerometer geïntegreerd in de micro:bit board, en wordt voornamelijk gebruikt voor driedimensionale (X-as, Y-as, Z-as) bewegingsdetectie. Het integreert een digitale lineaire versnellingsmeter en magnetometer om precieze attitude-metingen te realiseren. De kernfuncties van deze sensor omvatten:

Communicatie-interface: Het ondersteunt I2C serial bus interface (compatibel met standard, fast mode, fast mode plus en high-speed mode, met maximale snelheden tot 100kHz, 400kHz, 1MHz en 3.4MHz) en SPI serial standaardinterface, wat het verbinden met microcontrollers of andere randapparatuur vergemakkelijkt.

Resolutie: Het kan geconfigureerd worden als 8-bit, 10-bit of 12-bit uitvoer, afhankelijk van de werkmodus (bijvoorbeeld: 8-bit in low-power modus en 12-bit in high-resolution modus).

Bereikinstelling: Het acceleratiebereik kan geprogrammeerd worden als ±2g, ±4g, ±8g of ±16g, wat voldoet aan de gevoeligheidseisen van verschillende toepassingsscenario’s.

De X-, Y- en Z-richtingen die overeenkomen met de versnellingsmeter zijn hieronder weergegeven:

Img

Img

4.3.5.3 Benodigde componenten

Img

Img

Img

micro:bit V2 hoofdboard ×1

micro:bit shield ×1

OLED-display ×1

Img

Img

Img

micro USB-kabel ×1

4-pins draad ×1

batterijhouder ×1

Img

AA-batterijen(zelf-te-voorzien) ×6

4.3.5.4 Aansluitschema

⚠️ Let bij het bedraden op de kleur van de draden.

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 Codeflow

Img

4.3.5.6 Testcode

⚠️ Tip 1: Voordat u de code naar de micro:bit board downloadt, importeert u alstublieft het bibliotheekbestand “oled_ssd1306.py” verwijzend naar Import Library on MU” .

Img

⚠️ Tip 2: De drempelwaarden 900 en 1200 in de if()-voorwaarde kunnen worden aangepast aan de werkelijke situatie.

Volledige 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
'''
# importeer gerelateerde bibliotheken
from microbit import *
from oled_ssd1306 import *
import music

# initialiseer en wis 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()  # Lees de intensiteit gedetecteerd door de versnellingsmeter op het micro:bit-board
    if strenght < 900 or strenght > 1200:    # Wanneer de intensiteit gedetecteerd door de versnellingsmeter minder is dan 900 of groter dan 1200
       clear_oled()   # wis 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")   # luidspreker speelt C4-toon
       display.show(Image.GHOST) # LED-matrix toont een spookpatroon
    else: # or
       clear_oled()  # wis OLED
       display.clear() # Zet de helderheid van alle LEDs op 0 (uit)
       music.reset()  # geen toon
    sleep(500)

Img

Korte uitleg:

① Importeer libraries van microbit, oled_ssd1306 en music.

from microbit import *
from oled_ssd1306 import *
import music

② Initialiseer OLED-pixels, wis het OLED.

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

③ Definieer de subfunctie voor de versnellingwaarde die door de micro:bit-versnellingsmeter wordt gedetecteerd.

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

④ Wijs de uitgelezen versnellingswaarde toe aan de variabele strength.

strenght = get_acceleration_strength()  # Lees de intensiteit gedetecteerd door de versnellingsmeter op het micro:bit-board

⑤ Beslissingsstructuur: if()…else…

Wanneer de gedetecteerde versnellingwaarde minder is dan 900 of groter dan 1200, toont het OLED de tekenreeks en de versnellingwaarde, en de 5×5LED-matrix toont Img, en de luidspreker geeft alarm. Anders tonen het OLED en de 5×5LED-matrix niets en klinkt de luidspreker niet.

if strenght < 900 or strenght > 1200:    # Wanneer de intensiteit gedetecteerd door de versnellingsmeter minder is dan 900 of groter dan 1200
   clear_oled()   # wis 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")   # luidspreker speelt C4-toon
   display.show(Image.GHOST) # LED-matrix toont een spookpatroon
else: # or
   clear_oled()  # wis OLED
   display.clear() # Zet de helderheid van alle LEDs op 0 (uit)
   music.reset()  # geen toon

4.3.5.7 Testresultaat

Img

Na het aansluiten en inschakelen via de micro USB-kabel, sluit u de externe voeding aan (6 AA-batterijen) om voldoende stroomvoorziening te garanderen, en klik op “Flash” om de code naar de micro:bit board te downloaden.

Img

Na het uploaden van de testcode drukt u op de resetknop aan de achterkant van de micro:bit.

Img

Kantel of schud de micro:bit board lichtjes. Wanneer de gedetecteerde versnellingwaarde minder is dan 900 of groter dan 1200, toont het OLED de tekst en de waarde, en de 5×5 LED-matrix toont Img, en de luidspreker geeft alarm. Anders tonen het OLED en de 5×5 LED-matrix niets en klinkt de luidspreker niet.

Img

⚠️ Opmerking: De bouwstenen in het experiment zijn niet inbegrepen in deze kit.

(Tip: Als er geen resultaat wordt waargenomen, druk dan op de resetknop van het micro:bit board.)

Img