Capacimetro Digitale con Arduino

0

di Stefano Lovati

Questo progetto si rivolge non soltanto a chi muove i primi passi nell’affascinante mondo dell’elettronica, ma anche a chi desidera dotare il proprio laboratorio di uno strumento utile, semplice da costruire e facile da usare. Il progetto prevede infatti la realizzazione di un economico capacimetro digitale, con uscita su display LCD e facilmente espandibile con l’introduzione della funzionalità autorange

I condensatori (di qualunque tipo, dimensione o capacità essi siano) sono dei componenti elettronici sempre presenti in un qualunque laboratorio dilettantistico e praticamente in ogni progetto. Se per alcuni tipi (soprattutto gli elettrolitici) l’individuazione del valore di capacità nominale risulta abbastanza agevole, per altri modelli di dimensioni più ridotte (si pensi ai ceramici o ai poliestere di piccolo valore) la situazione si complica e la lettura del valore a occhio nudo può risultare difficoltosa. Inoltre, capita spesso di avere tra le mani condensatori recuperati da precedenti progetti, con diciture poco comprensibili e di cui si vuole determinare con sufficiente precisione il valore di capacità. Lo strumento che ci viene in aiuto per soddisfare queste richieste è il capacimetro, magari meno attraente dell’oscilloscopio ma sicuramente altrettanto utile. Vediamo in questo articolo come realizzare un capacimetro DIY basato su Arduino e con uscita su display LCD. Il progetto proposto prevede inizialmente un’unica gamma di misura, ma come vedremo più avanti può essere facilmente modificato ed esteso includendo più gamme di misura.

Il progetto

Lo schema a blocchi del capacimetro, visibile in Figura 1, comprende tre componenti principali:
• un microcontrollore (MCU) sul quale viene eseguito il programma che calcola il valore della capacità incognita e gestisce la visualizzazione dei dati sul display. La scelta del dispositivo è ricaduta sulla scheda Arduino (modello Uno rev. 3 o similari), una piattaforma di prototipazione rapida largamente diffusa e particolarmente semplice da programmare. Arduino dispone inoltre di un ambiente di sviluppo integrato (IDE) liberamente utilizzabile, che consente di creare, compilare e scaricare sulla board il programma (sketch) senza bisogno di utilizzare un programmatore;
• un display LCD 16×2 con interfaccia parallela. Anche in questo caso siamo di fronte a un “classico” componente che, nonostante sia stato ormai soppiantato  in molte applicazioni dai display grafici ad alta risoluzione, è solitamente presente tra il corredo di componenti di ogni maker. Utilizzeremo la versione standard parallela del componente (quindi non quella dotata di interfaccia I2C), programmata tramite l’apposita libreria LiquidCrystal già incorporata nell’IDE Arduino;
• il circuito di misura (o, come si usa dire, di condizionamento del segnale), rappresentato da un tradizionale circuito RC serie.

Figura 1: schema a blocchi del circuito

Oltre ad Arduino Uno e al display LCD, gli altri componenti elettronici richiesti per la realizzazione del progetto sono rappresentati da resistenze e materiale vario per realizzare i collegamenti (cavetti jumper/Dupont, boccole oppure pinzette a banana). Il prototipo del circuito è stato assemblato utilizzando una normale breadboard, mentre per la versione finale (tenendo conto che le tensioni e frequenze in gioco sono bassissime) si può allestire una basetta millefori e includere il tutto in un comodo contenitore.

Principio di funzionamento

Anche se non è nostra intenzione annoiare troppo il lettore con formule matematiche più o meno complesse, dobbiamo richiamare qualche semplice nozione di fisica (o, più precisamente, di elettrotecnica) riguardante il processo di carica di un condensatore. Si consideri a questo proposito il circuito rappresentato in Figura 2, in cui il condensatore C fa parte di un circuito RC serie in cui, all’istante iniziale t0, viene applicata una tensione continua VCC.

Figura 2: circuito serie RC per la carica di un condensatore

Inizialmente la carica accumulata dal condensatore è nulla, ma questa (come la tensione ai capi dello stesso) comincia a crescere non appena la corrente fluisce nel circuito. Più precisamente, la tensione VC ai capi del condensatore varia nel tempo in funzione di VCC, R e C secondo una legge esponenziale espressa dalla seguente formula (si osservi la Figura3):

VC = VCC (1 – e-t/RC)

 

Figura 3: andamento della tensione durante la carica del condensatore

Il prodotto di R per C (RC) è la nota “costante di tempo”, spesse volte indicata anche come “tau” (τ). Il numero irrazionale “e” (noto anche come numero di Nepero) è la base dei logaritmi naturali e il suo valore è approssimativamente pari a 2,7182818284. Supponiamo ora di volere determinare il valore della tensione sul condensatore in un preciso istante di tempo, ad esempio quando t è esattamente pari alla costante di tempo RC. Eseguendo la sostituzione nella formula precedente, otteniamo:

VC = VCC (1 – e-RC/RC) = VCC (1 – e-1) = 0,63212
VCC = 63,2% VCC

Abbiamo così determinato che per t uguale a τ la tensione sul condensatore è circa pari a 63,2% della tensione del generatore utilizzato per eseguire la carica. Questo valore è molto importante per i nostri scopi, in quanto sarà proprio questa la formula impiegata per eseguire il calcolo della capacità incognita. Ovviamente è altresì possibile calcolare il valore della tensione sul condensatore in corrispondenza di altri istanti di tempo, ottenendo un diagramma simile a quello riportato in Figura 4.

Figura 4: andamento percentuale della tensione sul condensatore in funzione del tempo

Il principio utilizzato per eseguire la misura è a questo punto facilmente comprensibile. In pratica si utilizza un circuito RC serie composto da una resistenza di valore noto R e dal condensatore la cui capacità è incognita. Il circuito RC viene caricato utilizzando un pin di I/O di Arduino programmato come uscita, mentre la tensione ai capi del condensatore viene misurata tramite un canale del convertitore analogico-digitale di Arduino. Quando il valore letto dal canale ADC raggiunge la soglia (numerica) corrispondente al 63,2% della tensione di carica il processo di carica viene interrotto, viene letto il tempo T trascorso dall’inizio della carica e viene calcolato il valore della capacità incognita CX applicando la formula:

CX = T / R

Dove CX è espresso in Farad, T in secondi e R in Ohm. Eseguito il calcolo di CX, si provvede ad eseguire la scarica del condensatore tramite un altro pin di I/O di Arduino (configurato come uscita e attivato al valore logico basso) e una resistenza da 220 Ω. Il processo di scarica si può ritenere completato quando la lettura dell’ADC restituisce il valore numerico 0. Le fasi di carica, misura e scarica del condensatore si ripetono in modo perpetuo. La visualizzazione del valore di capacità sul display LCD viene eseguita ogni secondo, in modo da non sovraccaricare eccessivamente lo stesso o generare fastidiosi fenomeni di sfarfallio. Nella Figura in apertura d’articolo possiamo osservare il prototipo del capacimetro digitale, con la visualizzazione prodotta a seguito della misura di un condensatore da 1 μF.

Circuito di Misura

Lo schema del circuito RC utilizzato per la misura è visibile in Figura 5.

Figura 5: circuito RC utilizzato per la misura della capacità

La tensione utilizzata per la carica (+V) corrisponde alla tensione di +5 V prelevata dai connettori della board Arduino. La resistenza di caricavR ha valore noto (nel nostro caso è pari av10 kΩ), mentre la capacità di C rappresentavl’incognita da calcolare. L’uscita viene applicata all’ingresso analogico A0 di Arduino: la lettura del valore prodotto dal convertitore analogico-digitale ci consentirà di determinare con esattezza il momento in cui interrompere la carica (corrispondente al 63,2% di +V). Il metodo descritto sfrutta la possibilità di Arduino di configurar i pin di I/O in due stati distinti:

• stato di ingresso (configurabile tramite il comando pinMode(pin, INPUT): il pin si porta in uno stato di alta impedenza, isolandosi quasi completamente dal resto del circuito (la resistenza corrispondenza è molto elevata e quindi il pin praticamente non assorbe corrente);
• stato di uscita (configurabile tramite il comando pinMode(pin, OUTPUT): il pin si porta in questo caso in uno stato di bassissima impedenza, in cui può fornire fino a 40 mA di corrente di source (nel caso di tensione positiva) o di sink (nel caso di tensione negativa). I pin possono poi essere configurati nello stato logico alto (HIGH, corrispondente alla tensione di +5 V) per eseguire la carica del condensatore, oppure nello stato logico basso (LOW, corrispondente alla massa) per scaricare il condensatore. Il circuito di misura, con evidenziati i collegamenti richiesti con la scheda Arduino, è visibile in Figura 6. Lo schema logico utilizzato nel programma (sketch) Arduino è articolato sui seguenti passi:
• il pin di scarica (D6) viene configurato come ingresso, in modo tale da non interferire durante il processo di carica del condensatore;
• viene memorizzato il tempo, in millisecondi, di inizio del processo di carica (tramite chiamata alla funzione millis());
• il pin di carica (D7) viene configurato come uscita e impostato allo stato logico alto;
• viene continuamente monitorata la lettura del convertitore A/D, fino a quando questa raggiunge un valore corrispondente al 63,2% della tensione totale;
• si determina (per differenza rispetto al tempo corrente ottenuto sempre con la chiamata alla funzione millis()) il tempo totale richiesto dal processo di carica;
• il tempo totale di carica viene diviso per il valore della resistenza di carica R, ottenendo il valore di capacità incognito;
• la misura di capacità viene emessa in modo continuo su linea seriale e visualizzata ogni secondo sul display LCD;

• il condensatore viene scaricato nel modo seguente:
1. il pin di carica viene configurato come ingresso;
2. l pin di scarica viene configurato come uscita e impostato allo stato logico basso;
3. l’ADC viene continuamente monitorato: quando la lettura è pari a 0, il condensatore può essere ritenuto scarico.
• Il ciclo riparte con una nuova misura.

Collegamenti elettrici

I collegamenti elettrici diventano particolarmente semplici se, almeno per la realizzazione del prototipo, si utilizzano una breadboard e cavetti jumper. Il display LCD deve essere corredato del relativo pin header con connettore femmina.
I collegamenti tra Arduino e il display LCD sono riassunti nella seguente tabella:

Tabella 1: elenco dei collegamenti tra la scheda Arduino e il display LCD

Per la regolazione del contrasto del display LCD occorre utilizzare un trimmer potenziometrico da 10 kΩ. I terminali esterni vanno collegati a +5 V e GND, mentre il terminale centrale va collegato al pin VO del display LCD. Per attivare la retroilluminazione (vivamente raccomandata) occorre inserire una resistenza da 220 Ω tra il pin A del display e +5 V. Per quanto riguarda il circuito di misura riportato in Figura 6, i collegamenti da eseguire sono i seguenti:

 

Figura 6: ingressi e uscite del circuito di misura

 

• il pin di carica va collegato al pin D7 di Arduino;
• il pin di scarica va collegato al pin D6 di Arduino;
• l’uscita del circuito di misura va collegata al pin A0 di Arduino (ingresso ADC).
La resistenza R dovrebbe avere un valore più preciso possibile, quindi utilizzare possibilmente un componente con tolleranza bassa. Eventualmente si può misurare il valore di R a temperatura ambiente con un multimetro e ,se differisce sensibilmente dal valore nominale di 10 kΩ, inserirne il valore “cablato” nello sketch (variabile resistorValue, attualmente posta uguale a 10000.0F).

Il programma

Lo sketch allegato all’articolo è liberamente disponibile per il download al link indicato a fondo articolo. Non ci soffermiamo molto sulla descrizione del programma, in quanto è facilmente comprensibile e ampiamente commentato. Una nota può riguardare la soglia in corrispondenza della quale la carica va interrotta. Come si può dedurre analizzando
il codice, questa soglia corrisponde al valore 647 letto dall’ADC. Arduino dispone infatti di un convertitore ADC con risoluzione su 10 bit, pertanto le letture dal medesimo saranno comprese tra 0 e 1023 (210-1). Il valore 1023 (full
scale dell’ADC) corrisponde alla tensione di riferimento (+5 V nel nostro caso) e, di conseguenza, 648 corrisponde a circa il 63,2% del full scale. Il valore di capacità misurato viene dapprima convertito in micro Farad: se il valore ottenuto è troppo piccolo, si provvede a convertirlo in nano Farad. La procedura di visualizzazione sul display LCD (outputLCD()), oltre al valore numerico da visualizzare, riceve come parametro una variabile che indica se la misura è espressa in μF oppure in nF: nel primo caso, infatti, occorre visualizzare il simbolo “micro” che richiede un trattamento particolare in quanto non è compreso nell’alfabeto tradizionale ma nella tabella dei codici estesa (codice
0xE4 per l’esattezza). In Figura 5 abbiamo visto un esempio di output della misura sul display, mentre in Figura 7 possiamo osservare un esempio di output prodotto su linea seriale.

Figura 7: esempio di output della misura prodotto su linea seriale

Range di misura

Il circuito proposto nell’articolo dispone di un’unica scala di misura, determinata dal valore della resistenza R, pari a 10 kΩ. Per aumentare il range di misura dello strumento si possono prevedere delle scale addizionali, inserendo altri valori di resistenza, ad esempio più piccoli di R, in modo da poter misurare la capacità anche dei condensatori molto piccoli. Una possibile soluzione per espandere le gamme di misura è mostrata in Figura 8.

Figura 8: possibile soluzione per ampliare il numero di gamme di misura

In questo caso si utilizzano tre valori differenti di resistenza (R1, R2 e R3) collegate a tre distinti pin di carica sulla scheda Arduino (ad esempio D7, D8 e D9). La selezione di una tra le N resistenze disponibili può poi essere eseguita a livello hardware (ad esempio tramite dei jumper) oppure a livello software. Nel secondo caso bisogna avere l’accortezza di mantenere attivo solo un pin di carica per volta, mentre gli altri andranno posti nello stato di alta impedenza. Inoltre, cambierà il valore di resistenza da utilizzare nella formula di calcolo della capacità. La soluzione migliore in assoluto sarebbe quella di implementare una funzione di autorange, in grado di commutare automaticamente, volta per volta, sulla scala più adatta a eseguire la misura. Chiaramente questa soluzione comporta un aumento della complessità soprattutto a livello software e potrebbe, eventualmente, essere oggetto di un progetto futuro.

Il prototipo

Il prototipo è stato realizzato utilizzando una breadboard per il posizionamento dei componenti discreti e cavetti jumper per collegare tra loro le varie parti del progetto. Poichè l’assorbimento dell’intero sistema (LCD incluso) è contenuto, l’alimentazione può essere fornita direttamente dal cavo USB della scheda Arduino collegato a un adattatore di rete o alla presa di un computer. Il prototipo è visibile in Figura 9.

Figura9: il prototipo assemblato

 

Figura 10: collegamenti tra Arduino e display LCD

Conclusioni

Abbiamo visto in questo articolo come con pochi componenti di facile reperibilità sia possibile realizzare un capacimetro digitale con indicazione della misura su display LCD. Il progetto può essere perfezionato ed ulteriormente espanso aggiungendo ulteriori gamme di misura, come indicato nell’articolo. La programmabilità resa possibile dall’impiego di Arduino consente inoltre di implementare una funzionalità autorange, che al momento viene lasciata come sviluppo futuro del progetto originale. Come ulteriore documentazione allegata al progetto riportiamo in Figura 10 lo schema dei collegamenti relativi al display LCD 16×2. Le connessioni sono quelle standard previste dalla libreria LiquidCrystal.

Total 1 Votes
0

Tell us how can we improve this post?

+ = Verify Human or Spambot ?

About The Author

Sono Stefano, nato a Milano nel 1963. Dopo aver conseguito la laurea in Ingegneria Elettronica al Politecnico di Milano, ho iniziato la mia attività lavorativa come sviluppatore firmware e software. Nel corso degli anni ho vissuto e "cavalcato" la progressiva trasformazione del mondo embedded, dai primi microprocessori a 8 bit programmabili esclusivamente in assembler ai più recenti Soc, FPGA, DSP e logiche programmabili con prestazioni e caratteristiche di assoluto rilievo. Mi interesso di tecnologia ed elettronica a 360°, dedicando parte del mio tempo libero allo studio di nuovi componenti e alla realizzazione di piccoli progetti.

Nessun commento on "Capacimetro Digitale con Arduino"

Leave a Comment

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.