Aggiornamenti al sismografo costruito con Arduino
24 Ottobre 2019
La simbologia geologica in QGIS
13 Novembre 2019
Aggiornamenti al sismografo costruito con Arduino
24 Ottobre 2019
La simbologia geologica in QGIS
13 Novembre 2019
Show all

Come costruire un sismografo con Arduino: secondo update

In questo post verrà esposto un nuovo aggiornamento al nostro sismografo costruito con Arduino. Dopo aver aggiunto alla prima versione un buzzer e l’alimentazione esterna, ho aggiunto un modulo SD writer/reader in modo che le accelerazioni rilevate dal sensore MPU-6050 vengano registrate su un file csv.

Quindi possiamo trasferire questo file sul PC e visualizzare/analizzare i dati rilevati. Perciò ho creato un piccolo script Python (in realtà ancora da migliorare ed implementare), che verrà mostrato alla fine del post.

Gli accessori necessari

Ai fini di questo aggiornamento sono necessari i seguenti accessori:

  • Modulo writer/reader microSD;
  • Scheda microSD.
  • ESEMPI D'USO: per creare una stazione di misurazione con una scheda di memoria esterna o come lettore MP3. La Card Reader di kwmobile consente di leggere e scrivere dati su Arduino.
  • PICCOLO & PRATICO: il modulo misura 46 x 30 mm e grazie alla sua struttura compatta può essere inserito ovunque. Si presta pertanto a diversi tipi di progetti.
  • TENSIONE PURA: tensioni in ingresso idonee da 4.5V a 5.5V. Dai libero sfogo alla tua creatività!
  • COMPATIBILE: il modulo lettore è compatibile con diversi micro-controller e con Arduino o Raspberry Pi. La confezione comprende 2 Micro SD Card Reader.
  • ARTICOLI PER PROGETTI DI ELETTRONICA: la nostra ampia offerta comprende breadboard, display LCD, moduli, cavetti jumper per Arduino e Raspberry Pi e tanto altro ancora. Date un'occhiata!
  • Dai vita ai tuoi video in HD
  • Velocità UHS-I di Classe 10, fino a 80 MB/s in Lettura***
  • Diverse capacità fino a 256 GB**
  • Progettate e testate per resistere agli ambienti più ostili
modulo writer/reader scheda SD
Modulo writer/reader schede micro SD

I restanti componenti, per chi volesse costruire il proprio sismografo dopo aver letto questo post, sono:

  • Elegoo Advanced Starter Kit;
  • Accelerometro MPU-6050.
  • Chip principale: MPU-6050
  • Modalità di comunicazione: protocollo di comunicazione IIC standard
  • Convertitore AD 16 bit integrato con chip, uscita dati a 16 bit
  • Gamma di giroscopi: +/- 250 500 1000 2000 gradi / sec
  • Intervallo di accelerazione: ± 2 ± 4 ± 8 ± 16g
  • Impara a programmare con il kit di avviamento ELEGOO - Tutorial in Italiano gratuito incluso con più di 22 lezioni.
  • Il kit basato sulla piattaforma Arduino per iniziare l'apprendimento dell'elettronica per i principianti interessati.
  • modulo con connettori inclusi - Non c'è bisogno di saldature.
  • Kit di avviamento inclusi: 5V Relay, modulo di alimentazione, servomotore, batteria 9V con DC, scheda di espansione prototipo, e altro ancora.
  • Realizza i tuoi progetti con il kit di avviamento ELEGOO - Compatibile con i progetti IDE di Arduino.

Uno strumento molto importate è il saldatore a stagno che ci permetterà di saldare i pin del pettine all’accelerometro.

  • Set di saldatore per molte applicazioni – Strumenti necessari per progetti di saldatura, lavori fai da te, riparazioni di elettrodomestici elettrici, elettronici e domestici, saldatura di circuiti stampati, per fai da te nell'artigianato e nella creazione di gioielli e molte altre applicazioni
  • Componenti di alta qualità con precauzioni di sicurezza: saldatore di alta qualità, supporto e tutti gli altri accessori; saldatore con pulsante di temperatura regolabile (200 ℃ - 450 ℃), 5 punte intercambiabili, cappuccio resistente al calore e manico per la massima protezione
  • Accessori bonus: più di 15 articoli aggiuntivi come pompa dissaldante/aspirapolvere, tubo saldante in filo stagno, pinzette, mini spelafili, mini cacciavite, mini PVC, tubi termoretraibili e altro ancora, nonché un eBook scaricabile
  • Borsa resistente e comoda da trasportare: diversi strumenti sono forniti in una custodia in poliuretano resistente, facile da trasportare; mantiene tutti i componenti ordinati, è facile da trasportare, conservare e trasportare ovunque; tutto ciò che volete, in un pacchetto fai da te
  • Garanzia di soddisfazione – ogni acquisto è assicurato dalla garanzia di rimborso e sostituzione di 30 giorni del produttore e dall'assistenza clienti a vita per garantire l'elevata soddisfazione dei clienti

Collegamenti

I collegamenti da fare per collegare il modulo SD writer/reader sono:

  • VCC→5V
  • CS → 4
  • MOSI → 11
  • CLK → 13
  • MISO → 12
  • GND → GND

Per non perdere il filo, diamo di nuovo un’occhiata ai collegamenti degli altri componenti.

Accelerometro:

  • VCC→3.3V
  • GND → GND
  • SCL –> A5
  • SDA–>A4

Buzzer:

  • Polo positivo → 8
  • Polo negativo → GND

Da notare che rispetto al’aggiornamento precedente, il cavetto positivo del buzzer è stato spostato nel pin 8 della scheda.

schema-collegamenti-sismografo
Schema dei collegamenti
sismografo-arduino-aggiornato
Il nostro sismografo dopo questo aggiornamento

Il codice per la scheda Arduino

Il codice da caricare sulla scheda l’ho caricato su GitHub, e potete visionarlo e scaricarlo da questo link.

In pratica, grazie ad esso, si rilevano le accelerazioni sui tre assi (X,Y,Z) che vengono registrate sulla scheda miscro SD attraverso un file csv. Questo file poi verrà “dato in pasto” allo script Python che verrà mostrato nel prossimo paragrafo.

Il codice per l’elaborazione dei dati

#Code written by Antonio Nirta

import pandas as pd
import matplotlib.pyplot as plt
import math

#import csv file. "LOG(5).csv" is the name of file
db = pd.read_csv("LOG(5).csv")

#Variables with accelerations 
AcX= db.iloc[:,0]
AcY= db.iloc[:,1]
AcZ= db.iloc[:,2]

#Time settings
time = db.iloc[:,3]     #time in milliseconds, give by arduino

tempo = [i/1000 for i in time]      #time in seconds


# Create plots with pre-defined labels.
fig, ax = plt.subplots()

ax.plot(tempo, AcX, '-', color="red", linewidth= 0.8, label='AcX')
ax.plot(tempo, AcY, '-', color="blue", linewidth= 0.8, label='AcY')
ax.plot(tempo, AcZ, '-', color="green", linewidth= 0.8, label='AcZ')

legend = fig.legend(loc='upper right', shadow=True, fontsize='medium')

# Axis' name
plt.xlabel('Tempo (s)')        
plt.ylabel('Accelerazione')

# Put a nicer background color on the legend.
legend.get_frame().set_facecolor('white')


#Show graph
plt.show()

Il risultato che si ottiene è il grafico sottostante: in verde è rappresentata l’accelerazione lungo l’asse Z mentre in blu e in rosso rispettivamente l’accelerazione lungo Y e X.

Anche questo codice lo potete trovare su GitHub cliccando su questo link.

accelerogramma-python
Accelerogramma ricavato dallo script Python

Questo codice è da implementare inserendo nuove funzioni: tutti i consigli sono bene accetti! Se c’è qualche problema non esitate a contattarmi.

Chi si approccia per la prima volta a Python può chiedermi tutto, sia attraverso i commenti che via messaggio privato. Inoltre mi permetto di consigliare il seguente testo:

Antonio Nirta
Antonio Nirta
Geologo classe '86, laureato in Scienze e Tecnologie Geologiche all'Università di Pisa. Oltre a fare divulgazione geologica, svolgo la libera professione di geologo ed insegno Matematica e Scienze. Adoro la scienza, la tecnologia e la fotografia. Lettore appassionato dei romanzi fantasy e dei romanzi storici, ho un debole per la pizza e tifo Juve.

29 Comments

  1. Simone ha detto:

    Ciao ho seguito la tua guida ho montato tutto e caricato il codice sulla scheda quando apro la schermata plotter seriale per vedere le onde sismiche che rileva oltre ad acx acz e acy mi esce anche time con una linea che continua a salire all’infinito tanto che mi rimpicciolisce le altre 3 righe fino a non vederle quasi piu cosa posso fare?

    • Antonio Nirta ha detto:

      Ciao Simone. Si, con il nuovo codice il grafico che si vede sul plotter seriale di Arduino è come lo hai descritto tu. Questo aggiornamento è nato però con l’intento di rendere il sismografo indipendente dal PC, quindi visualizzare i dati (AcX, AcY, AcZ) registrati nella memoria SD in un secondo momento usando lo script Python presente in questo post. Usando questo script i grafici si vedono non appiattiti.
      Comunque appena ho tempo cerco di “correggere” lo script Arduino in modo da visualizzare le accelerazioni come si vedevano prima.

      Antonio

  2. Antonio ha detto:

    Bellissimo articolo.
    Molti spunti per una stazione meteo che ho realizzato e per il sismografo che realizzerò.

  3. Gianni ha detto:

    Thank you very much for sharing your knowledge!
    I would like to know if you updated the code for independent reading of the pc. I want to build this seismograph (I am from Chile. You will understand my motivation for it).

    • Antonio Nirta ha detto:

      Hi Gianni! The code is updated, so the seismograph is indipendent of the PC!
      If you need more information, write me at: info@intrageo.it!

      Best regards,
      Antonio

    • Giuseppe ha detto:

      Buongiorno non so come creare un messaggio ex novo e mi metto in coda a questo, complimenti per il progetto dopo diverse prove con sistemi “casalinghi”, ho montato il tutto (prima volta con arduino) e funziona tutto tranne la registrazione del file su microsd, sicuramente ho sbagliato qualche passaggio nella fase di inserimento dati (credo), io ho utilizzato arduino ide per caricare il file, in attesa di risolvere questo problema intanto mi sto stampando il supporto per alloggiare scheda e breadboard in modo solidale.

  4. Pulcino ha detto:

    Ciao!
    Ma dove lo poggi per tenerlo attivo senza che scatti appena passa qualcuno che fa vibrare mobile o pavimento etc???

  5. Lucio ha detto:

    Ciao ho realizzato la tua guida e tutto funziona bene, però vorrei gentilmente chiederti: come posso fare per non creare un append del file LOG.csv?
    Vorrei ad ogni riavvio crearne uno nuovo senza riscrivere o eliminare quello precedente.
    Grazie e complimenti per come spieghi le cose.

    • Antonio Nirta ha detto:

      Ciao!
      Innanzitutto voglio ringraziarti per i complimenti: cerco di fare della chiarezza uno dei punti portanti di IntraGeo.

      Hai dato una bella idea: in effetti è utile far scrivere al sismografo più files anziché sovrascrivere sempre lo stesso. Devo sviluppare questo aggiornamento!

      Infine voglio aggiornarti su una novità!

      Ho avviato una campagna di crowdfunding su PayPal rivolta a chi vuole dare una a mano alla crescita di IntraGeo.
      I fondi raccolti saranno usati per le spese di dominio (in pratica l’affitto per il server su cui gira il sito) e per comprare attrezzi e strumenti per rendere sempre migliori i servizi che IntraGeo offre.

      Le offerte sono libere (puoi offrire quanto vuoi!); anche un piccolo gesto può fare la differenza nel processo evolutivo di IntraGeo!

      Perchè fare una donazione libera a IntraGeo?

      Fare una donazione libera a IntraGeo aiuterà molto la divulgazione geologica, un gesto nobile in favore della scienza! Il donatore sarà ringraziato pubblicamente e avrà diritto alle anteprime dei progetti prodotti, a consulenze e tanto altro!

      Se ti va di aiutare a far crescere IntraGeo, ti invio il link paypal dove puoi fare la tua donazione:
      https://paypal.me/pools/c/8q7WTvOMLR 

      A presto,
      Antonio 

  6. fantomas76 ha detto:

    Sono interessato a cimentarmi nella costruzione del sismografo. Vorrei collocarlo su una parete interna del mio appartamento al fine di ricevere un avviso al verificarsi di un terremoto (di cui spesso non mi accorgo), in modo da essere più reattivo e avvicinarmi ai miei bambini che magari stanno dormendo in un’altra stanza. Mi chiedo, però, se è possibile impostare una regolazione che faccia intervenire il buzzer solo oltre certe soglie di movimento (e quali?), onde evitare che il dispositivo suoni anche quando, per esempio, si urta il muro o qualcuno usa l’ascensore dell’edificio e rendendolo utile solo per terremoti “seri”. Sono un totale inesperto di sismologia, quindi non so se la mia domanda ha pienamente senso, ma se lo avesse, allora si potrebbe forse implementare pure un display che riporti un valore di una delle scale di misurazione principali (Mercalli o Richter) determinato in base alla lettura della scossa tracciata. Grazie in anticipo per la risposta.

  7. fantomas76 ha detto:

    …e ci vorrebbe anche un interruttore fisico ON/OFF per spegnere il sismografo quando non serve (per esempio se si esce di casa) e preservare la carica della batteria.

  8. fantomas76 ha detto:

    Ciao e complimenti per il tuo lavoro. Vorrei cimentarmi anch’io, da totale inesperto di Arduino, elettronica, saldature e sismologia, nella realizzazione del sismografo. Immagino di collocarlo su una parete in mattoni nel mio appartamento per accorgermi di un eventuale terremoto (di solito non li sento…) e avvicinarmi prontamente ai miei bambini. Ora, mi chiedo se si possa impostare una soglia d’intervento che possa corrispondere ad un evento sismico oltre un determinato grado della scala Mercalli o Richter, in modo da non avere alcun avviso se, per esempio, qualcuno nel palazzo dovesse prendere l’ascensore o in caso sbatta forte la porta di una stanza. Se la mia domanda ha senso, quale potrebbe essere la soglia e come impostarla? Sarebbe in caso interessante indicare poi su un display a cifre digitali quale grado della scala di riferimento sia stato raggiunto, in modo da avere una lettura immediata senza consultazione tramite PC. Inoltre, sarebbe utile poter spegnere il sismografo tramite un interruttore esterno, al fine di preservare la carica della batteria in caso di assenza da casa. Grazie in anticipo per la disponibilità e le informazioni che vorrai darmi.

    • Antonio Nirta ha detto:

      Ciao
      innanzitutto grazie per i complimenti; cerco di fare sempre del mio meglio. L’interruttore e il monitor si possono montare tranquillamente. Per quanto riguarda le soglie di intervento è un po più complicato, bisognerebbe studiare un po anche dal punto di vista informatico.

      Se ti serve aiuto dal punto nel montare il tuo sismografo puoi scrivermi via mail a: info@intrageo.it

      Infine colgo l’occasione per segnalarti la campagna di crowdfunding che ho creato per supportare IntraGeo. Il tutto avviene su PayPal tramite offerta libera.
      I soldi raccolti saranno spesi per migliorare il sito e per comprare strumenti utili alla creazione di nuovi contenuti (video, foto, post e materiale per esperimenti) da divulgare.
      Dai un’occhiata a questa pagina: https://www.intrageo.it/supporta-intrageo/

  9. Flavio Moretto ha detto:

    Salve Dottor Nitra ,

    complimenti vivissimi per il suo sito e il suo splendido lavoro. Anche io vorrei cimentarmi con mio figlio nella costruzione del sismografo.
    Ho già ordinato quanto è necessario.
    Se mi permette , vorrei farle solo qualche domanda in merito al Modulo writer/reader.
    La SD che viene inserita fa una registrazione in continuo oppure registra soltanto in caso di terremoto?…una memory da 32gb è sufficiente?…per quanti giorni regista?…conviene acquistare un card più capiente?
    Grazie in anticipo per la risposta.

    • Antonio Nirta ha detto:

      Ciao Flavio. Grazie per i complimenti: è molto bello sapere il mio impegno viene apprezzato.
      Il segnale viene registrato in continuo. Beh 32 gb sono relativamente sufficenti, ma di preciso non so entro quanti giorni la memoria viene occupata.

      Se ci sono altri dubbi sono a tua disposizione; puoi scrivermi ( dandomi anche del tu) anche a: info@intrageo.it

  10. Giuseppe ha detto:

    Salve mi può aiutare vorrei inserire un display ma utilizzando arduino mega ma non so come fare. Se mi può scrivere il codice per inserirlo.io ho trovato questo su internet ma manca il cicalino.
    #include // Libreria UTFT Display TFT ILI9486
    #include
    #include // Libreria accelerometro ADXL345
    #include // Libreria SD Card
    #include

    ADXL345 accel(ADXL345_ALT); // Indirizzo Alternativo con SD0 in LOW

    extern uint8_t SmallFont[];
    UTFT myGLCD(CTE40,38,39,40,41); // Identifica il tipo di display TFT

    const int CS_PIN = 53; // Pin CS di Arduino Mega
    float x,y,z;

    String dataString =””; // Variabile stringa per caricare i dati
    File SDData;

    if (!SD.begin(CS_PIN)) {
    Serial.println(“SD CARD non presente”);
    while (1);
    }
    Serial.println(“SD Card inizializzata”);
    }

    void MemoryCard(){
    dataString = String(x) + “;” + String(y) + “;” + String(z); // Crea una stringa contenente i valori X,Y e Z. Con ; crea nuove colonne nel file CSV
    SDData = SD.open(“dati.csv”, FILE_WRITE); // Crea il file CSV
    if (SDData){
    SDData.println(dataString); // Scrive le stringhe nel file
    SDData.close(); // Chiude il file
    }
    else{
    Serial.println(“Errore di scrittura sul file!”);
    }
    }

    void MemoryCard(){
    dataString = String(x) + “;” + String(y) + “;” + String(z); // Crea una stringa contenente i valori X,Y e Z. Con ; crea nuove colonne nel file CSV
    SDData = SD.open(“dati.csv”, FILE_WRITE); // Crea il file CSV
    if (SDData){
    SDData.println(dataString); // Scrive le stringhe nel file
    SDData.close(); // Chiude il file
    }
    else{
    Serial.println(“Errore di scrittura sul file!”);
    }
    }

    Grazie in anticipo Giuseppe

  11. Nicola Brandini ha detto:

    Salve,
    complimenti per il blog e per il progetto del sismografo.
    ho già usato il tuo il tuo codice per assemblare il sismografo con ottimi risultati ma adesso facendo l’upgrade con il modulo per la scrittura su sd non riesco a far scrivere nessun file sulla scheda. l’unica cosa che ho di diverso dal tuo progetto è il modulo per la sd ovvero al pin 13 dove tu hai CLK nel mio cè scritto SCK .
    Ammesso che riesca a far scrivere il file come faccio a visualizzarlo con python?
    si puo’ visualizzare con altri strumenti e o programmi?
    cè una scala di riferimento per capire l’intensità del movimento?
    grazie

    • Antonio Nirta ha detto:

      Hai controllato tutti i collegamenti?
      Per visualizzare in python devi prima installarti l’interprete sul pc e poi far girare lo script che c’è nell’articolo!
      Si può visualizzare anche con altro, ma andrebbe implementato il codice.
      Per altre info scrivimi pure a info@intrageo.it

  12. Giorgio Marti ha detto:

    ciao, complimenti bell’articolo e bel progetto! hai pensato, per caso, ad una visualizzazione via WEB dei grafici? quindi poter installare il sismografo in cantina e visualizzare il tutto si browser o salvare il contenuto CSV per poterlo elaborare ed aprire da un DB?
    grazie e complimenti!

    • Antonio Nirta ha detto:

      Ottima idea! Si può implementare!

    • lorenzo ha detto:

      Sono interessato seguo, anche io vorrei poter mettere il sismografo fisso su un pilastro di cemento delle fondazioni in cantina e portare i dati nel mio studio al Pc e salvarli, e trasmettere via web in diretta la schermata del sismografo, ma non ho le conoscenze tecniche per farlo.

  13. Fabrizio d'Agostino ha detto:

    Salve, innanzitutto desidero ringraziarla per aver dato l’opportunità anche ad un neofita come me di realizzare un progetto Arduino. Le istruzioni sono state estremamente chiare ed efficaci in ogni passaggio. Vorrei avere però riscontri da voi sulla durata del funzionamento dei vostri sismografi in alimentazione a pila. Il mio dopo un’ora o due smette di funzionare.

    • Antonio Nirta ha detto:

      Grazie a te per il commento e per il feedback sulla durata della batteria. Aspettiamo se c’è qualcuno con lo stesso problema, magari ha risolto. OK?

  14. Francesco ha detto:

    puoi impostare un mini video dove mostri tutti i collegamenti?
    Il modulo per la sd nel pin dove tu hai CLK nel mio c è scritto SCK è “uguale” o ha bisogna di qualche modifica?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *