.8) listato acquisizione

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’acquisizione
int 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 variabili
int c0;
int c1;
int c2;
long ti; // istante inizio acquisizione
long tf; // istante fine acquisizione
float dt; // durata acquisizione
int i; // contatore
int hz; // hz
int s; // campioni da acquisire,
// Variabili cambia:
int trigger = 0; // variabile trigger
void setup () {
pinMode (pulsante, INPUT); // legge il numero del pulsante n°2
// setta la porta seriale
Serial.begin(baud);
analogReference(INTERNAL);
// test velocità
ti= micros(); // instante iniziale in microsecondi
for (i=0; i < 100; i++) {
// canale 0
c0 = analogRead(0);
Serial.print(c0);
Serial.print(" ");
//canale 1
c1 = analogRead(1);
Serial.print(c1);
Serial.print(" ");
//canale 2
c2 = 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 acquisizione
dt =( tf - ti); // durata acquisizione
Serial.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°2
void 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
// acquisizione
ti= micros(); // instante iniziale in microsecondi
for (i=0; i < s; i++) {
// canale 0
c0 = analogRead(0);
Serial.print(c0);
Serial.print(" ");
//canale 1
c1 = analogRead(1);
Serial.print(c1);
Serial.print(" ");
//canale 2
c2 = analogRead(2);
Serial.println(c2); // ln serve per mandare a capo la rica
}
tf= micros();
dt =( tf - ti); // durata acquisizione
Serial.println("");
Serial.print(" campioni acquisiti = ");
Serial.println( s);
Serial.print(" durata acquisizione sec = ");
Serial.println( dt /1000000); // calcolo durata in secondi
Serial.print(" frequenza di campionamento Hz = ");
Serial.println( s / (dt /1000000));
delay(500);
}
}