Salve a tutti, per un progetto di laboratorio all'università sto cercando di fare uno script, che riceva dal serialmonitor un indicazione sulla presunta costante di tempo RC di un circuito, e successivamente imposti la frequenza di campionamento adatta per ricavare quella reale.
Vi illustro il circuito
In pratica alimento con un pin digitale (5V) Il condensatore, che si caricherà... poi spengo il pin Digitale, in modo da iniziare a far scaricare il condensatore e leggere l'evoluzione della scarica.
digitalWrite(12, HIGH); // carico il condensatore
unsigned long startTime = micros();
while (analogRead(A0) < 935) {};
unsigned long elapsedTime = micros() - startTime;
digitalWrite(12, LOW); // scarico il condensatore
for (int i = 0; i < 20; i++) {
//save the time
unsigned long runningTime = micros();
//campute the difference with previous meas
unsigned long delta = runningTime - startTime;
//update the start time for next cycle
startTime = runningTime;
int sensorValue = analogRead(A0);
Serial.print(i);
Serial.print("V: ");
Serial.println(sensorValue);
}
L'obiettivo dell'esperienza di laboratorio è quella di costruire tramite una regressione lineare, la retta tangente a partire dalle misure, quindi mi servono le misure ad una frequenza consona a quella inserita dall'utente. Come faccio a leggere le misure, e salvarmi anche gli istanti? Graficando il classico esponenziale di scarica l'analog read mi da il valore Y, il valore degli istanti X come lo trovo?
Ho spulciato datasheet e siti, ed ho trovato questo template per cambiare la frequenza di campionamento dell'ADC, ma dai risultati del serial monitor non cambia tanto...sbaglio io, perchè il serialmonitor è più lento delle misure che faccio?
ADCSRA &= ~(bit (ADPS0) | bit (ADPS1) | bit (ADPS2)); // clear prescaler bits
//ADCSRA |= bit (ADPS0); // 2 _ 8MHz
//ADCSRA |= bit (ADPS1); // 4 _ 4MHz
//ADCSRA |= bit (ADPS0) | bit (ADPS1); // 8 _ 2MHz
//ADCSRA |= bit (ADPS2); // 16 _ 1MHz
//ADCSRA |= bit (ADPS0) | bit (ADPS2); // 32 _ 500KHz
//ADCSRA |= bit (ADPS1) | bit (ADPS2); // 64 _ 250KHz
//ADCSRA |= bit (ADPS0) | bit (ADPS1) | bit (ADPS2); // 128 _ 125KHz
Grazie a chiunque voglia aiutarmi!!!