### 4.3.5 Allarme per il rilevamento dei terremoti #### 4.3.5.1 Panoramica ![Img](./media/top1.png) 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](./media/bottom1.png) #### 4.3.5.2 Conoscenze sui componenti ![Img](./media/2top.png) **Accelerometro del micro:bit** ![Img](./media/j701.png) 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](./media/j701-1.png) ![Img](./media/2bottom.png) #### 4.3.5.3 Componenti richiesti | ![Img](./media/microbitV2.png)|![Img](./media/ExpansionBoard.png)|![Img](./media/OLED.png) | | :--: | :--: | :--: | | scheda principale micro:bit V2 ×1 | shield per micro:bit ×1 | display OLED ×1 | |![Img](./media/usb.png) |![Img](./media/4pin.png)|![Img](./media/batterycase.png)| | cavo micro USB ×1 | cavo a 4 pin ×1 | portabatterie ×1 | |![Img](./media/AAbattery.png)| | | |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](./media/couj5.png) #### 4.3.5.5 Flusso del codice ![Img](./media/flow-chart-05.png) #### 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](https://docs.keyestudio.com/projects/KS4050/en/latest/docs/MicroPython/MU_development_environment.html#import-library-on-mu)” . ![Img](./media/WPSA1.png) ⚠️ **Suggerimento 2: le soglie 900 e 1200 nella condizione if() possono essere modificate in base alla situazione effettiva.** **Codice completo:** ```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 ''' # 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](./media/line1.png) **Breve spiegazione:** ① Importare le librerie microbit, oled_ssd1306 e music. ```Python # 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. ```Python # 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. ```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) """ # 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. ```Python 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](./media/ab4.png) e l'altoparlante suona. Altrimenti, l'OLED e la matrice LED 5×5 non mostrano nulla e l'altoparlante non emette suono. ```Python 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](./media/4top.png) 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](./media/A127.png) Dopo aver caricato il codice di test, premere il pulsante di reset sul retro della scheda micro:bit. ![Img](./media/A455.png) 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](./media/ab4.png) e l'altoparlante suona. Altrimenti, l'OLED e la matrice LED 5×5 non mostrano nulla e l'altoparlante non emette suono. ![Img](./media/dongtu-5.gif) ⚠️ **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](./media/4bottom.png)