joi, 19 decembrie 2013

Senzorul de temperatura TMP36 (LM50) si Arduino

   In pachetul numit "The Arduino Starter kit" se gaseste si senzorul de temperatura TMP36 fabricat de ANALOG DEVICES, care este compatibil 100% cu senzorul fabricat de TEXAS INSTRUMENTS numit LM50 (care lucreaza similar cu mai cunoscutul senzor LM35).
   Fata de senzorul de temperatura LM335, senzorul TMP36 se conecteaza direct la tensiunea de alimentare.
  Un articol cu multe explicatii se gaseste la TMP36 Temperature Sensor de pe site-ul Adafruit Learning System:
   Am realizat si eu montajul si apoi am incarcat primul sketch de acolo obtinand:
   Deoarece valorile citite variaza prea mult, am facut o mica modificare la sketch, cititnd 10 valori la 200ms intre ele si apoi facand o medie.
   Sketch-ul modificat de mine este urmatorul:   
// original sketch from http://learn.adafruit.com/tmp36-temperature-sensor/using-a-temp-sensor
// adapted sketch by niq_ro from http://nicuflorica.blogspot.com

//TMP36 Pin Variables
int sensorPin = 0; //the analog pin the TMP36's Vout (sense) pin is connected to A0
                        //the resolution is 10 mV / degree centigrade with a
                        //500 mV offset to allow for negative temperatures
 /*
 * setup() - this function runs once when you turn your Arduino on
 * We initialize the serial connection with the computer
 */

// added part by niq_ro
float vmed = 0;
float ve = 0;  


void setup()
{
  Serial.begin(9600);  //Start the serial connection with the computer
                       //to view the result open the serial monitor 
}
 
void loop()                     // run over and over again
{
 vmed = 0;
 ve=0;
  
 for (int j = 0; j < 10; j++)  {
  
 //getting the voltage reading from the temperature sensor
 int reading = analogRead(sensorPin);  
    
 // converting that reading to voltage, for 3.3v arduino use 3.3
 float voltage = reading * 5.0;
 voltage /= 1024.0; 
 
 vmed = vmed + voltage;
 delay(200);
 
 }
 ve = vmed/10;
 
 // print out the voltage
 Serial.print(ve); Serial.println(" volts");
 
 // now print out the temperature
 float temperatureC = (ve - 0.5) * 100 ;  //converting from 10 mv per degree wit 500 mV offset
                                               //to degrees ((voltage - 500mV) times 100)
 Serial.print(temperatureC); Serial.println(" degrees C");
 
 // now convert to Fahrenheit
 float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
 Serial.print(temperatureF); Serial.println(" degrees F");
 
 delay(1000);                                     //waiting a second
}

   

Un comentariu: