sabato 26 luglio 2014

Termostato con LM335


Il datasheet del LM335 da cui sono state estratte le immagini, riporta una tensione di alimentazione compresa fra +5V e +40V.
Usando il sensore con Arduino tanto la tensione di alimentazioni quanto il valore della resistenza e del potenziometro si riducono di 1/3: Vcc= +5V; R= 4 Kohm (valore standard 3,9 Kohm; potenziometro = 3,3 Kohm o valori simili.


In questa tabella è evidenziato che a 25°C la tensione di uscita è di 2,98 V e che in assenza del potenziometro di taratura l'errore di lettura può oscillare fra i 2 ed i 4 gradi.



A 25°C la tensione analogica di A0 è di 2,98V con un rapporto di 2,98 / 25 = 0,1192.
Tale rapporto, essendo il dispositivo lineare, è uguale per tutti i valori di tensione.
Alla tensione di ingresso di 2,98V corrisponde, posto 0V = 0 bit e 5V=1023bit, un valore di 610 bit ed il valore 610 è ciò che si legge su display LCD o sull'IDE di Arduino. Il rapporto

C° = 25
Vin = 2,98 V
Vin / °C = 0,1192
bit = (+Vin * 1023) / +Vcc
bit = 2,98 * 1023 / 5 = 2,98 * 204,6 = 610

Il valore su seriale, espresso in bit, può quindi essere semplificato con la formula:

b>bit = +Vin * 204,6

Il rapporto gradi °C / bit, uguale per tutti i valori di tensione (il dispositivo è lineare) è:

25 : 204,6 = 0,040983606

La formula diretta da inserie nello sketch sarà sunque semplificata a:

°C= +Vin * 0,040983606



Con le formule inverse si costruisce la seconda tabella dove viene evidenziato che il valore massimo di temperatura è poco meno di 42°C.

Lo scketch che segue permette, con il raffronto con un sensore DHT11 la taratura del LM335

 /* Si confrantano fra loro tre sensori di
    temperatura.
    Il sensore DHT11  pin 2
    Il sensore LM335  pin A0 */
 
    #include <dht11.h>
   
    #define DHT11        2
    #define LM335       A0
   
    dht11 ValoreDHT11; 
  
     
    float clsiusLM335      =0;
    
   void setup()
         { pinMode(LM335, INPUT);    
           Serial.begin(9600);    }
 
   void loop(){
 
       ValoreDHT11.read(DHT11);
       float celsiusDHT =ValoreDHT11.temperature;
      
       clsiusLM335 = analogRead(LM335) *0.040983606 ;    
       
       Serial.println("\n");
       Serial.print("DHT11 Celsius  ");
       Serial.println(celsiusDHT);
       Serial.print("LM335 Celsius: ");
       Serial.println(clsiusLM335);

        
     delay(5000); }




Nessun commento:

Posta un commento