Un segnale rappresenta come una certa grandezza (per esempio la tensione elettrica) varia in funzione di un’altra grandezza (per esempio il tempo). Ovviamente si può pensare a segnali che dipendono da più grandezze e descrivere come tale dipendenza evolva. In figura abbiamo il grafico di un segnale che descrive come varia la temperatura durante il giorno.
Dalla rappresentazione riusciamo a capire come varia la temperatura: fino alle 07.00 di mattina la temperatura era sotto i 21 gradi, dalle 08.00 in poi c’è una veloce crescita fino al valore di quasi 40°C che rimane pressappoco stabile fino alle 17.00. Tra le 17.00 e le 23.00 c’è una forte diminuzione fino ai 23°C circa.
Questo segnale descrive la variazione di una grandezza “analogica” cioè di una grandezza fisica che varia con continuità in funzione dell’altra da cui dipende. In natura quasi ogni fenomeno si può descrivere con un segnale analogico, invece in informatica, spesso, le grandezze variano con discontinuità, saltando da un valore discreto ad un altro.
In figura è rappresentata una grandezza analogica f(x), per esempio potrebbe essere una tensione elettrica che varia nel tempo v(t). Di questa grandezza potremmo anche considerare i valori in un intervallo piccolo (solo un quadratino) oppure piccolissimo, avremmo sempre dei valori individuabili sulla curva verde. Il computer però non potrebbe trattare tante informazioni, per non occupare la memoria. Il computer tratta un numero finito di informazioni e quindi invece di considerare il segnale in forma analogica (curva verde) lo approssima con un segnale digitale (curva a scalini arancione). Quel segnale arancione è fatto di valori discreti, discontinui: la curva salta da un valore ad un altro: il segnale digitale.
Con Arduino, in particolare, si può lavorare su due tipi di segnali: segnali digitali e segnali analogici. inoltre il segnale digitale può essere un segnale PWM.
L’istruzione digitalWrite(pin, stato) produce un valore di tensione alto o basso (+5V o +0V) che nel tempo è descritto da un segnale di questo tipo:
Si tratta di un segnale discreto che assume solo i valori ALTO o BASSO, solo 2 valori discreti. Ma un output di tensione lo si può dare anche attraverso l’istruzione analogWrite(pin, dc) che produce un segnale digitale la cui ampiezza viene controllata dal parametro “dc” (detto “duty cicle”).
Il parametro “dc” rappresenta la percentuale di tempo che il segnale è alto rispetto al periodo del segnale. se dc=0 si ha un segnale che è sempre basso, se dc=255 si ha un segnale sempre alto, se dc=64 si ha un segnale alto per ¼ del periodo. La figura spiega bene l’utilizzo del duty cicle.
Il segnale analogico è quello che possiamo “campionare” da un sensore come il sensore di temperatura. Arduino trasforma comunque questo segnale in un segnale digitale con una procedura detta “campionamento”. Il circuito che effettua la conversione da segnale analogico a segnale digitale si chiama ADC (analog to digital converter). Esiste un circuito che fa il processo inverso (da digitale in analogico) detto DAC (digital to analog converter).
Ricapitolando Arduino tratta i segnali digitali, i segnali digitali modulati in ampiezza (PWM), i segnali analogici.