======= L'input e i sensori ======= Un [[gli_sketch|led]], per arduino, è un dispositivo di **output**.\\ Accenderlo o spengerlo, infatti, corrisponde a una operazione di //scrittura//, ed è eseguito dalla funzione di sistema [[http://arduino.cc/en/Reference/DigitalWrite|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 elabora l'//input//, eseguendo le istruzioni del programmatore e produce in //ouput// delle azioni conseguenti. Per esempio, accende o spegne una luce.\\ Un dispositivo di input molto comune è la resistenza fotosensibile. Cerchiamo di capire come funziona. ===== L'hardware ===== [[http://www.gioblu.com/tutorials/sensori/135-fotoresistenze-o-ldr-o-cds-con-arduino|{{http://www.megalab.it/images/contents2/41102/big.jpg?150 }}]] Questa è la nostra **fotoresistenza**. >Sembra una stufetta!!! > Sì. :-). È proprio una stufetta, ma all'//incontrario//. Anziché prelevare energia da un circuito elettrico ed immetterla nell'ambiente, funziona esattamente a rovescio. Un sensore fotosensibile è un dispositivo capace di raccogliere energia dalla luce esterna,un po' come la clorofilla nei vegetali, trasformarla in energia elettrica e introdurla in un circuito sotto forma di corrente. La forma a serpentina serve per aumentare la superficie di scambio con l'ambiente. Per la verità, la corrente introdotta da una fotoresistenza è così piccola che, in elettronica, sarebbe impossibile misurarla.\\ Fortunatamente, però, è possibile costruire dei circuiti capaci di rivelare l'azione della luce incidente come cambiamento di un **livello di potenziale**. Per riuscirci, è necessario fare un piccolo trucco. Si costruisce un circuito, chiamato **partitore di tensione**, mettendo la resistenza variabile in serie con una resistenza fissa e si alimenta il sistema con una differenza di potenziale costante((generalmente, 5 V)).\\ Quando il sensore è oscurato, per esempio con un cappuccio, 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. Misurando il livello di potenziale in un punto intermedio, tra le due resistenze, si osserva un cambiamento rilevante, che i sensori di Arduino((sensibilissimi ai potenziali elettrici)) possono misurare con precisione. In questo modo, si riesce in pratica a confrontare la resistenza costante con quella variabile. ===== Il partitore di tensione ===== Osserviamo i due circuiti gemelli nell'immagine: [[http://www.gioblu.com/tutorials/sensori/135-fotoresistenze-o-ldr-o-cds-con-arduino|{{ http://digilander.libero.it/Brainbastard/images/LdrUp_down.jpg?300 }}]] 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 alimentazione((5 Volt)) 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 problema del partitore ===== Giocando con l'elettronica si incontra spesso il concetto di potenziale elettrico e ci si accorge che, in certi casi, è possibile farne uso con facilità, senza averlo studiato in modo approfondito in un corso specifico di fisica.\\ Questo accade perché, ai fini pratici la differenza potenziale è una grandezza che può essere assimilata all'altitudine di una località di montagna.\\ Proprio usando l'analogia tra differenza di potenziale e dislivello, possiamo costruire un problema che riproduce fedelmente il comportamento del partitore di tensione.\\ Immaginiamo un laghetto ai piedi di una collina. Da questo parte una strada che raggiunge un belvedere tramite due tratti rettilinei e un solo tornante.\\ Il primo tratto è formato da una strada battuta di pendenza costante. L'altro, invece, può variare a seconda della stagione o del tempo atmosferico. durante l'inverno, infatti, si utilizza una pista da sci molto ripida, servita da una seggiovia per la risalita. In estate al seggiovia è chiusa e viene usata una strada panoramica poco pendente. I turisti, poi, utilizzano, a seconda delle opportunità, anche altri percorsi con pendenze intermedie.\\ La relazione tra la resistenza variabile del fotoresistore e la differenza di potenziale rilavata in input è identica alla relaziona tra la pendenza del secondo tratto di salita e l'altitudine del tornante in cui si inverte la direzione. L'animazione sottostante rappresenta graficamente il problema del partitore di tensione: Possiamo a questo punto cercare anche una soluzio algebrica. Con riferimento al grafico soprastante, possiamo chiamare $h$ l'altitudine del tornante, $H$ l'altitudine relativa del Belvedere, misurata a partire dal Lago, $m_l$ la pendenza del tratto di strada che parte dal lago ed $m_B$ la pendenza del tratto che raggiunge il Belvedere, risulta: $h=m_l x$\\ $H-h=m_B x$\\ e, dividendo membro a membro:\\ $\frac{h}{H-h}=\frac{m_l}{m_B}$\\ $h=\frac{m_B+m_l}{m_L} H$ Sostituiamo allora il potenziale all'altitudine e le resistenze alle pendenze e otteniamo: $V_{misurato}=\frac{R_{variabile}+R_{fissa}}{R_{fissa}} V_0$ ===== 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 Volt((è il cosidetto valore meno significativo, indicato spesso con il simbolo LSB)). 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).