Corso base di Arduino: l'acquisizione di segnali analogici

Una delle cose che Arduino sa fare meglio è quella di gestire i segnali digitali. I processori sono nati proprio per questo e lavorano su tale base. Ma la nostra scheda di sviluppo riesce anche a misurare i segnali analogici, permettendo di realizzare dispositivi molto utili in diversi campi di applicazione.

Avatar di Elettronica Open Source

a cura di Elettronica Open Source

banner prova1

In Rete, la letteratura che tratta dei segnali digitali e analogici è pressoché infinita. Basta effettuare una breve ricerca per ottenere tonnellate d'informazioni. Brevemente, i segnali analogici sono segnali che possono assumere infiniti valori in un intervallo ben stabilito.

Per esempio, una batteria può erogare una tensione di 1.06786653V oppure una di 2.6587V oppure ancora una di 2.6589V. Si tratta di valori infiniti di una determinata grandezza che è possibile (teoricamente) rappresentare con infinite cifre decimali. L'informazione misurata è, pertanto, reale. Purtroppo i processori non dispongono di una memoria illimitata, pertanto essi sono costretti a ridurre la precisione di rappresentazione, semplificando e riducendo il valore misurato in una grandezza digitale.

Ritornando alla misurazione di una pila di 3V essa, nel tempo, può assumere qualsiasi valore che sia compreso tra 0V e 3V, con infinite sfumature e combinazioni. La sua tensione può scendere, infatti, anche di un solo miliardesimo di Volt. Questa tensione, misurabile solo con sofisticati sistemi, è definita analogica.

Arduino e ingresso Analogico

L'ingresso digitale permette il riconoscimento tra due soli valori di tensione: 5V che corrisponde a un livello logico alto (Vero) e 0V che corrisponde ad un livello logico basso (Falso). Con un ingresso analogico, invece, Arduino è in grado di determinare esattamente (o quasi) il livello di tensione proveniente da un sensore o da un generatore. Dal momento che, come detto prima, la memoria non è infinita, tale quantità non può contenere infinite sfumature o infinite cifre decimali ma è costretta a essere ridotta e trasformata in un intervallo molto limitato, compreso tra 0 e 1023. Proponiamo i seguenti esempi di misura:

  • Un valore letto di 0 (0000000000b) corrisponde a 0V;
  • Un valore letto di 300 (0100101100b) corrisponde a 1,4V
  • Un valore letto di 800 (1100100000b) corrisponde a 3,9V;
  • Un valore letto di 1023 (1111111111b) corrisponde a 5V.

Non è possibile misurare tensioni superiori a 5V, se esse non vengono abbassate tramite appositi partitori. Questa suddivisione in 1024 scalini (compreso lo 0) determina una risoluzione di campionamento pari a 10 bit (2^10=1024) e fissa la minima tensione misurabile a 4,88mV (5V/1024).

figura 1 analogico e digitale
FIGURA 1 Analogico e digitale

Come si vede in figura 1, la tensione analogica, di colore verde, è convertita in una equivalente tensione digitale, di colore arancione. Purtroppo, gioco forza, in questa operazione si perde parte dell'informazione. Più è grande il numero di bit del convertitore (ADC) e meno saranno le perdite di qualità.

Monitoraggio di una pila piatta da 4,5V

Lo sketch di esempio è molto semplice ed efficace al tempo stesso. Si tratta di tenere sotto controllo una pila piatta da 4,5V. Arduino deve poter misurare la tensione ai suoi capi e fornire le seguenti sentenze, mediante tre diodi LED colorati diversamente:

  • Si illumina il LED verde se la tensione della batteria è maggiore di 3,9V;
  • Si illumina il LED giallo se la tensione è compresa tra 3V e 3.9V;
  • Si illumina il LED rosso se la tensione è inferiore a 3V, segno che la batteria è da gettare.

Lo schema elettrico e il cablaggio, entrambi molto semplici, sono proposti in figura 2.

figura 2 schema e cablaggio
figura 2 schema e cablaggio

Per leggere un valore di tensione da una porta analogica si utilizza la funzione analogRead(porta). Lo sketch esegue ciclicamente (funzione loop()) alcuni compiti fondamentali:

  • Legge la tensione della batteria dal pin analogico A0, ottenendo un valore compreso tra 0 e 1023, a seconda dello stato del generatore;
  • Converte tale lettura in volt effettivi, utilizzando una semplice proporzione;
  • Spegne preventivamente i tre diodi LED;
  • Esamina le tre casistiche con altrettante clausole condizionali illuminando, di conseguenza, uno dei tre diodi LED.

figura 3 listato
FIGURA 3 Listato

Avendo a disposizione tale conoscenza è possibile sviluppare applicazioni di un certo livello qualitativo.

Tom's Consiglia

Per chi inizia ora e voglia dotarsi di tutto l'occorrente, Arduino Uno si trova facilmente a un prezzo abbordabile.