potete scaricare anche il programma di acquisizione inserito nel paragrago tromografo accelerometrico - manuale di acquisizione.
Il programma di acquisizione permette di creare il file Saf, avere l'avvertenza di vontrollare che la frequenza di campionamento e il numero di campioni da acquisire coincidano con i valori riportati nelle righe di settaggio all'inizio del file indicati in rosso nell'esempio sottostante.
Questo programma funziona senza l'ausilio di altri programmi di acquisizione. i dati verranno visualizzati su apposita pagina durante l'acquisizione e con cpia e incolla trasferiti su un EXCEL o programma analogo per essere visualizzati e salvati in formato hvsr
SESAME ASCII data format (saf) v. 1 (this line must not be modified)
SAMP_FREQ = 300
NDAT = 10000
START_TIME = 2011 02 26 18.25 15.000
SENSOR_TYPE =velocity
ACQ_SYSTEM = tromografo DOLFRANG
UNITS = mv
CH0_ID = V
CH1_ID = N
CH2_ID = E
####------------------------------------------------------
198 89 803
40 -214 -45
-850 -247 -167
521 110 75
346 -151 29
-63 -162 271
172 -124 -140
542 365 -231
-337 -222 474
282 -551 -504
463 238 167
375 119 -359
..... ..... ....
399 316 649
Le istruzioni in rosso possono anche essere omesse, permettono di aumentare la frequenza di campionamento
Le scritte in blu servono per modificare la sensibilità dell'Arduino, ATTENZIONE VEDERE CAPITOLO AROF...
L'arduino ha dei sistemi di autoprotezione da sovratensioni che provocano l'interruzione dell'acquisizione , in dal caso uscire immediatamente dall'acquisizione staccando semplicemente il cavo USB , quindi ricontrollare il circuito.
//-----------------------------------------------------------// di Dolmetta Angelo// V.05 - OTTOBRE / 2011// HVSR__3_ch// http:/comunitàdigeologia.multipy.com// -----------------------------------------------------------#define FASTADC 1
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif
// ATTENZIONE : TERMINATA L'ACQUISIZIONE STACCARE LA PRESA USB E RICOLLEGARLA PER RIFARE UN SECONDO SONDAGGIO
//per un problema 8 bit arduino microprocessore non si possono acquisire + di 32000 campioni,
//pertanto è sufficiente fargli fare 4/5 cicli di acquisizione ( poi togliere per ogni ciclo
//i dati fi frequenza che ogni volta registra per fare un unico file
//Il problema è superato con il fiile exe, si possono acquisire 30 minuti in continuuo
// il segnale è 2/4 volte + filtrato rispetto la versione precedente
//( più che filtrato parlerei di mediato)
//quando mi mandate dei sondaggi inserite nel nome del tile esempio
//prova S4 k1 filtro si.txt
// -------------- dati di settaggio ----------------
int s=22; // non modificare valore 1= 10 bit,
//valore 2= 11 bit , vaolre 4 emula il 12 bit , 16 emula un 14 bit , 64 emula un 16 bit
int sleep = 1; // >0 non modificare la frequenza di campionamneto
// in funzione di s utilizzato modificare sleep
double c = 3000; // numero di campioni da acquisire
// definizione variabili array dei sei canali
int c0;
int c1;
int c2;
double c0t;
double c1t;
double c2t;
int i;
double j;
double ti;
double tf;
double dt;
int t=20000; // campioni per il test
int z0;
int z1;
int z2;
// setta la velocità di trasmissione della porta seriale
// da non confondere con la frequenza di campionamento
void setup() {
Serial.begin(115200);
// Se non vengono inserite nessuna delle sottostanti istruziioni (BLU) l'Arduino acquisisce con
// tensione di riferimento 5 volt , se si usa il ponte con tensioni di +/- 2,5 volt
//analogReference(EXTERNAL); //PER VELOCIMETRO
// analogReference(INTERNAL); // SOLO PER ACCELEROMETRO
#if FASTADC
// set prescale to 16
sbi(ADCSRA,ADPS2) ;
cbi(ADCSRA,ADPS1) ;
cbi(ADCSRA,ADPS0) ;
#endif
Serial.println("SESAME ASCII data format (saf) v. 1 (this line must not be modified)" );
Serial.println("SAMP_FREQ =72.94 " );
Serial.println("NDAT = 10000 ");
Serial.println("START_TIME = 2011 02 26 18.25 15.000" );
Serial.println("SENSOR_TYPE =velocity" );
Serial.println("ACQ_SYSTEM = tromografo DOLFRANG ");
Serial.println("UNITS = mv" );
Serial.println("CH0_ID = V");
Serial.println("CH1_ID = N");
Serial.println("CH2_ID = E");
Serial.println("####------------------------------------------------------");
}
// ciclo di acquisizione
void loop()
{
// procedura di test
for (i=0; i < t; i++) {
c0 = analogRead(0);
c0t=c0t+c0;
//Serial.println(c0t);
c1 = analogRead(1);
c1t=c1t+c1;
c2 = analogRead(2);
c2t=c2t+c2;
}
//Serial.print(" valori di azzeramento = ");
z0=c0t/t;
z1=c1t/t;
z2=c2t/t;
//Serial.print(z0);
//Serial.print(" ");
//Serial.print(z1);
//Serial.print(" ");
//Serial.println(z2);
//Serial.println( k);
//-------------------------------------------------
//delay (1);
ti= micros(); // instante iniziale
for (j=0; j < c; j++) {
//Serial.print(j);
//Serial.print(" ");
c0t=0;
for (i=0; i < s; i++) {
c0 = analogRead(0);
c0t=c0t+c0;
}
c0= (c0t)-z0*s;
Serial.print(c0);
delayMicroseconds(sleep) ;
Serial.print(" ");
c1t=0;
for (i=0; i < s; i++) {
c1 = analogRead(1);
c1t=c1t+c1;
}
c1= (c1t)-z1*s;
Serial.print(c1);
delayMicroseconds(sleep) ;
Serial.print(" ");
c2t=0;
for (i=0; i < s; i++) {
c2 = analogRead(2);
c2t=c2t+c2;
}
c2= (c2t)-z2*s;
Serial.print(c2);
delayMicroseconds(sleep) ;
Serial.println(" ");
}
tf= micros();; // instante finale
dt =(tf-ti)/1000; // durata acquisizione
Serial.print(" campioni acquisiti ......... = ");
Serial.println (c);
Serial.print(" durata acquisizione..... sec = ");
Serial.println( dt/1000);
Serial.print(" frequenza di acquisizione Hz = ");
Serial.println( c/dt*1000);
delay (1000000);
}
LISTATO - acquisizione HVSR con trigger 3 canali
inserire la durata del sondaggio, di baudrate di trasmissione, inizialmente il programma fa un test per determinare la frequenza di campionamento e calcolare il numero di campioni da acquisire e rimane in attesa della pressione del pulsante per iniziare l’acquisizione.
Il listato non è ancora quello definitivo - telefonare a l 0183 296636 per maggiori informazioni
//-----------------------------------------------------------// di Dolmetta Angelo// V.04 - luglio / 2011// HVSR_trigger_3_ch// http:/comunitàdigeologia.multipy.com// -----------------------------------------------------------// ****** INSERIRE IL NUMERO DI SECONDI DELL'ACQUISIZIONE ******int secondi= 60 ; // inserire la durata dell’acquisizioneint baud = 9600; // inserire li baud di trasmissione// Dopo aver impostato i baund e la durata di acquisizione, il programma acquisisce 100// campioni e calcola la frequenza di campionamento, e rimane in attesa dello starter tramite// trigger o pulsante.// Alla chiusura del circuito il programma ad acquisire dari per la durata di tempo preimpostata,// al termine procerà nuovamente a fare la verifica della frequenza di campionamento utilizzata.//*******************************************************************int pulsante = 2; // il numero dei pin pulsante// definizione variabiliint c0;int c1;int c2;long ti; // istante inizio acquisizionelong tf; // istante fine acquisizionefloat dt; // durata acquisizioneint i; // contatoreint hz; // hzint s; // campioni da acquisire,// Variabili cambia:int trigger = 0; // variabile triggervoid setup () {pinMode (pulsante, INPUT); // legge il numero del pulsante n°2// setta la porta serialeSerial.begin(baud);analogReference(INTERNAL);// test velocitàti= micros(); // instante iniziale in microsecondifor (i=0; i < 100; i++) {// canale 0c0 = analogRead(0);Serial.print(c0);Serial.print(" ");//canale 1c1 = analogRead(1);Serial.print(c1);Serial.print(" ");//canale 2c2 = analogRead(2);Serial.println(c2); // ln serve per mandare a capo la rica} tf= micros(); // instante finale in microsecondi// calcolo e visualizzazione frequenza// di campionamento e durata acquisizionedt =( tf - ti); // durata acquisizioneSerial.println("");Serial.print(" frequenza di campionamento Hz = ");hz = 100 / (dt /1000000);Serial.println(hz);s = hz*secondi;Serial.println();Serial.println(" IL SISTEMA E' PRONTO PER ACQUISIZRE - cliccare il pulsante di starter");delay (5000);}// ciclo di acquisizione// pinMode (pulsante, INPUT); // legge il numero del pulsante n°2void loop() {// Leggere lo stato del valore di pulsante:trigger = digitalRead (pulsante);if (trigger == HIGH) {}else {// Direzione a LED spento:digitalWrite (pulsante, LOW);c2 = analogRead(2); Serial.println(c2);tf= micros(); // instante finale in microsecondi// calcolo e visualizzazione frequenza// di campionamento e durata acquisizione// acquisizioneti= micros(); // instante iniziale in microsecondifor (i=0; i < s; i++) {// canale 0c0 = analogRead(0);Serial.print(c0);Serial.print(" ");//canale 1c1 = analogRead(1);Serial.print(c1);Serial.print(" ");//canale 2c2 = analogRead(2);Serial.println(c2); // ln serve per mandare a capo la rica}tf= micros();dt =( tf - ti); // durata acquisizioneSerial.println("");Serial.print(" campioni acquisiti = ");Serial.println( s);Serial.print(" durata acquisizione sec = ");Serial.println( dt /1000000); // calcolo durata in secondiSerial.print(" frequenza di campionamento Hz = ");Serial.println( s / (dt /1000000));delay(500);}}