Input e Output

Un led, per arduino, è un dispositivo di output.
Accenderlo o spengerlo, infatti, corrisponde a una operazione di scrittura, ed è eseguito dalla funzione di sistema digitalWrite().

Arduino, però è un sistema capace di dialogare in modo completo con l'ambiente esterno, acquisendo informazioni attraverso sensori di ogni genere e tipo.
I sensori sono dispositivi di input.

Un sensore acquisisce una informazione dall'esterno. Arduino prima elabora l'input, eseguendo le istruzioni che il programmatore ha definito preventivamente e poi produce, in ouput delle azioni conseguenti, come ad esempio l'accensione o lo spegnimento di una luce. L'esempio della resistenza fotosensibile citato in precedenza descrive esattamente questo processo. Ora vogliamo seguire nel dettaglio un percorso per realizzarlo concretamente.

La prima cosa da fare è comprendere il funzionamento di un input, come una resistenza fotosensibile, incominciando dal circuito fisico e studiando poi il codice di base.

L'hardware

big.jpg

Questa è la nostra fotoresistenza.

Sembra una stufetta!!!

Sì. :-). È proprio una stufetta, ma all'incontrario. Anziché prelevare energia da un circuito elettrico ed emetterla nell'ambiente, funziona esattamente a rovescio. Un sensore fotosensibile è un dispositivo capace di raccogliere energia dalla luce esterna1) e introdurla in un circuito sotto forma di corrente. La forma a serpentina serve per aumentare la superficie di scambio con l'ambiente.
Bisogna dire però che l'elettronica non descrive i sensori di luce in questi termini, perché le correnti elettriche in gioco sono molto piccole e difficili da misurare.

Tuttavia, in elettronica si possono misurare facilmente i livelli di potenziale.
Perciò si ricorre ad alcune semplificazioni pratiche, che risultano però molto funzionali.

Quando il sensore è oscurato2) e non riceve luce dall'ambiente, oppone una grande resistenza al passaggio della corrente. Se invece, il sensore viene illuminato, la corrente immessa nel circuito può far credere che la resistenza del sensore sia improvvisamente diminuita. In elettronica, il valore di una resistenza può essere confrontato con quello di un'altra resistenza fissa, con un dispositivo apposito chiamato partitore di tensione, che proviamo a descrivere qualitativamente nel seguito.

Il partitore di tensione

Osserviamo i due circuiti gemelli nell'immagine:

ldrup_down.jpg

Rappresentano i due modi equivalenti di collegare in serie due resistenze, una fissa e una variabile - la nostra fotoresistenza.
Agli estremi del circuito possiamo collocare un punto di alimentazione3) e un livello di terra.
Il punto V, centrale tra le due fotoresistenze corriponde a un livello di potenziale variabile.

Per capirlo, guardiamo ad esempio il circuito sulla sinistra. La corrente elettrica fluisce partendo dal nodo di alimentazione a 5 Volt e poi attraversa la resistenza fotosensibile.
Il punto V, collocato a valle della prima resistenza, corriponde a un valore inferiore a 5 volt, che dipende dal rapporto tra le misure delle due resistenze in gioco. Uno studente di quinto anno potrebbe facilmente trasformare in formule queste idee, ma per il momento proveremo a ragionare con strumenti del tutto qualitativi.
Supponiamo ad esempio che le due resistenze siano perfettamente uguali. Possiamo intutire che, in questo caso, il punto V corriponderebbe a un potenziale di 2,5 V esatti, perchè siamo a metà strada in un percorso che scende da un livello di 5 Volt, fino a terra.
Se però la fotoresistenza fosse ben illuminata, avrebbe certamente un valore molto più piccolo della resistenza fissa. La differenza di potenziale ai capi della fotoresistenza, dunque, sarebbe molto piccolo, come se fossimo scesi di un solo pianerottolo dalle scale di un grattacielo.
Se, al contrario, la fotoresistenza venisse oscurata, il salto di potenziale sarebbe molto grande e il punto V scenderebbe ad un'altezza vicina a terra.

In altre parole, misurare il potenziale nel punto V permette di fare un confronto tra le due resistenze. Se V è grande, cioè vicino a 5V, significa che la fotoresistenza è molto bassa e quindi è ben illuminata. Se V è piccola, invece, significa che la resistenza fotosensibile è elevata e che quindi è in stato di oscurità.

Il Codice

Per progettare un programma che utilizza l'input della fotoresistenza, è necessario scegliere contestualmente anche qualche azione di ouput.
Una cosa particolarmente immediata è istruire arduino a stampare il valore rilevato in input sulla porta seriale, cioè attraverso il cavetto usb che si può usare sia per l'alimentazione che per scambiare dati con un computer esterno. Questo è il codice minimale:

$ cat inputSeriale.ino
#define FOTORESISTENZA 0 //canale fisico di lettura
#define RITARDO 1000     //ritardo tra una lettura e la successiva, utile per non sovraccaricare eccessivamente il sistema

int lettura; //variabile intera, necessaria per memorizzare il valore di input.

void setup(void)
{
  Serial.begin(115200);  // Impostazione della velocità della porta seriale (il canale usb di comunicazione).
}

void loop(void)
{
  lettura=analogRead(FOTORESISTENZA);            // lettura dell'input
  Serial.print("lettura misurata = ");    // stampa di una stringa, senza ritorno a capo
  Serial.println(lettura);                // stampa del valore letto, con successivo ritorno a capo, per comodità di lettura.
  delay(RITARDO);
}

La stampa dei dati

Per leggere i valori calcolati, è necessario effettuare una stampa sul terminale.
Dal punto di vista del calcolatore al quale abbiamo connesso la porta usb, arduino è un dispositivo esterno.
Il sistema operativo Linux assegna a ciascun dispositivo esterno un percorso riservato, all'interno di una directory chiamata /dev.
Nella configurazione del nostro sistema, questo percorso è /dev/arduino.
Per leggere l'ouput di arduino si può usare il comando cat, che è lo stesso che usiamo normalmente per leggere un qualunque file del sistema:

$ cat /dev/arduino
lettura misurata = 838
lettura misurata = 823
lettura misurata = 835
lettura misurata = 613
lettura misurata = 332

Si tratta di numeri interi, conpresi nell'intervallo tra 0 e 1023.
Infatti, arduino legge le differenze di potenziale con una precisione a 10 bit.
Il valore 1023 corrisponde a una tensione di 5 Volt.
Il valore 1 corrisponde a una tensione di circa 5*10^-3 Volt4).

Giocando con la nostra fotoresistenza, ci siamo accorti che letture reali variavano da circa 900 LSB (in piena luce) a circa 70 LSB (con il cappuccio).

Altri programmi

Alla lunga leggere numeri sul terminale diventa noioso.
Perchè non inventare qualche altra possibile azione di output?

Allora abbiamo pensato di riutilizzare il led e abbiamo creato due programmi, uno per imparare le istruzioni di scelta e uno per imparare ad usare qualche istruzione ciclica.

1) un po' come le foglie degli alberi
2) per esempio con un cappuccio
3) 5 Volt
4) è il cosidetto valore meno significativo, indicato spesso con il simbolo LSB
input_e_ouput.txt · Ultima modifica: 2014/03/10 04:08 da marco
 
Ad eccezione da dove è diversamente indicato, il contenuto di questo wiki è soggetto alla seguente licenza: CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki sintassi italiana dokuwiki