I sensori che inviano informazioni riguardanti l’ambiente al di fuori della scheda, non sempre generano dati digitali del tipo HIGH e LOW, come visto per i pulsanti di tipo micro switch. Nella maggioranza dei casi i sensori sono analogici, con livello di precisione assai superiore ai dati digitali. Il microcontrollore della scheda Arduino è dotato di un convertitore Analogico Digitale a 6 canali collegato ai pin A0...A5 della scheda, con una risoluzione a 10 bit. Il convertitore A/D della scheda Arduino è in grado di convertire un voltaggio elettrico letto in ingresso a un valore digitale compreso tra 0 e 1023. L’istruzione analogRead() prevede come unico parametro il piedino della scheda dal quale ricevere l’informazione analogica.

Esempio
Un potenziometro rotativo possiede tre pin: A e B sono le estremità di una resistenza sulla quale si sposta un contatto strisciante connesso al pin C. Quando il contatto è girato completamente (in senso antiorario), il circuito tra A e B è chiuso quindi abbiamo resistenza 0. Nel caso opposto quando il contatto è girato completamente (senso orario), il circuito tra A e B oppone resistenza massima. Tra i due estremi sono possibili tutti i valori intermedi di resistenza.
 
Voltmetro digitale

Realizziamo il circuito di figura e programmiamo uno sketch per scrivere sul Serial Monitor, ogni due secondi, il valore digitale acquisito dall'ingresso analogico a cui è connesso il potenziometro. Inoltre scriviamo a fianco il valore della tensione Vp, sapendo che mentre la tensione del potenziometro varia da 0 V a 5 V, il corrispondente valore digitale varia da 0 a 1023. In questo modo si è realizzato un voltmetro digitale.

Soluzione

int pinPot=A0; 
int VpDigit;
float VpVolt;
void setup()
{

Serial.begin(9600); 
}
void loop()
{
VpDigit = analogRead(pinPot);
VpVolt=map(VpDigit, 0, 1023, 0, 500);
VpVolt=VpVolt/100;
Serial.print("Valore digitale:");
Serial.print(VpDigit);
Serial.print(" ");
Serial.print("Tensione:");
Serial.print(VpVolt);
Serial.println(" V");
delay(2000);
}

La prima istruzione del loop effettua la lettura del valore analogico di tensione presente sul pin 0 e restituisce un numero, VpDigit, compreso tra 0 e 1023, proporzionale alla tensione. La tensione Vpvolt si calcola da VpDigit con la proporzione:

Vpvolt=(Vpdigit *5)/1023

Per calcolare la proporzione è utile l'istruzione:

VpVolt=map(VpDigit, 0, 1023, 0, 500)

La funzione map converte il valore di VpDigit, compreso nell'intervallo tra 0 e 1023, in un nuovo valore proporzionale, compreso tra 0 e 500; in questo modo, dividendo per 100 nella successiva istruzione, si ottiene una tensione VpVolt che varia tra 0 V e 5 V, con due cifre decimali. Per poter esprimere VpVolt con due cifre decimali, la variabile è stata dichiarata di tipo float. Scriviamo poi i valori di VpDigit e VpVolt sul Monitor Seriale. Naturalmente sull'ingresso del voltmetro (pin AO) possiamo collegare qualunque tensione, compresa tra o Ve 5 V; il potenziometro serve solo per testare il circuito.