Un modo per poter simulare l'input da un sensore analogico e valutare il funzionamento degli AD converter di Arduino è quello di utilizzare un potenziometro, che è un componente attraverso il quale è possibile variare il valore di una resistenza interna attraverso una "manopola" e quindi la corrispondente tensione ai suoi capi. Esso è caratterizzato da tre pin, di cui due rispettivamente per la massa e la tensione di riferimento (es. 5 V) ed il terzo per l'uscita che va collegato all'Arduino.
Supponiamo di voler realizzare un semplice programma attraverso il quale leggere il valore di tensione del potenziometro ed inviarla in tempo reale al nostro PC di sviluppo attraverso la porta seriale (utilizzando il cavo USB).
Potenziometro
Per la realizzazione ed il disegno del circuito, possiamo utilizzare il tool Fritzing che mette a disposizione un'ampia libreria di componenti e di board, tra cui anche Arduino. In realtà, il sito offre anche un servizio di stampa del PCB (Printed Circuit Board), ossia del circuito stampato, che viene generato dal tool stesso. Non ha bisogno di installazione (basta semplicemente estrarre il file zip una volta scaricato) ed il suo utilizzo è semplice ed immediato grazie ad una "lavagna" virtuale (sulla quale troviamo una breadboard) su cui trascinare e collegare tra loro i componenti disponibili nella toolbox laterale.
Avvalendoci di Fritzing, supponiamo di voler utilizzare il pin analogico 0 della nostra "Arduino Uno" come input e colleghiamo ad esso il piedino di output del potenziometro (quello centrale); ovviamente gli altri pin di quest'ultimo saranno collegati alla tensione di 5 V ed alla massa forniti direttamente su uno dei connettori della board.
Lo sketch per leggere il potenziometro
Per quanto riguarda la realizzazione dello sketch, la funzione di libreria che possiamo utilizzare è la analogRead(pin) che prevede in ingresso il numero del pin da cui leggere (nel nostro caso il pin 0) e restituisce un valore compreso tra 0
e 1023
in relazione alla tensione di riferimento che di default è appunto 5V
.
Per cambiare la tensione di riferimento, possiamo utilizzare la funzione analogReference(type) il cui parametro rappresenta un enumerativo tra i cui valori c'è anche EXTERNAL
con il quale indichiamo di voler utilizzare come riferimento, la tensione "esterna" applicata al pin AREF
. Utilizzando i 5V
di default, la risoluzione con cui si riesce ad apprezzare la variazione di tensione del potenziometro è pari a 5/1024
ossia 4.9 mV
.
Sviluppando un banalissimo sketch, possiamo acquisire il valore ed inviarlo al PC collegato attraverso la porta seriale (utilizzata come strumento di debug). Per fare questo, possiamo utilizzare la classe Serial
che fornisce il metodo begin(speed)
per l'inizializzazione della porta con il baudrate specificato (va eseguita nella funzione setup()
dello sketch) ed il metodo println(val)
per la scrittura su di essa (da eseguire nell'ambito del loop).
int potentiometerPin = 0;
int value = 0;
void setup()
{
Serial.begin(9600); // inizializzazione porta seriale
}
void loop()
{
value = analogRead(potentiometerPin); // leggo valore potenziometro
Serial.println(value); // scrivo il valore sulla seriale come debugging
delay(500);
}
Nella figura seguente possiamo osservare come I valori ottenuti in seguito alla conversione da analogico a digitale varino da 0 a 1023 al variare della posizione del potenziometro dal minimo (0V
) al massimo (5V
).
Valori del potenziometro acquisiti dalla "Arduino Uno"
Nel corso di questo capitolo, abbiamo fatto conoscenza con alcune tipologie di sensori che possiamo acquistare per divertici a realizzare i nostri primi progetti di Physical Computing. Inoltre, utilizzando un potenziometro, abbiamo acquisito dimestichezza nell'utilizzo dei pin analogici dell'Arduino che torneranno utili per utilizzare i sensori analogici. A partire dal prossimo capitolo vedremo in che modo Arduino possa collegarsi alla "grande rete" ed entrare a far parte del vasto mondo del "Cloud Computing".