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 A3

// 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 }
Si nota come a differenza degli ingressi digitali NON è necessario inizializzare gli ingressi analogici.

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:

q = 5 1024 = 0.00488 V

Sembrerebbe quindi che per una tensione di 0 V venga restituito 0 e solo quando questa raggiunge il valore di 0.00488V venga restituito il valore 1.
In realtà, come è possibile vedere in figura (per un convertitore A/D a 3 bit) il passaggio avviene a metà tra queste tensioni, quindi viene restituito il valore 0 se la tensione è inferiore a q 2 = 0.00244  V e il valore 1023 se si supera Aref 3 q 2 = 5 0.00244 = 4.99268  V.

Last modified: Monday, 21 March 2022, 4:55 PM