Differenze tra le versioni di "Arduino e sensori analogici"
(bozza) |
|||
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 1: | Riga 1: | ||
− | [[File: | + | {{Guide |
− | [[File: | + | |immagine=Pulsante-arduino.gif |
+ | |guida=Arduino | ||
+ | |precedente=Arduino_e_sensori_digitali | ||
+ | |indice=Elettronica_Opensource | ||
+ | |successiva=Arduino_e_il_PWM}} | ||
+ | [[File:Arduino-analog.gif | 100px | Piedini analogici | thumb | left]] | ||
+ | [[File:Arduino-analogsig.gif | 150px | Segnale analogico | thumb | right]] | ||
Dai piedini ''analog'' si possono leggere tensioni variabili da 0 a 5v, che Arduino trasforma in valori da 0 a 1023: il sensore analogico più facile da trovare è il '''potenziometro''', come quello per regolare il volume delle casse. Fisicamente è composto da 3 piedini ed al suo interno è presente una striscia di materiale resistente: se il potenziometro è da 20KΩ, quella striscia resiste 20KΩ; i piedini laterali sono collegati alle due estremità di questa striscia, mentre quello centrale è collegato ad un perno che può muoversi a contatto quando giri la manopola (vedi figura sotto). Se non sai che resistenza può produrre il tuo potenziometro collega il multimetro in funzione ''ohmetro'' ai piedini laterali e puoi leggerne il valore. | Dai piedini ''analog'' si possono leggere tensioni variabili da 0 a 5v, che Arduino trasforma in valori da 0 a 1023: il sensore analogico più facile da trovare è il '''potenziometro''', come quello per regolare il volume delle casse. Fisicamente è composto da 3 piedini ed al suo interno è presente una striscia di materiale resistente: se il potenziometro è da 20KΩ, quella striscia resiste 20KΩ; i piedini laterali sono collegati alle due estremità di questa striscia, mentre quello centrale è collegato ad un perno che può muoversi a contatto quando giri la manopola (vedi figura sotto). Se non sai che resistenza può produrre il tuo potenziometro collega il multimetro in funzione ''ohmetro'' ai piedini laterali e puoi leggerne il valore. | ||
− | [[File: | + | [[File:Arduino-trimmer-schema.gif | 450px | Funzionamento di un potenziometro | thumb | center]] |
Elettronicamente, il potenziometro è un '''partitore di tensione''': se lo alimenti dai piedini laterali, collegandolo ad una batteria, dal piedino centrale potrai leggere con il multimetro in modalità ''voltmetro'' una tensione che varia ruotando la manopola. Prova adesso a collegare il potenziometro ad Arduino: un piedino laterale a massa e l'altro a 5v, mentre quello centrale al piedino analog 0. | Elettronicamente, il potenziometro è un '''partitore di tensione''': se lo alimenti dai piedini laterali, collegandolo ad una batteria, dal piedino centrale potrai leggere con il multimetro in modalità ''voltmetro'' una tensione che varia ruotando la manopola. Prova adesso a collegare il potenziometro ad Arduino: un piedino laterale a massa e l'altro a 5v, mentre quello centrale al piedino analog 0. | ||
Riga 25: | Riga 31: | ||
</pre> | </pre> | ||
− | Caricato il listato apri il ''serial monitor'' di Arduino, cliccando sul bottone [[File: | + | Caricato il listato apri il ''serial monitor'' di Arduino, cliccando sul bottone [[File:Arduino-serialm.gif | 15px]] e vedrai apparire la tensione sul piedino. Ruotando da una parte il potenziometro puoi incrementare fino a 5v, mentre ruotandolo dall'altra decresce fino a 0. Per adesso non ti preoccupare di come abbiamo fatto a comunicare col computer, ne parleremo nelle prossime pagine.<br /> |
Per leggere il sensore si utilizza la funzione <code>analogRead(sensore)</code>, analoga a quella usata per il bottone, che come avrai visto legge il valore campionato dal convertitore analogico digitale del microchip. | Per leggere il sensore si utilizza la funzione <code>analogRead(sensore)</code>, analoga a quella usata per il bottone, che come avrai visto legge il valore campionato dal convertitore analogico digitale del microchip. | ||
Il convertitore analogico digitale (''ADC'') ha una risoluzione a 10 bit: questo significa che converte la tensione 0-5v | Il convertitore analogico digitale (''ADC'') ha una risoluzione a 10 bit: questo significa che converte la tensione 0-5v | ||
Riga 31: | Riga 37: | ||
==Resistenze variabili: come fare un crepuscolare== | ==Resistenze variabili: come fare un crepuscolare== | ||
− | Tutte le resistenze variabili vanno combinate con una seconda resistenza, a formare un partitore di tensione: un piedino va collegato a massa, l'altro ai 5V attraverso la seconda resistenza. Alcune resistenze variabili sono i sensori di | + | [[File:Arduino-resisens.jpg | thumb | 150px | right | Alcuni sensori analogici]]Tutte le resistenze variabili vanno ''combinate'' con una seconda resistenza, a formare un '''partitore di tensione''': un piedino va collegato a massa, l'altro ai 5V attraverso la seconda resistenza. Alcune resistenze variabili sono i '''sensori di forza''', le '''termoresistenze''', le '''fotoresistenze''' e i '''touch screen resistivi'''; con questo schema puoi provare a realizzare un ''crepuscolare'' con un sensore di luminosità (''fotoresistenza'', appunto), ma se vuoi usare un altro dei sensori precedenti, il listato rimane quasi invariato. |
− | [[File: | + | [[File:Arduino-fotores-schema.gif | 500px | center]] |
<pre> | <pre> | ||
Riga 49: | Riga 55: | ||
} | } | ||
</pre> | </pre> | ||
− | [[File: | + | [[File:Arduino-fotores-test.jpg | 350px | Fotoresistenza: completamente illuminata ha una resistenza di circa 20K, mentre se si trova al buio di 500Ω | thumb | right]] |
− | In questo programma il led 13 si accende se viene letto un valore inferiore alla soglia, che ho impostato a 300; questo valore dipende dal sensore che usi: può variare | + | In questo programma il led 13 si '''accende''' se viene letto un valore ''inferiore alla soglia'', che ho impostato a ''300''; questo valore dipende dal sensore che usi: può variare da fotoresistenza a fotoresistenza. Quindi ti chiederai come trovare un '''valore limite''' per far accendere il led... se sul componente è stampato un codice puoi provare a cercare il ''datasheet'', in modo da avere i dati abbastanza precisi, altrimenti ''tester alla mano'' e passa alle prove empiriche, come nell'immamgine a lato. Se hai tempo puoi anche caricare un programma di test e farti inviare i valori sul computer (come prima col potenziometro).<br /> |
− | ''Un consiglio...'' in questi casi è comodo usare un trimmer al posto della resistenza fissa: così puoi regolare | + | '''Un consiglio...''' in questi casi è comodo usare un trimmer al posto della resistenza fissa: così puoi regolare la soglia del tuo crepuscolare (o qualsiasi altro progetto sia) senza dover intervenire sul programma. |
==Altri sensori analogici: leggere la temperatura== | ==Altri sensori analogici: leggere la temperatura== | ||
Alcuni componenti sono già pronti all'uso perché ripartiscono la tensione senza troppi problemi, quindi basta alimentarli e leggere l'output dall'apposito piedino, per esempio l'accelerometro [http://www.robot-italy.com/product_info.php?cPath=15_136&products_id=1275 ADXL335] e il termometro [http://www.robot-italy.com/product_info.php?products_id=2331 TMP36], tanto per citare alcuni modelli; Vediamo un esempio | Alcuni componenti sono già pronti all'uso perché ripartiscono la tensione senza troppi problemi, quindi basta alimentarli e leggere l'output dall'apposito piedino, per esempio l'accelerometro [http://www.robot-italy.com/product_info.php?cPath=15_136&products_id=1275 ADXL335] e il termometro [http://www.robot-italy.com/product_info.php?products_id=2331 TMP36], tanto per citare alcuni modelli; Vediamo un esempio | ||
− | [[File: | + | [[File:Arduino-temp-schema.gif | 500px | center]] |
Dopo averlo collegato, bisogna interpretare il segnale ricevuto: ''il datasheet dice che'' lo 0°C è a 500 mV, e ogni grado Celsius sono 10 mV; 510 mV sarà 1°C, 600 mV 10°C. Quindi: | Dopo averlo collegato, bisogna interpretare il segnale ricevuto: ''il datasheet dice che'' lo 0°C è a 500 mV, e ogni grado Celsius sono 10 mV; 510 mV sarà 1°C, 600 mV 10°C. Quindi: | ||
Riga 80: | Riga 86: | ||
Un semplice programma che simula un termostato: il led si accende se la temperatura scende sotto la soglia impostata in gradi centigradi. | Un semplice programma che simula un termostato: il led si accende se la temperatura scende sotto la soglia impostata in gradi centigradi. | ||
+ | [[Category:Howto]] |
Versione attuale delle 19:05, 16 nov 2012
Stai leggendo la guida "Arduino"
Dai piedini analog si possono leggere tensioni variabili da 0 a 5v, che Arduino trasforma in valori da 0 a 1023: il sensore analogico più facile da trovare è il potenziometro, come quello per regolare il volume delle casse. Fisicamente è composto da 3 piedini ed al suo interno è presente una striscia di materiale resistente: se il potenziometro è da 20KΩ, quella striscia resiste 20KΩ; i piedini laterali sono collegati alle due estremità di questa striscia, mentre quello centrale è collegato ad un perno che può muoversi a contatto quando giri la manopola (vedi figura sotto). Se non sai che resistenza può produrre il tuo potenziometro collega il multimetro in funzione ohmetro ai piedini laterali e puoi leggerne il valore.
Elettronicamente, il potenziometro è un partitore di tensione: se lo alimenti dai piedini laterali, collegandolo ad una batteria, dal piedino centrale potrai leggere con il multimetro in modalità voltmetro una tensione che varia ruotando la manopola. Prova adesso a collegare il potenziometro ad Arduino: un piedino laterale a massa e l'altro a 5v, mentre quello centrale al piedino analog 0.
//analogico.ino const short sensore = 0; const short led = 13; void setup() { pinMode(led, OUTPUT); Serial.begin(9600); } void loop() { Serial.print("Lettura: "); Serial.print(map(analogRead(sensore),0,1023,0,5)); Serial.println(" V"); delay(200); }
Caricato il listato apri il serial monitor di Arduino, cliccando sul bottone e vedrai apparire la tensione sul piedino. Ruotando da una parte il potenziometro puoi incrementare fino a 5v, mentre ruotandolo dall'altra decresce fino a 0. Per adesso non ti preoccupare di come abbiamo fatto a comunicare col computer, ne parleremo nelle prossime pagine.
Per leggere il sensore si utilizza la funzione analogRead(sensore)
, analoga a quella usata per il bottone, che come avrai visto legge il valore campionato dal convertitore analogico digitale del microchip.
Il convertitore analogico digitale (ADC) ha una risoluzione a 10 bit: questo significa che converte la tensione 0-5v
in valori 0-1023. Per scoprire il valore originario della tensione presente sul piedino basta fare una semplice proporzione, svolta in automatico dalla funzione map.
Resistenze variabili: come fare un crepuscolare
Tutte le resistenze variabili vanno combinate con una seconda resistenza, a formare un partitore di tensione: un piedino va collegato a massa, l'altro ai 5V attraverso la seconda resistenza. Alcune resistenze variabili sono i sensori di forza, le termoresistenze, le fotoresistenze e i touch screen resistivi; con questo schema puoi provare a realizzare un crepuscolare con un sensore di luminosità (fotoresistenza, appunto), ma se vuoi usare un altro dei sensori precedenti, il listato rimane quasi invariato.
//crepuscolare.ino const short sensore = 0; const short led = 13; int soglia = 300; void setup() { pinMode(led, OUTPUT); } void loop() { if (analogRead(sensore) > soglia) digitalWrite(led,LOW); else digitalWrite(led,HIGH); }
In questo programma il led 13 si accende se viene letto un valore inferiore alla soglia, che ho impostato a 300; questo valore dipende dal sensore che usi: può variare da fotoresistenza a fotoresistenza. Quindi ti chiederai come trovare un valore limite per far accendere il led... se sul componente è stampato un codice puoi provare a cercare il datasheet, in modo da avere i dati abbastanza precisi, altrimenti tester alla mano e passa alle prove empiriche, come nell'immamgine a lato. Se hai tempo puoi anche caricare un programma di test e farti inviare i valori sul computer (come prima col potenziometro).
Un consiglio... in questi casi è comodo usare un trimmer al posto della resistenza fissa: così puoi regolare la soglia del tuo crepuscolare (o qualsiasi altro progetto sia) senza dover intervenire sul programma.
Altri sensori analogici: leggere la temperatura
Alcuni componenti sono già pronti all'uso perché ripartiscono la tensione senza troppi problemi, quindi basta alimentarli e leggere l'output dall'apposito piedino, per esempio l'accelerometro ADXL335 e il termometro TMP36, tanto per citare alcuni modelli; Vediamo un esempio
Dopo averlo collegato, bisogna interpretare il segnale ricevuto: il datasheet dice che lo 0°C è a 500 mV, e ogni grado Celsius sono 10 mV; 510 mV sarà 1°C, 600 mV 10°C. Quindi:
temperatura = (volt - 0.500)/0.010
Ma i pin analogici non danno i valori in millivolt, quindi bisogna convertire: dividendo l'output per 204.6, si ottiene il valore in volt; in conclusione
temperatura = (output/204.6 - 0.500)/0.010
//termostato.ino const short sensore = 0; const short led = 13; int soglia = 18; //18 gradi celsius void setup() { pinMode(led, OUTPUT); } void loop() { if ((analogRead(sensore)/204.6 - 0.500)/0.010 > soglia) digitalWrite(led,LOW); else digitalWrite(led,HIGH); }
Un semplice programma che simula un termostato: il led si accende se la temperatura scende sotto la soglia impostata in gradi centigradi.