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
}

milionario

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

uwefed

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

blanga

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

milionario

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

uwefed

#9
Jun 20, 2010, 11:27 am Last Edit: Jun 20, 2010, 11:52 am by uwefed Reason: 1
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

blanga

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

milionario

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

uwefed

#12
Jun 21, 2010, 12:11 am Last Edit: Jun 21, 2010, 12:14 am by uwefed Reason: 1
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  

Federico Vanzati

Quote
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
F

Go Up