Uso del convertitore analogico-digitale (ADC)
La board Arduino Uno è equipaggiata con un convertitore analogico-digitale (ADC) a 6 ingressi chiamati A0-A5 con risoluzione di 10 bit.
Nota: Arduino Due e Zero hanno un convertitore con risoluzione fino a 12 bit, ma settata per default a 10 bit. Per aumentare la risoluzione in Arduino Due e Zero è necessario nel setup inserire il comando analogReadResolution(12);
Una risoluzione di 10 bit dell'ADC di Arduino (se non viene posta una tensione di riferimento sul piedino Aref) restituisce il valore 0 se la tensione misurata all'ingresso è di 0V e il valore 210-1=1023 se la tensione misurata è prossima a 5V.
Per calcolare le tensione in ingresso V_ingresso si usa la proporzione:
V_ingresso : Valore_ADC = 5 : 1024
e quindi:
V_ingresso = (Valore_ADC * 5) / 1024
È evidente che raggiunta la tensione massima misurabile
V_massima = 1023/1024 * 5 = 4.9951 V
il convertitore analogico-digitale satura e a partire da quella tensione fornisce sempre in uscita il valore 1023.
L'esercitazione prevede di leggere un valore analogico in uno degli ingressi dell'ADC (l'ingresso A3) e inviare valore numerico letto in seriale.
lo sketch da caricare è il seguente:
#define pinPotenziometro A3Si nota come a differenza degli ingressi digitali NON è necessario inizializzare gli ingressi analogici.
// variabili globali int valore = 0; void setup() { Serial.begin(9600); // inizializza il collegamento seriale // N.B. NON E' NECESSARIO INIZIALIZZARE IL PIN DEL CONVERTITORE ANALOGICO DIGITALE } void loop() { valore = analogRead(pinPotenziometro); // legge il valore analogico del potenziometro Serial.print("Valore letto dal potenziometro: "); Serial.println(valore); // Stampa il valore letto delay(1000); // aspetta 1000 millisecondi, ossia un secondo prima di fare un'altra misura }
L'istruzione cardine nel codice è analogRead( ) che legge e converte in binario la tensione letta all'ingresso specificato tra parentesi (nell'esempio "A3").
Nota: anche se non è fatto frequentemente è possibile usare gli ingressi analogici come normali I/O digitali. In tal caso è necessario inizializzare il pin; per esempio il comando pinMode(A3, OUTPUT) inizializza l'ingresso A3 come uscita digitale.
Ancora un po' di teoria
Si è visto che con una risoluzione di 10 bit del convertitore A/D di Arduino (se non viene posta una tensione di riferimento sul piedino Aref) restituisce il valore 0 se la tensione misurata è di 0 V e il valore 210-1=1023 se la tensione misurata è circa 5 V (abbiamo visto 4.9951 V).
Il più piccolo salto di tensione misurabile, ovvero la differenza di tensione che fa aumentare di una unità il valore restituito dal convertitore A/D si chiama quanto e vale: