Go Down

Topic: rilevare terremoti con arduino (Read 7 times) previous topic - next topic

eischifa

Ciao
a dirti la verità i prototipi che ho costruito fino ad ora si basano tutti sull'utilizzo di geofoni e non di accelerometri, questo perchè gli accelerometri "da sismica" con prestazioni analoghe ad un geofono costano molto di più, un esempio un geofono standard da 10 Hz costa circa 18 euro, per un accelerometro con stesse performance siamo sull'ordine dei 200-300 euro.
Volendo "adattare" un accelerometro a basso costo io utilizzerei MA7361, perchè ha un'uscita analogica e fondo scala settabile a 1,5 o 6 g, ciò lo rende facilmente intercambiabile con un geofono. Puoi inoltre provare ad amplificare il segnale in uscita di un fattore 10 per renderlo un pò più sensibile, oppure modificare l'aref di arduino (3,3 V). Settandolo a 1,5 g (default) hai un uscita di 800 mV/g.
Sul fatto se sia meglio l'uno o l'altro non so che dirti, a me risulta un pò più complicato lavorare con sensori ad uscita digitale, ma sembra dalle specifiche che la sensibiltà sia 70 count/g...inferiore(?)

Per Lesto:
E' da circa due anni che assieme ad un gruppo di circa 200 persone, per lo più geologi, geochimici e geofisici progettiamo strumenti per l'acquisizione dell'attività sismica basati su Arduino.
Durante gli anni abbiamo fatto diverse prove per capire come settare l'Arduino e quale sktch caricare.
La nostra priorità è di acquisire su seriale alla massima velocità possibile, ciò ti permette di registrare l'onda sismica ad una più alta frequenza di campionamento...un pò come un brano mp3 campionato a 96 kb/s ed una campionato a 192 kb/s, il secondo ha una qualità migliore, i terremoti sono delle onde di volume...
Ebbene, tra i vari skech usati (Impostando la velocità della seriale a 115200) abbiamo fatto un test tra le due funzioni
serial.print
serial.println
acquisendo per lo stesso intervallo di tempo, i dati scritti su seriale (frequenza di campionamento) erano meno.
Anche il fatto di scrivere la virgola come in questo caso, per dare "ordine" ai dati ti rallenta la frequenza di campionamento,
serial.print (A0);
serial.print(","),
serial.println (A1);
anche se, alla fine, è stata scelta come opzione per semplificare la scrittura del software di acquisizione.
Sul trimmer, esso ha la funzione solo di variare il guadagno dell'amplificatore, lo puoi sostituire con una resistenza di precisione...ma in questo caso hai dei valori fissi, mentre col trimmer puoi regolare il gain e fermarti non appena riesci ad osservare le prime vibrazioni (microtremori), ottenendo una sensibilità adatta al posto in cui collocherai il sensore, evitando di acquisire segnali antropici di base, una sorta di filtro...
Infine, il più semplicemente...ha senso quello che dici, ma la complessità di cui parlavo è prodotta da questo  (ti riporto la spiegazione tratta da un testo di sismologia...)
....."effettuare la taratura avremo bisogno di alcuni parametri tipici del sensore che utilizzeremo (forniti dal produttore), oltre ad eventuali filtri che utilizzeremo nel nostro circuito, fattore di amplificazione etc. Consideriamo il sismografo al pari di un sistema lineare dove l'input e' il movimento del suolo che determina l'ampiezza della traccia sul sismogramma che possiamo esprimere in numero di count. Per un dato strumento la funzione di risposta all'ampiezza della frequenza  puo essere calcolata con l'equazione
Z (?) = U (?) Ad (?)
In cui  U( ?)  lo spostamento del suolo (ground displacement) mentre Z( ?) puo' rappresentare il numero di count o i mV e Ad (?) e' la risposta d'ampiezza della strumento. Ad(?) e' il risultato dell'effetto combinato di tutti gli elementi del sismografo, sensore, amplificatore, filtri. Ecco un esempio su come calcolarlo:
supponiamo che il nostro sismografo abbia queste caratteristiche:
(Geofono alias sismometro) una  f0 = 1 hz; G= 200 Vg-1  mentre (Arduino alias sismografo) usa  Amplificatore= gain 100 - Un filtro a 25 hz  Un digitalizzatore con gain di 10 5 /V
Il gain del sistema espresso in termini di velocita', at 30 Hz puo' essere calcolato in questo modo:
200 V /ms?1 (sensore ) × 100 V/V (amplifier ) × 0.2 V/V (filter ) × 105 Count /V (digitizer ) = 4 × 108 Count ms?1
Il gain del sensore e' 200 V/ms ?1 , e il guadagno del filtro e'  ?14 db = 10?14 /20 = 0.2  a 30 Hz 
Per convertire il gain in spiazamento dobbiamo moltiplicare  ? = 2?f
4 × 10 8 Count /ms?1 × 2  ? × 30 s ?1 = 7.5 × 10 10 count/m = 75 count /nm.
Tutti questi noiosissimi calcoli servono a definire il rapporto tra count e spostamento, espresso in nm (nanometri, 10-6 m).
In modo simile qualora utilizzassimo l'accelerometro o se volessimo esprimere il valore in accelerazione dovremmo dividere per  ? = 2?f  At 2 Hz, t he seismometer would have a gain of 200V/ms?1
Applicando le considerazioni precedenti al nostro sensore, con queste caratteristiche:
f0 = 4,5  hz; G= 28,8  V g-1; Amplificatore= gain 100; Un filtro a 25 hz; Arduino con gain di 204,8 count/V
28,8  V /ms?1 (sensore ) × 100 V/V (amplificatore ) × 0.2 V/V (filtro ) × 204,8 Count /V (digitizer ) = 117965 count ms?1
117965 Count /ms?1 × 2  ? × 30 s ?1 = 7.5 × 10 10 count/m = 3,5 count /nm.

A proposito c'è qualcuno che ha voglia di aiutarmi a sbrogliare un circuito? io non ne sono capace!!







lesto

un sensore i2c (o meglio ancora SPI) ha il vantaggio di avere un ADC separato in grado di fare moooolte più letture dell'ADC arduino: e lì sì che il problema diventa la seriale.

Quanto ti parlo di seriale, fai attenzione che parlo di arduino IDE 1.0; infatti le versioni precedenti BLOCCAVANO il codice finchè la scrittura non era completa; ora invece le cose avvengono "in parallelo", quindi mentre stai richiedendo una lettura all'ADC, finisci di scrivere i dati mancanti.

considerando la velocità dell'ADC arduino e che che devi stampare solo 7 byte (2 * numero + 1 di fine o inizio messaggio) non dovresti mai arrivare a "saturazione" usando un alto baud-rate.

Poi in caso si può usare la SPI, che arriva fino a 5Mb/s, basta prendere (a 10/15€) un adattatore SPI/USB per il pc, certo il codice non è semplice come la seriale...

come hai detto te, se il passaggio è lineare, allora ti serve
y=mx+q
dove m = Ad!!!
il valore Ad non lo devi calcolare ogni volta, è precalcolato (nel setup o harcodato nel codice)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

ratto93

Salve eischifa, l'idea di costruire un sismografo mi era proprio venuta leggendo il suo articolo, non me ne intendo molto infatti mi sto documentando e mi leggerò per bene le formule sullo spostamento che ha scritto, io avevo pensato di prendere una coppia di geofoni ma non ne trovo a meno di 70/80 euro, dove li trovo quelli che costano meno ?

Per quanto riguarda il tipo di acellerometro, la versione del codice che ho postato in precedenza era per un BMA 180, ma giusto poche ore fà ho terminato di costruire un sensore ce implementa un MMA7361, preso proprio perchè semplicemente tramite un pin si cambia la sensibilità, da notare però che come ha detto lesto sensori che comunicano tramite I2C o SPI generalmente offrono lettura molto più precise di quelle che può effettuare l'ADC di arduino.
Se corri veloce come un fulmine, ti schianterai come un tuono.

lesto

#48
May 30, 2012, 02:49 pm Last Edit: May 30, 2012, 02:54 pm by lesto Reason: 1
letture più precise e più veloci. sensori i2c/spi come l'ADXL345 (precisione massima 2g, ma fascia molto economica) arrivano a 8KHz, roba che nè la Seriale nè l'i2c reggono (bisogna usare per forza SPI, ma si può pensare di non passare nemmeno per arduino e andare diretti al PC con il chip USB/SPI)

IL BMA180, per esempio, ha una precisione minima di 1G (quindi direi che ci siamo), 14 bit di ADC (moolto buono) che lavora a 1,2KHz... certo poi bisogna vedere frequenze di risonanza e altre cose che non so, ma ad occhio il BMA180 mi pare migliore del MA7361
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

eischifa

Lesto, ma tu hai un'idea di quale sia il tuo valore di Ad relativo al tuo sensore e al settaggio (gain) del tuo Arduino, oltra al filtro  che utilizzi?
Perchè per i geofoni che ho io, il produttore mi ha inviato un scheda di calibrazione in cui riporta tutti i dati che servono a trovare il numero magico...se il produttore non ti dà i dati non sarai mai in grado di risalire al tuo Ad...acquisirai terremoti ma non potrai confrontarli con il resto della comunità scientifica...
Quindi, capisco tutto il concetto di linearità, ma tu mi insegni che per risolvere un'equazione di primo grado devi avere una sola incognita.
Per il resto la mia difficoltà è quella di interfacciare un software di acquisizione e visualizzazione. Io ho creato il mio scrivendolo in LabVIEW. Come dicevo mi sono focalizzato sull'analogico perchè utilizzo geofoni, infinitamente più precisi.
Quindi io consiglio per uno strumentino "serio" i GEOFONI!
Per chi fosse interessato qui
https://sites.google.com/site/geologiageofisicaesismologia/
il sito dell'amico Angelo e del nostro gruppo.

Per l'acquisto dei geofoni puoi contattare

Sunny Chuang
Xi'an Senshe Electronic Technology Corporation
2, Industry Road, National Civil Aerospace
Industry Base, Xi'an,710100,China
URL:www.senshe.com
E-mail:sunnychuangcn@gmail.com

acquista solo le capsule (circa 25 USD)  e scegli geofoni con frequenza di 4,5 Hz.

Go Up