Arduino 3: lettura analogica e trasferimento su seriale

A. Costantini | (la videolezione) Si dice che “la natura non fa salti”. I fenomeni fisici, in natura, hanno quasi sempre un comportamento analogico. La temperatura di un forno, la pressione in un serbatoio di gas, la velocità del vento e così via, sono tutte grandezze analogiche: variano cioè in modo continuo da un minimo a un massimo e per essere elaborate da un sistema digitale, come il microcontrollore, è necessario che esse siano convertite in forma numerica. Il processo di conversione di un segnale analogico in forma digitale richiede l’utilizzo di un dispositivo ADC (Analog to Digital Converter). Nella stragrande maggioranza dei casi, i microcontrollori, sono dotati di almeno un ADC; Arduino Uno, ad esempio, è in grado di gestire sei segnali analogici contemporaneamente. La codifica di un segnale analogico nella forma digitale avviene mediante livelli di quantizzazione. Il range di tensione su cui opera il dispositivo (ad esempio 0V-5V) viene suddiviso in minuscoli intervalli che individuano altrettanti livelli, che approssimano il valore analogico da convertire. Senza entrare troppo nel dettaglio, possiamo dire che la conversione analogico-digitale implica sempre un errore di approssimazione, infatti, se il valore di tensione che deve essere convertito cade tra due livelli di quantizzazione, bisogna decidere a quale livello deve essere associato e la differenza tra il livello di quantizzazione associato ed il valore reale è l’errore di approssimazione.

ADC-scalagif

L’errore massimo si ottiene quando il valore da convertire cade proprio a metà tra due livelli di quantizzazione successivi. L’ADC della scheda Arduino Uno ha una risoluzione di 10 bit, questo equivale a dire che abbiamo 210 = 1024 possibili combinazioni di bit e ogni volta che la scheda legge una tensione analogica, il convertitore fornisce un numero intero (in binario ovviamente) compreso tra 0 e 1023. Attenzione! La tensione analogica può assumere qualsiasi valore in un dato intervallo e sarebbero necessarie infinite possibili combinazioni, ma l’ADC ha la possibilità di codificarne “solo” 1024. Questo spiega la natura dell’errore di quantizzazione di cui si diceva. A titolo d’esempio, in questo articolo, leggeremo la tensione ai capi di un potenziometro, tramite l’ADC integrato nel microcontrollore della scheda di Arduino Uno. Ricordiamo che il potenziometro, che deve essere collegato come in figura sopra, ha tre terminali e, a differenza di un normale resistore, grazie ad una manopola è possibile variare il valore di resistenza presente tra uno dei due terminali laterali e quello centrale (il cursore). Se applichiamo una tensione ai due terminali esterni, ruotando la si ha una variazione della tensione d’uscita sul terminale centrale. Per leggere e convertire il segnale analogico usiamo la funzione “analogRead()” (tra le parentesi deve essere inserito il numero del pin analogico su cui è collegata l’uscita del potenziometro.

prog2png

In sostanza, il programma svolge tre azioni: legge il segnale analogico, scrive sulla porta seriale il numero letto e aspetta mezzo secondo. La scrittura sulla seriale consente di visualizzare il numero sul PC collegato alla scheda Arduino con cavo USB. Nel setup() la funzione “Serial.begin()” configura la seriale e tra le parentesi deve essere inserita la velocità di trasmissione dei dati, che non può essere scelto a piacere, ma deve essere selezionato tra i valori seguenti valori: 300bps, 1200bps, 2400bps, 4800bps, 7200bps, 9600bps, 19,2kbps, 38,4 kbps, 57,6 bps, 115,2 kbps. Notiamo che lo sketch sopra è quello a cui fa riferimento il post, mentre quello in figura è una variante in cui è stata inserita la gestione di un LED sulla base del valore analogico letto. 
Qui il Circuito Tinkercad:
- senza iscrizione é possibile simularlo, consultare la lista dei componenti, copiare il codice e scaricare il pdf dello schema;
- con l'iscrizione gratuita è possibile anche copiarlo e modificarlo a proprio piacimento.