Archive for Agosto 2009
Arduino (Esperimento) – Calcolo del tempo di scarica di un condensatore
Un condensatore è componente in grado di accumulare e conservare la carica elettrica. Per rallentare il processo di carica, essa può avvenire attraverso un resistore (vedi circuito RC); il tempo necessario per la carica e quello necessario per la scarica, sono legati ad una costante di tempo che dipende dalle resistenze e dalle capacità in gioco. Nell’esperimento che vado ad illustrare, voglio che arduino mi dica la durata del processo di scarica di un condensatore.
La carica avviene attraverso un resistore, collegato al PIN 13, abilitato dalla pressione di un pulsante. Per tutto il tempo che il pulsante viene tenuto premuto, il condensatore si carica. Al rilascio del pulsante il condensatore si scarica attraverso un secondo resistore, collegato al PIN 11 e da esso abilitato. Inoltre, sull PIN 0 (INPUT ANALOGICO, dal lato dell’alimentazione) si potrà leggere il valore della carica. La situazione è quella rappresentata in figura.

I componenti necessari per questo esperimento sono:
- un pulsante a quattro piedini (vedi Articolo)
- 3 resistori da 10KOhm
- 1 condensatore da 100uF (nel mio caso elettrolitoco 25Vdc
Una parte del circuito che andiamo a costruire è stato descritto nell’articolo precedente; l’altra parte deve invece realizzare in concreto quello che è rappresentato nella figura precedente.
Premendo il pulsante, invece di accendere un led, come nell’articolo citato, carichiamo il condensatore, rendendo l’uscita sul PIN 13 alta. Quando il pulsante viene rilasciato, il PIN 13 non eroga più corrente (viene messo a basso) e viene attivato il PIN 11 e impostato al valore logico basso, comportando la scarica del condensatore.
Di seguito lo sketch relativo all’esperimento:
unsigned long pulsante_t0;
unsigned long pulsante_t;
unsigned long condensatore_t0;
unsigned long condensatore_t;
int value = 0;
boolean pushed = false;
void setup(){
pinMode(11, INPUT);
pinMode(13, OUTPUT);
pinMode(9, INPUT);
digitalWrite(13, LOW);
Serial.begin(9600);
Serial.println("START");
}
void loop(){
if (digitalRead(9))
{
//carica
if (!pushed)
{
pulsante_t0 = millis();
pushed = true;
digitalWrite(13, HIGH);
}
}
else if (pushed)
{
//scarica
digitalWrite(13, LOW);
pulsante_t = millis() - pulsante_t0;
value = analogRead(0);
pinMode(11, OUTPUT);
//tempo di scarica
condensatore_t0 = millis();
digitalWrite(11, LOW);
while(analogRead(0) > 0){}
condensatore_t = millis() - condensatore_t0;
pinMode(11, INPUT);
//stampo dati
Serial.print("[V=");Serial.print(value);Serial.print("]");
Serial.print("[Tp=");Serial.print(pulsante_t);Serial.print("]");
Serial.print("[Tc=");Serial.print(condensatore_t);Serial.print("]");
Serial.println("");
value = 0;
pulsante_t = 0;
condensatore_t = 0;
pushed = false;
}
}
Nella funzione setup() notiamo la linea Serial.begin(9600) , che inizializza la comunicazione seriale con il computer (attraverso il cavo USB, nel nostro caso). L’invio di un messaggio da parte di Arduino, avviene attraverso le funzioni Serial.print() e Serial.println() (la seconda manda automaticamente il carattere di andata a capo) e noi possiamo leggere questi messaggi attraverso il “Serial Monitor” dell’ambiente di sviluppo.
Nella parte bassa della finestra, potremo leggere i messaggi inviatici da Arduino.
Altre due funzioni interessanti sono:
- millis() : permette di ricavare il tempo dall’avvio di Arduino in millisecondi (attenzione!!! va in overflow dopo 50 giorni di attività… sostanzialmente torna a zero…)
- analogRead() : legge un valore da un ingresso analogico (uno dei 6 vicini al microcontrollore), restituendo un valore compreso tra ‘0′ e ‘1023′
Dopo l’invio del programma ad Arduino, avviando il “Serial Monitor” e premendo il pulsante per periodi di tempo variabile, si ottengono i seguenti risultati:
Se cambiamo il resistore attraverso il quale il condensatore si scarica, con uno di 220Ohm, notiamo che il tempo di scarica diminuisce (dualmente per la carica – vedi τ del circuito RC):
LEGENDA:
- V = valore letto al rilascio del tasto
- Tp = tempo di pressione del tasto
- Tc = tempo di scarica del condensatore




