Arduino diventa un capacimetro!

Tra i vari componenti che passano per le mani dell'appassionato praticante di elettronica, i condensatori sono probabilmente quelli che più spesso perdono la stampigliatura presente sull'involucro, diventando "anonimi" e, praticamente, inservibili. Non tanto gli elettrolitici, il cui valore si cancella difficilmente, e che comunque richiedono il controllo di diversi altri parametri per verificarne la bontà, ma piuttosto i vari condensatori di piccole dimensioni come quelli ceramici, quelli in poliestere, ecc.
Sarebbe quindi utile disporre di uno strumento in grado di misurare con semplicità il reale valore capacitivo di questi minuscoli oggetti rimasti per anni a sfregarsi nei cassetti, cosi' da poter decidere se e come utilizzarli ancora.
Naturalmente lo strumento esiste già: stiamo parlando del "Capacimetro"; ma perchè non provare a farne uno con la nostra scheda di Arduino?

Un metodo per determinare la capacità può essere quello di misurare il tempo che il condensatore impiega a caricarsi. Facendo affluire corrente al condensatore attraverso una resistenza, prendiamo nota del momento in cui la tensione ai capi del condensatore stesso raggiunge un determinato valore.
Lo schema che segue permette di comprendere meglio il funzionamento del progetto:

schema di capacimetro con scheda arduino
Il condensatore C di cui si vuole determinare la capacità viene inserito fra il pin A1 e la massa (ground); il condensatore si carica tramite la resistenza Rc da 180 kohm, collegata a 5V. Nel momento in cui la tensione letta dal pin A1 raggiunge il valore prestabilito, viene letto il tempo che è trascorso.
Terminata la misura, il pin 7 va a livello basso, provvedendo alla scarica del condensatore attraverso la resistenza Rs da 330 ohm. Il diodo D impedisce che arrivi corrente al condensatore dal pin 7, quando questo è a livello alto.

Di seguito è riportato il codice da caricare sulla scheda:

#define reading 1
#define drivepin 7
unsigned int Vread;
float Cx;
unsigned long intCx;
unsigned long time1;
unsigned long time2;

void setup() {
Serial.begin(9600);
pinMode(7, OUTPUT);
}

void loop() {
digitalWrite (drivepin, LOW);
delay(1000);
Vread = analogRead (reading);
digitalWrite(drivepin, HIGH);
time1 = micros();

while (Vread < 1000) {
Vread = analogRead (reading);
}
time2 = micros();

Cx = (time2-time1)*1.4602+52;
if (Cx>100000) {
Cx = Cx/1000000;
Serial.print (Cx);
Serial.println (" microF");
}
else {
intCx = Cx-400;
intCx = intCx*(intCx<5000000);
Serial.print (intCx);
Serial.println (" pF");
}
}
Questo è il montaggio pratico su breadboard:

capacimetro con arduino - montaggio pratico
Il condensatore da misurare, Cx, va inserito dove indicato dalle frecce. Per comodità, da tali punti si possono derivare due cavetti, ciascuno dotato di un coccodrillo (una pinzetta), per collegare con più comodità i condensatori aventi diversa misura.

Il ciclo di misura inizia con l'istruzione digitalWrite (drivepin, LOW) che porta a livello zero il pin 7, scaricando così il condensatore attraverso il diodo e la resistenza Rs, che serve a limitare la corrente.
Per la scarica è stato previsto 1 secondo, dopo di che il pin 7 va a livello alto; in tale istante si effettua la prima lettura del tempo time1 = micros(); si è scelta la funzione micros() poichè conteggia i microsecondi, e quindi risulta più precisa rispetto a millis() che conteggia i millisecondi.
Inizia poi un ciclo durante il quale, con Vread = analogRead (reading) si legge la tensione sul pin A1; appena si raggiunge il valore 1000, si effettua la seconda lettura del tempo: time2 = micros().
La differenza fra i due tempi permette di calcolare la capacità del condensatore, moltiplicando il valore per una costante; i valori 1,4602 e 52 sono stati determinati per via analitica, ricavandoli dall'equazione della retta che interpolava tutta una serie di punti ottenuti in fase di taratura.
Con l'istruzione if (Cx>100000) viene effettuata, in base alla capacità calcolata, la scelta di presentare il valore in microfarad oppure in picofarad; in questo secondo caso, il valore viene trasformato in intero, assegnandolo alla variabile intCx di tipo "unsigned long".

Ho provato a misurare condensatori di svariate capacità e devo dire che il risultato mi è parso molto buono; l'unica limitazione è la gamma di valori, che parte da circa 100 pF ed arriva a qualche microfarad. D'altra parte questa è la fascia che più interessa verificare, poichè come ho già detto, gli elettrolitici richiedono ben altri controlli per poter essere usati in sicurezza.


ebook "Introduzione all'elettronica"


Ritorna all'indice generale