4.3.5 Allarme per il rilevamento dei terremoti

4.3.5.1 Panoramica

Img

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».

Img

4.3.5.2 Conoscenze sui componenti

Img

Accelerometro del micro:bit

Img

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:

Img

Img

4.3.5.3 Componenti richiesti

Img

Img

Img

scheda principale micro:bit V2 ×1

shield per micro:bit ×1

display OLED ×1

Img

Img

Img

cavo micro USB ×1

cavo a 4 pin ×1

portabatterie ×1

Img

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

Img

4.3.5.5 Flusso del codice

Img

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 aImportare la libreria su MU” .

Img

⚠️ 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)

Img

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 Img 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

Img

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.

Img

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

Img

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 Img e l’altoparlante suona. Altrimenti, l’OLED e la matrice LED 5×5 non mostrano nulla e l’altoparlante non emette suono.

Img

⚠️ 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.)

Img