sensore temperatura

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

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

prova a posarci il codice che hai usato tu

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
}

ho trovato un altro tutorial http://cinquetau.altervista.org/blog/2010/02/28/usare-un-lm35-per-misurare-temperature-negative-con-arduino/

/* ----------------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

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

//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
}

il sensore a quanto lo alimenti? da 4 a 20V?

ciao blanga

Hai provatto di controllare con un tester che tensione tTi da il sensore?
a 20 Gradi dovrebbero essere 0,2V; a 100 sono 1V

Il sensore ti da 10 mV per grado Celsius percui devi moltipicare la temperatura per 10 e ottieni i mV che dovresti misurare.

Se questo é giusto hai un errore SW.
Ciao Uwe

il sensore è della seeduino e fa parte del electronic brick kit attacato a uno switc di porte che è ataccato ad arduino

però qui http://www.national.com/ds/LM/LM35.pdf
dice che il sensore va da +2 a +150 °C quindi 0V=+2°C e 10mV=+3°C
correggimi se mi sbaglio

ciao blanga
Se questo é il sensore: http://www.seeedstudio.com/depot/electronic-brick-temperature-sensoranalog-p-478.html?cPath=48_52
Non é mica un lm35 ma una resistenza variable (termistore) con un amplificatore.

Comunque permettimi la critica riguardante seeedstudio.com l' informazioni che danno sul loro sito sono scarse. Non aiuta allegare il datasheet del termistore senza dire quale é montato e senza dare informazioni riguardante il circiuto usato.

Comunque da quello che vedo il termistore dovrebbe fare un partitore di tensione con la resistenza da 1kOhm e visto che mancano altre resistenze l' amplificatore operazionale dovrebbe essere configurato da amplificatore non invertente con guadagno 1.

@ milionario
devo contradirti.
Il range di misura é giusto ma da 10mV per grado Celsius percui
2 Gradi 20mV
3 Gradi 30mV ecc
oppure configurato come da figura 2 (aggiunto una resistenza ad una tensione negativa) misura da -55 gradi fino a 150 Gradi.

aggiunta:
http://www.seeedstudio.com/depot/datasheet/StarterKitSch.pdf
trovi qualcosa come un schema elettrico che comunque non aiuta a capire che valori leggi in funzione della temperatura. Trovo poco professionale e serio lasciare non collegato un operazionale (l'integrato usato ne ha 2 e solo 1 é usato). almeno collega l' uscita del operazionale non usato con l' entrata negativa e l'entrata positiva a massa; cosí si evitano oscillazioni.
Neanche qua http://www.seeedstudio.com/depot/images/product/Electronic%20Bricks%20Vol1.1.pdf spiegano qualcosa.

Ciao Uwe

io permetto tutte le critiche tranquilli sopratutto su seeedstudio comunque ho pensato che era un lm35 perche su un cip che sara l'amplificatore allora cè scritto lm35 io pesavo fosse colpa del codiceee

non preoccuparti, il codice che hai posato è tratto da un lm35 e no dal sensore simile al tuo. non so se cambia qualcosa, e cmq gli schemi li fanno male quelli della seeduino, ti fanno vedere l'integrato dove è collegato la R nel cip, ma non in che punto preciso

ciao Banga, ciao millonario
L' integrato sulla schedina é LM358 un doppio Amplificatore Operazionale
vedi http://www.national.com/mpf/LM/LM358.html#Overview.

La schedina monta un termistore che varia la resistenza secondo la temparature in modo non lineare . Lo puoi vedere sul datasheet che seeedstudio Ti fa scaricare sulla pagina della schedina del sensore. Li ci sono descritti divesi termistori che si differenziano dal valore della resistenza nominale.
Questo termistore fa partitore di tensione con una resistenza di 10kOhm (avevo scritto nella precedente post un valore abagliato perché ho visto la riga arancione della resistenza come rossa). La tensione che esce dipende dalla temperatura. Non é lineare e percui Ti devi fare Tu la curva di calibrazione.

Proposta: comprati un LM35 oppure un LM135 (quello misura la temperature in 10 mV per grado Kelvin percui a 0 gradi da 2,73V) hai meno problemi con le temperature negative.
http://www.national.com/mpf/LM/LM135.html#Overview

Ciao Uwe

ho trovato un altro tutorial http://cinquetau.altervista.org/blog/2010/02/28/usare-un-lm35-per-misurare-tempe...

Si da il caso che questo tutorial lo abbia scritto io! ;D

Non era difficile accorgersene perchè è scritto anche nel titolo, comunque ho trattato l'utilizzo di un LM35DZ, che con l'applicazione di due diodi consente di misurare anche temperature sotto lo zero...l'unica "difficoltà" sta nel montare il circuito ugualea come l'ho montato io per usare quel poco codice che serve per misurare le temperature in modo corretto. XD