4.3.5 Allarme per il rilevamento dei terremoti
4.3.5.1 Panoramica

Un allarme per il rilevamento dei terremoti è un dispositivo che attiva un allarme acustico e visivo rilevando onde sismiche o vibrazioni meccaniche. Viene utilizzato principalmente per la segnalazione precoce dei rischi sismici.
In questo progetto, il display OLED mostrerà in tempo reale i valori rilevati dall’accelerometro di micro:bit. Quando viene rilevata un’inclinazione o una lieve scossa, l’altoparlante suonerà e la matrice LED 5×5 mostrerà un pattern di allarme per avvertire e richiamare l’attenzione.
Questi dispositivi (riferendosi specificamente ai terminali riceventi di allerta precoce per i terremoti) sono ampiamente utilizzati nelle scuole, nelle famiglie, nei luoghi pubblici e nelle aree di monitoraggio dei disastri geologici. Il loro valore centrale risiede nel «correre contro il tempo».

4.3.5.2 Conoscenze sui componenti

Accelerometro del micro:bit

L’SLM303AGR è un accelerometro ad alte prestazioni e ultra-basso consumo integrato nella scheda micro:bit, ed è utilizzato principalmente per il rilevamento del movimento tridimensionale (asse X, Y, Z). Integra un accelerometro lineare digitale e un magnetometro per ottenere una misurazione precisa dell’assetto. Le caratteristiche principali di questo sensore includono:
Interfaccia di comunicazione: supporta l’interfaccia bus seriale I2C (compatibile con standard, fast mode, fast mode plus e high-speed mode, con velocità massime fino a 100kHz, 400kHz, 1MHz e 3.4MHz) e l’interfaccia seriale standard SPI, facilitando la connessione con microcontrollori o altre periferiche.
Risoluzione: può essere configurato con uscite a 8 bit, 10 bit o 12 bit, a seconda della modalità di funzionamento (ad esempio: 8 bit in modalità a basso consumo e 12 bit in modalità ad alta risoluzione).
Impostazione dell’intervallo: l’intervallo di accelerazione può essere programmato in ±2g, ±4g, ±8g o ±16g, soddisfacendo i requisiti di sensibilità di diversi scenari applicativi.
Le direzioni X, Y e Z corrispondenti all’accelerometro sono mostrate di seguito:


4.3.5.3 Componenti richiesti
|
|
|
|---|---|---|
scheda principale micro:bit V2 ×1 |
shield per micro:bit ×1 |
display OLED ×1 |
|
|
|
cavo micro USB ×1 |
cavo a 4 pin ×1 |
portabatterie ×1 |
|
||
Batterie AA (autopreparate) ×6 |
4.3.5.4 Schema di collegamento
⚠️ Quando si eseguono i collegamenti, fare attenzione al colore dei fili.
Display OLED |
colore filo |
pin shield micro:bit |
pin scheda micro:bit |
|---|---|---|---|
GND |
nero |
G |
G |
VCC |
rosso |
V2 |
V |
SDA |
blu |
20 |
P20 |
SCL |
verde |
19 |
P19 |

4.3.5.5 Flusso del codice

4.3.5.6 Codice di test
⚠️ Suggerimento 1: Prima di scaricare il codice sulla scheda micro:bit, importare il file di libreria “oled_ssd1306.py” facendo riferimento a “Importare la libreria su MU” .

⚠️ Suggerimento 2: le soglie 900 e 1200 nella condizione if() possono essere modificate in base alla situazione effettiva.
Codice completo:
'''
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
'''
# importa le librerie correlate
from microbit import *
from oled_ssd1306 import *
import music
# inizializza e pulisci l'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)
"""
# Legge i valori di accelerazione sui tre assi
x = accelerometer.get_x()
y = accelerometer.get_y()
z = accelerometer.get_z()
# Calcola l'accelerazione risultante (modulo del vettore)
strength = (x**2 + y**2 + z**2) ** 0.5
return strength
while True:
strenght = get_acceleration_strength() # Legge l'intensità rilevata dall'accelerometro sulla scheda micro:bit
if strenght < 900 or strenght > 1200: # Quando l'intensità rilevata dall'accelerometro è inferiore a 900 o superiore a 1200
clear_oled() # pulisce l'OLED
add_text(0, 0, 'Earthquake Warning') # Visualizza la stringa nella posizione corrispondente dell'OLED
add_text(0, 2, 'Earthquake Level: ') # Visualizza la stringa nella posizione corrispondente dell'OLED
add_text(0, 4, str(int(strenght))) # Visualizza il valore di strength nella posizione corrispondente dell'OLED
music.play("C4:1") # l'altoparlante suona la nota C4
display.show(Image.GHOST) # la matrice LED mostra un pattern a forma di fantasma
else: # altrimenti
clear_oled() # pulisce l'OLED
display.clear() # Imposta la luminosità di tutti i LED a 0 (spento)
music.reset() # nessun suono
sleep(500)

Breve spiegazione:
① Importare le librerie microbit, oled_ssd1306 e music.
# importa le librerie microbit, oled_ssd1306 e music.
from microbit import *
from oled_ssd1306 import *
import music
② Inizializzare i pixel dell’OLED, cancellare l’OLED.
# inizializza l'OLED
initialize() # initialize oled
# pulisce l'OLED
clear_oled() # clear oled
③ Definire la sottofunzione per il valore di accelerazione rilevato dall’accelerometro del micro:bit.
def get_acceleration_strength():
"""
Read the combined acceleration intensity of the accelerometer
Return the magnitude of the total acceleration rate (unit: mg, milli-g)
"""
# Legge i valori di accelerazione sui tre assi
x = accelerometer.get_x()
y = accelerometer.get_y()
z = accelerometer.get_z()
# Calcola l'accelerazione risultante (modulo del vettore)
strength = (x**2 + y**2 + z**2) ** 0.5
return strength
④ Assegnare il valore di accelerazione letto alla variabile strength.
strenght = get_acceleration_strength() # Legge l'intensità rilevata dall'accelerometro sulla scheda micro:bit
⑤ Istruzione di controllo: if()…else…
Quando il valore di accelerazione rilevato è inferiore a 900 o superiore a 1200, l’OLED visualizza la stringa e il valore di accelerazione, la matrice LED 5×5 mostra
e l’altoparlante suona. Altrimenti, l’OLED e la matrice LED 5×5 non mostrano nulla e l’altoparlante non emette suono.
if strenght < 900 or strenght > 1200: # Quando l'intensità rilevata dall'accelerometro è inferiore a 900 o superiore a 1200
clear_oled() # pulisce l'OLED
add_text(0, 0, 'Earthquake Warning') # Visualizza la stringa nella posizione corrispondente dell'OLED
add_text(0, 2, 'Earthquake Level: ') # Visualizza la stringa nella posizione corrispondente dell'OLED
add_text(0, 4, str(int(strenght))) # Visualizza il valore di strength nella posizione corrispondente dell'OLED
music.play("C4:1") # l'altoparlante suona la nota C4
display.show(Image.GHOST) # la matrice LED mostra un pattern a forma di fantasma
else: # altrimenti
clear_oled() # pulisce l'OLED
display.clear() # Imposta la luminosità di tutti i LED a 0 (spento)
music.reset() # nessun suono
4.3.5.7 Risultato del test

Dopo aver eseguito i collegamenti e aver alimentato tramite il cavo micro USB, collegare l’alimentazione esterna (6 batterie AA) per garantire una fornitura di energia sufficiente, e cliccare “Flash” per scaricare il codice sulla scheda micro:bit.

Dopo aver caricato il codice di test, premere il pulsante di reset sul retro della scheda micro:bit.

Inclina o scuoti leggermente la scheda micro:bit. Quando il valore di accelerazione rilevato è inferiore a 900 o superiore a 1200, l’OLED visualizza la stringa e il valore, la matrice LED 5×5 mostra
e l’altoparlante suona. Altrimenti, l’OLED e la matrice LED 5×5 non mostrano nulla e l’altoparlante non emette suono.

⚠️ Nota: i building blocks nell’esperimento non sono inclusi in questo kit.
(Suggerimento: Se non si osserva alcun risultato, premere il pulsante di reset della scheda micro:bit.)







