tutorial lm35
Transcript
tutorial lm35
TUTORIAL: COME USARE UN LM35 PER MISURARE UNA TEMPERATURA SU TUTTA LA SCALA CENTIGRADA Molte persone (io compreso) che comprano la prima volta un LM35, lo fanno perché sono spinti da come sia facile da interfacciare con Arduino, in effetti è così, però poi si scopre che il solo integrato alimentato con 0 e +5 V può misurare solo temperature positive e non su tutta la scala (da -50°C a +150°C), facendo nascere un po’ sconforto per non essersi documentati prima. Tuttavia, nel datasheet sono presenti due strade per ottenere anche le temperature negative, la prima è quella di fornire una tensione duale all’integrato così che possa dare in uscita tensioni negative quando le temperature sono sotto lo zero. Questa modalità è abbastanza scomoda perché bisogna avere un alimentatore duale e scontrarsi comunque col fatto che Arduino da solo non può misurare tensioni negative. La seconda via da percorrere (che ci renderà felici) è quella di aggiungere due diodi e una resistenza, così da spostare il punto di massa dell’integrato, il funzionamento descritto per punti e a grandi linee il seguente: - I due diodi collegati in serie tra il GND del LM35 e il GND dell’alimentazione forniscono una tensione fissa di circa 0.960 V a temperatura ambiente; - Quando la temperatura è di 0°C l’uscita del sensore eguaglierà la caduta di tensione sui diodi; - Quando la temperatura è sottozero l’uscita del LM35 sarà una tensione inferiore alla caduta di tensione sui diodi; - Quando la temperatura è sopra lo zero l’uscita del LM35 sarà una tensione superiore alla caduta di tensione sui diodi; L’informazione che contiene il valore della temperatura è contenuto nella differenza tra il pin OUT e GND del sensore. Se la caduta di tensione sui due diodi fosse costante, basterebbe un solo pin di Arduino per misurare la temperatura, purtroppo non è sempre di 0.960V ma dipende dalla temperatura a cui si trovano i diodi e dipende anche dalla temperatura a cui si trova il sensore. Per questo motivo è necessario avere una misura di entrambi i pin del sensore per poter calcolare la corretta temperatura. Ad esempio: ad una temperatura di 21.5°C si ha: VOUT = 1.175V VGND = 0.960V Che sottratte fanno: 0.215V Se moltiplico per 100 ottengo il valore in gradi centigradi. La sensibilità del sensore è di 10mV/°C, se vogliamo aggiungere un po’ di risoluzione alla misura, visto che Arduino ha circa 4,9mV di risoluzione è necessario amplificare il segnale tramite un amplificatore operazionale. La configurazione che ho usato è quella non-invertente che da il seguente guadagno: _ 2 1 1 Quindi in base alle resistenze che avevo in casa ho usato: R2 = 56 kΩ; R1 = due resistenze da 18 kΩ in serie; ottenendo un guadagno di circa 2.56. Si possono ottenere guadagni diversi con combinazioni di resistenze diverse, l’importante è inserire poi il valore di guadagno giusto nel codice. I componenti: Q.tà n°1 n°1 n°2 n°1 n°2 n°5 Nome LM35DZ LM358N 1N4148 C = 4.7μF R2 = R4 = 56kΩ Resistenze da 18kΩ - R5 = 18kΩ - R1 = 36 kΩ - R3 = 36 kΩ Descrizione Sensore di temperatura integrato Doppio amplificatore operazionale, alimentato 0-5V Diodi veloci (non vanno bene gli 1N400x) Condensatore elettrolitico (non è essenziale) Resistenze da 56kΩ Resistenze da 18 kΩ - Due resistenze da 18kΩ collegate in serie Due resistenze da 18kΩ collegate in serie I calcoli che deve fare Arduino per effettuare la conversione sono i seguenti: - Fare la differenza dei due valori misurati ( VOUT_LM35 – VGND_LM35 ) Moltiplicare la differenza per 100 Dividere per il guadagno dell’amplificatore ( 2.56 ) Moltiplicare per la risoluzione dei pin analogici di Arduino (5/1024) Il codice che ho scritto fa la somma di dieci misurazioni, una ogni 500 millisecondi, dopodiché ne fa la media e calcola il valore di temperatura in gradi centigradi e scrive sulla seriale questi tre valori, che appariranno a distanza di 5 secondi. Ovviamente questi valori possono essere variati a piacimento. Il codice: /* ----------------LM35 per tutta la scala centigrada--------------Questo codice consente di usare un LM35 per misurare anche temperature negative. La configurazione usata è quella con due diodi tra il pin GND del sensore e il GND dell'alimentazione. Vengono prelevati due segnali che andranno a due ingressi analogici di Arduino: - il primo dal pin GND del LM35 chiamato "ref" - il secondo dal pin OUT del LM35 chiamato "sensoreTemperatura" La differenza tra "sensoreTemperatura" e "ref" contiene l'informazione della temperatura che il sensore ha misurato creato il 27 Febbraio 2010 da Federico Vanzati */ #define LM35_TEMP 0 // Pin analogico 0 #define LM35_REF 1 // Pin analogico 1 float temperatura; // variabile in cui viene salvata la temperatura in gradi centigradi float prev_temperatura = 0; // temperatura precendente int ref; // valore della tensione di riferimento dei due diodi int ref_medio = 0; // valore della tensione di riferimento medio int sensoreTemperatura; // valore di tensione letto dal pin OUT del sensore int sensoreTemperatura_medio = 0; // valore sensoreTemperatura medio int cont; //contatore usato per ottenere un valore medio void setup() { Serial.begin(9600); //inizializzazione della comunicazione seriale } void loop() { // vengono sommati 10 valori di temperatura per poi farne la media for( cont = 0; cont < 10; cont++) { sensoreTemperatura = analogRead(LM35_TEMP); // lettura della tensione del pin OUT LM35 sensoreTemperatura_medio += sensoreTemperatura; //sommatoria dei valori ref = analogRead(LM35_REF); // lettura della tensione di riferimento ref_medio += ref; // sommatoria dei valori delay(500); // intervallo di campionamento //la lettura durera' 10 (numero di camoioni) x 500ms (intervallo tra due campioni) = 5000ms } if(cont == 10) // quando ho sommato i dieci valori campionati si esegue: { cont = 0; // azzeramento contatore, per far ripartire il successivo campionamento // media della sommatoria dei dieci valori campionati di ref e sensoreTemperatura sensoreTemperatura_medio = sensoreTemperatura_medio / 10; ref_medio = ref_medio / 10; // conversione dei valori medi misurati in una temperatura in gradi centigradi temperatura = (sensoreTemperatura_medio - ref_medio) * 100/2.56; temperatura = temperatura * 5/1024; // valore di temperatura che verra' mostrato quando si e' in fase di campionamento //e non c'e' una temperatura disponibile prev_temperatura = temperatura; // stampa su seriale dei due valori medi Serial.print(" ref_medio: "); Serial.print(ref_medio); Serial.print(" temp_medio: "); Serial.print(sensoreTemperatura_medio); // prima di un successiva acquisizione e media questi valori vanno azzerati sensoreTemperatura_medio = 0; ref_medio = 0; } else{ temperatura = prev_temperatura; } // stampa su seriale della temperatura ottenuta in gradi centigradi Serial.print(" gradi: "); Serial.println(temperatura); }
Documenti analoghi
Convertitore TEMPERATURA-TENSIONE
tipo TTL (Transistor Transistor Logic), è necessario fornirgli un segnale di ampiezza compresa tra
0V e 5V perché tale componente possa funzionare correttamente. Per fare in modo che l’ampiezza
del...
6^ parte : Acquisizione della temperatura con LM35
il valore fornito dal convertitore A/D alla tensione di 5volt.
Poi si determinano i gradi Celsius con la formula: celsius =millivolts/10; questo poiché
come detto l’LM35 fornisce 10mv per grado. (1...