.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 c
ircuito.



//-----------------------------------------------------------

// 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);

}

}




Comments