Differenze tra le versioni di "Arduino e sensori analogici"

Da GolemWiki.
(bozza)
 
m (linkate correttamente immagini)
Riga 1: Riga 1:
[[File:Analogpin.gif | 100px | Piedini analogici | thumb | left]]
+
{{Guide
[[File:Analogsig.gif | 250px | Segnale analogico | thumb | right]]
+
|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:Trimmer-schema.gif | 450px | Funzionamento di un potenziometro | thumb | center]]
+
[[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:Serialm-bottone.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 />
+
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 32: Riga 38:
 
==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 pressione, le termoresistenze, le fotoresistenze (si pu&ograve; intuire dai nomi a cosa servano); con questo schema puoi provare a realizzare un crepuscolare, ma se vuoi usare un altro dei sensori di cui parlavo prima, rimane quasi invariato.
 
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 pressione, le termoresistenze, le fotoresistenze (si pu&ograve; intuire dai nomi a cosa servano); con questo schema puoi provare a realizzare un crepuscolare, ma se vuoi usare un altro dei sensori di cui parlavo prima, rimane quasi invariato.
[[File:Fotores.gif | 500px | center]]
+
[[File:Arduino-fotores-schema.gif | 500px | center]]
  
 
<pre>
 
<pre>
Riga 49: Riga 55:
 
}
 
}
 
</pre>
 
</pre>
[[File:Fotores.jpg | 350px | Fotoresistenza: completamente illuminata ha una resistenza di circa 20K, mentre se si trova al buio di 500&#8486; | thumb | right]]
+
[[File:Arduino-fotores-test.jpg | 350px | Fotoresistenza: completamente illuminata ha una resistenza di circa 20K, mentre se si trova al buio di 500&#8486; | 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 anche 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'imamgine sopra. Se hai tempo puoi anche caricare un programma di test e farti inviare sul computer (come ho fatto prima col potenziometro) i valori.<br />
 
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 anche 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'imamgine sopra. Se hai tempo puoi anche caricare un programma di test e farti inviare sul computer (come ho fatto prima col potenziometro) i valori.<br />
Riga 56: Riga 62:
 
==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&amp;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&amp;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:tmp.gif | 500px | center]]
+
[[File:Arduino-temp-schema.gif | 500px | center]]
  
 
Dopo averlo collegato, bisogna interpretare il segnale ricevuto: ''il datasheet dice che'' lo 0&deg;C &egrave; a 500 mV, e ogni grado Celsius sono 10 mV; 510 mV sarà 1&deg;C, 600 mV 10&deg;C. Quindi:
 
Dopo averlo collegato, bisogna interpretare il segnale ricevuto: ''il datasheet dice che'' lo 0&deg;C &egrave; a 500 mV, e ogni grado Celsius sono 10 mV; 510 mV sarà 1&deg;C, 600 mV 10&deg;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 delle 21:16, 31 ott 2012


Piedini analogici
Segnale analogico

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.

Funzionamento di un potenziometro

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.

Arduino-trimmer.gif
//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 Arduino-serialm.gif 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 pressione, le termoresistenze, le fotoresistenze (si può intuire dai nomi a cosa servano); con questo schema puoi provare a realizzare un crepuscolare, ma se vuoi usare un altro dei sensori di cui parlavo prima, rimane quasi invariato.

Arduino-fotores-schema.gif
//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);
}
Fotoresistenza: completamente illuminata ha una resistenza di circa 20K, mentre se si trova al buio di 500Ω

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 anche 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'imamgine sopra. Se hai tempo puoi anche caricare un programma di test e farti inviare sul computer (come ho fatto prima col potenziometro) i valori.
Un consiglio... in questi casi è comodo usare un trimmer al posto della resistenza fissa: così puoi regolare il 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

Arduino-temp-schema.gif

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.