### 4.3.5 Aardbevingsdetectie-alarm #### 4.3.5.1 Overzicht ![Img](./media/top1.png) 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](./media/bottom1.png) #### 4.3.5.2 Componentkennis ![Img](./media/2top.png) **Microbit Accelerometer** ![Img](./media/j701.png) 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](./media/j701-1.png) ![Img](./media/2bottom.png) #### 4.3.5.3 Benodigde componenten | ![Img](./media/microbitV2.png)|![Img](./media/ExpansionBoard.png)|![Img](./media/OLED.png) | | :--: | :--: | :--: | | micro:bit V2 hoofdboard ×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-pins draad ×1 | batterijhouder ×1 | |![Img](./media/AAbattery.png)| | | |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](./media/couj5.png) #### 4.3.5.5 Codeflow ![Img](./media/flow-chart-05.png) #### 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](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Tip 2: De drempelwaarden 900 en 1200 in de if()-voorwaarde kunnen worden aangepast aan de werkelijke situatie.** **Volledige 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 ''' # 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](./media/line1.png) **Korte uitleg:** ① Importeer libraries van microbit, oled_ssd1306 en music. ```Python from microbit import * from oled_ssd1306 import * import music ``` ② Initialiseer OLED-pixels, wis het OLED. ```Python initialize() # initialize oled clear_oled() # clear oled ``` ③ Definieer de subfunctie voor de versnellingwaarde die door de micro:bit-versnellingsmeter wordt gedetecteerd. ```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 ``` ④ Wijs de uitgelezen versnellingswaarde toe aan de variabele strength. ```Python 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](./media/ab4.png), en de luidspreker geeft alarm. Anders tonen het OLED en de 5×5LED-matrix niets en klinkt de luidspreker niet. ```Python 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](./media/4top.png) 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](./media/A127.png) Na het uploaden van de testcode drukt u op de resetknop aan de achterkant van de micro:bit. ![Img](./media/A455.png) 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](./media/ab4.png), en de luidspreker geeft alarm. Anders tonen het OLED en de 5×5 LED-matrix niets en klinkt de luidspreker niet. ![Img](./media/dongtu-5.gif) ⚠️ **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](./media/4bottom.png)