Go Down

Topic: sensore temperatura (Read 1 time) previous topic - next topic

blanga

ciao a tutti stavo provando a far funzionare un sensore di calore  a cui vorrei fargli stapare i dati su lcd ma per iniziare ho escluso lcd comunque ho trovato del codice su questo sito
http://www.danielandrade.net/2008/07/05/temperature-sensor-arduino/

lo provo funziona ma mi da 500 gradi celsius  pure quando setto il massimo a 100

milionario

prova a posarci il codice che hai usato tu

blanga

#2
Jun 19, 2010, 11:44 pm Last Edit: Jun 19, 2010, 11:45 pm by blanga Reason: 1
il codice è questo

/*
An open-source LM35DZ Temperature Sensor for Arduino. This project will be enhanced on a regular basis
(cc) by Daniel Spillere Andrade , http://www.danielandrade.net
http://creativecommons.org/license/cc-gpl
*/

int pin = 0; // analog pin
int tempc = 0,tempf=0; // temperature variables
int samples[8]; // variables to make a better precision
int maxi = -100,mini = 100; // to start max/min temperature
int i;

void setup()
{
Serial.begin(9600); // start serial communication
}

void loop()
{

for(i = 0;i< =7;i++){ // gets 8 samples of temperature

samples = ( 5.0 * analogRead(pin) * 100.0) / 1024.0;
tempc = tempc + samples;
delay(1000);

}

tempc = tempc/8.0; // better precision
tempf = (tempc * 9)/ 5 + 32; // converts to fahrenheit

if(tempc > maxi) {maxi = tempc;} // set max temperature
if(tempc < mini) {mini = tempc;} // set min temperature

Serial.print(tempc,DEC);
Serial.print(" Celsius, ");

Serial.print(tempf,DEC);
Serial.print(" fahrenheit -> ");

Serial.print(maxi,DEC);
Serial.print(" Max, ");
Serial.print(mini,DEC);
Serial.println(" Min");

tempc = 0;

delay(1000); // delay before loop
}

blanga

ho trovato un altro tutorial  http://cinquetau.altervista.org/blog/2010/02/28/usare-un-lm35-per-misurare-temperature-negative-con-arduino/
Code: [Select]
/* ----------------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);

}


ma è uguale mi da valori assurdi 360 gradi

blanga

ragazzi  mi sa che cio il sensore mezzo scrauso ;D ;D ;D ;D
ho provato anche questalro codice funziona benissimo  ma mi da sempre che fanno 62 gradi

Code: [Select]
//TMP36 Pin Variables
int sensorPin = 0; //the analog pin the TMP36's Vout (sense) pin is connected to
                       //the resolution is 10 mV / degree centigrade with a
                       //500 mV offset to allow for negative temperatures

#define BANDGAPREF 14   // special indicator that we want to measure the bandgap

/*
* setup() - this function runs once when you turn your Arduino on
* We initialize the serial connection with the computer
*/
void setup()
{
 Serial.begin(9600);  //Start the serial connection with the computer
                      //to view the result open the serial monitor
 delay(500);
}

void loop()                     // run over and over again
{
 // get voltage reading from the secret internal 1.05V reference
 int refReading = analogRead(BANDGAPREF);  
 Serial.println(refReading);
 
 // now calculate our power supply voltage from the known 1.05 volt reading
 float supplyvoltage = (1.05 * 1024) / refReading;
 Serial.print(supplyvoltage); Serial.println("V power supply");
 
 //getting the voltage reading from the temperature sensor
 int reading = analogRead(sensorPin);  

 // converting that reading to voltage
 float voltage = reading * supplyvoltage / 1024;

 // print out the voltage
 Serial.print(voltage); Serial.println(" volts");

 // now print out the temperature
 float temperatureC = (voltage - 0.5) * 100 ;   //converting from 10 mv per degree wit 500 mV offset
                                              //to degrees ((volatge - 500mV) times 100)
 Serial.print(temperatureC); Serial.println(" degress C");

 // now convert to Fahrenheight
 float temperatureF = (temperatureC * 9 / 5) + 32;
 Serial.print(temperatureF); Serial.println(" degress F");

 delay(1000);                                     //waiting a second
}

Go Up