Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Ritorna alla Home Page

Analogico o Digitale?

  • I segnali in ingresso e in uscita possono essere analogici o digitali.

  • Un segnale analogico può assumere qualsiasi valore (all'interno di un range noto). Con notevole semplificazione, si può pensare che siano "analogiche" tutte le grandezze fisiche misurabili nell'ambiente.

  • Un segnale digitale può assumere due soli stati (High/Low, 1/0), corrispondenti a due livelli di tensione convenzionali (ad esempio, 5-0V). Con simile semplificazione, si può pensare che siano "digitali" tutte le informazione scambiate tra componenti logici (microprocessori, memorie, interfaccie di rete, display...).

Come viene letto un segnale Analogico o Digitale?

  • Affinchè possa essere letto ed elaborato da Arduino, il segnale analogico deve essere campionato, ovvero convertito in una sequenza di bit che ne esprime l'ampiezza.

  • Un segnale digitale è immediatamente "leggibile" non appena ne è stato discriminato il livello (Hight/Low).

  • Del segnale analogico interessa leggere il valore istantaneo, opportunamente campionato.

  • Del segnale digitale occorre sapere solo lo stato alto o basso.

Arduino come riconosce se un segnale è di ingresso o di uscita?

  • Affichè Arduino riconosca se sul PIN a cui facciamo riferimento sia presente un segnale di Ingresso o Uscita, I PIN digitali devono essere preventivamente impostati in modalità input o output. Questo avviene tramite pinMode.

Esempio: pinMode(13, OUTPUT);

imposta il PIN 13 in modalità OUTPUT. Questo significa che dal PIN 13 può "uscire" un segnale digitale e quindi potrà risultare Alto o Basso. (In pratica a livello elettronico potrà essere emessa una tensione che assumerà due soli valori, 5V o 0V).


Esempio: pinMode(2, INPUT);

Questo esempio, invece, imposta il PIN 2 in modalità INPUT. Questo significa che dal PIN 2 può "entrare" un segnale digitale che come nel caso precedente dovrà risultare Alto o Basso.


Da notare bene che solo i PIN Digitali vanno preventivamente impostati, quelli analogici no.

Come leggo o scrivo sui PIN?

  • La lettura e Scrittura avvengono attraverso funzioni dedicate.

  • Per i PIN Digitali abbiamo:

digitalWrite() e digitalRead()

  • Per i PIN Analogici invece:

analogWrite() e analogRead()


Esempio di "scrittura" Digitale :

pinMode(13, OUTPUT); //Imposto il PIN 13 in modalità OUTPUT
digitalWrite(13, HIGH); //Scrivo sul PIN 13 il valore Alto
 

Questo codice imposta prima il PIN 13 in modalità OUTPUT (come visto in precedenza). Successivamente "Scrive" sullo stesso PIN un valore Alto.


Esempio di "lettura" Analogica:

int valore; //Dichiaro una variabile intera di nome "valore"
valore = analogRead(1); //Assegno alla variabile la lettura del PIN 1
 

Questo codice dichiara una variabile intera di nome "valore". Succesivamente assegna a quest'ultima il valore analogico "letto" sul PIN Analogico 1.


Dove sono i PIN di INPUT/OUTPUT su Arduino 2009?

Differenza tra Input Digitale e Input Analogico

  • A differenza di un Ingresso Digitale che può assumere i due valori LOW (basso) e HIGH (Alto) che corrispondono rispettivamente ad una tensione nulla (GND) o positiva (+5V), con un Ingresso Analogico è possibile leggere tensioni comprese tra 0 e +5V.

  • La funzione analogRead(), come abbiamo visto nell'esempio precedente, riceve come parametro il numero del PIN Analogico da leggere e restituisce un numero intero assegnandolo ad una variabile.

Il numero intero restituito è compreso tra 0 e 1023. Questo significa che il segnale analogico in ingresso viene campionato con una risoluzione di 10 Bit (2^10=1024), ovvero divedendo la massima tensione (+5V) applicabile all'ingresso per 1024 otteniamo una unità di 4,9 mV (la risoluzione massima espressa in Volts).

Qualsiasi grandezza opportunamente trasformata in una tensione può essere letta da Arduino:

  • Temperatura: sensore di temperatura
  • Rotazione: potenziometro
  • Intensità luminosa: fotoresistenza
  • Distanza: sensore ad infrarossi
  • Inclinazione: accelerometro
  • ...

Esempio di lettura analogica tramite sensore di temperatura LM35DZ

  • I sensori Analogici attivi (quelli ai quali è necessario fornire alimentazione) forniscono un segnale leggibile direttamente da Arduino.

Il sensore di temperatura LM35DZ restituisce una tensione d'uscita proporzionale alla temperatura ambientale: 10 mv per ogni °C (grado centigrado).

Poichè è un sensore attivo occorrerà fornigli alimentazione. Quest'ultima può essere prelevata direttamente da Arduino che mette a disposizione dei PIN opportuni. Il sensore è dotato di tre piedini, rispettivamente due di alimentazione (GND e +5v) e uno di uscita (VOUT). Quindi occorrerà semplicemente collegare i tre piedini del sensore direttamente ai PIN opportuni di Arduino secondo il seguente schema:

Abbiamo deciso di utilizzare come PIN Analogico di Ingresso il numero 5, come facilmente osservabile dallo schema.

A questo punto vediamo come implementare lo sketch del prototipo:


int PIN_TEMP=5; //Assegniamo alla variabile il pin di ingresso analogico scelto
int temp; //Dichiariamo la variabile che conterrà il valore della temperatura

void setup()
{
}

void loop()
{
  temp= analogRead(PIN_TEMP)*0.5; //Assegniamo alla variabile temp il valore restituito dalle lettura del pin 5
  delay(100); //Aspettiamo 100 mS prima di leggere un nuovo valore
}


  • Perche abbiamo moltiplicato la lettura per 0.5 ?

Ogni step di analogRead() corrisponde a circa 5mV (la risoluzione è di 4,9 mV, ricordate?); Un grado centigrado corrisponde a un intervallo di 10mV, dunque:

temp=analogRead(PIN_TEMP)* 5/10

Differenza tra Output Digitale e Output Analogico

Ritorna alla Home Page