0
Offline
Newbie
Karma: 0
Posts: 29
Arduino rocks
|
 |
« on: June 19, 2010, 02:42:19 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Full Member
Karma: 0
Posts: 181
Arduino rocks
|
 |
« Reply #1 on: June 19, 2010, 02:44:39 pm » |
prova a posarci il codice che hai usato tu
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Arduino rocks
|
 |
« Reply #2 on: June 19, 2010, 04:44:33 pm » |
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.nethttp://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 }
|
|
|
|
« Last Edit: June 19, 2010, 04:45:13 pm by blanga »
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Arduino rocks
|
 |
« Reply #3 on: June 19, 2010, 04:58:03 pm » |
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
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Arduino rocks
|
 |
« Reply #4 on: June 19, 2010, 05:11:50 pm » |
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 }
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Full Member
Karma: 0
Posts: 181
Arduino rocks
|
 |
« Reply #5 on: June 20, 2010, 02:59:03 am » |
il sensore a quanto lo alimenti? da 4 a 20V?
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15603
+39 349 2158303
|
 |
« Reply #6 on: June 20, 2010, 04:13:20 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Arduino rocks
|
 |
« Reply #7 on: June 20, 2010, 04:14:37 am » |
il sensore è della seeduino e fa parte del electronic brick kit attacato a uno switc di porte che è ataccato ad arduino
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Full Member
Karma: 0
Posts: 181
Arduino rocks
|
 |
« Reply #8 on: June 20, 2010, 04:16:56 am » |
però qui http://www.national.com/ds/LM/LM35.pdfdice che il sensore va da +2 a +150 °C quindi 0V=+2°C e 10mV=+3°C correggimi se mi sbaglio
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15603
+39 349 2158303
|
 |
« Reply #9 on: June 20, 2010, 04:27:10 am » |
ciao blanga Se questo é il sensore: http://www.seeedstudio.com/depot/electronic-brick-temperature-sensoranalog-p-478.html?cPath=48_52Non é 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.pdftrovi 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
|
|
|
|
« Last Edit: June 20, 2010, 04:52:42 am by uwefed »
|
Logged
|
|
|
|
|
0
Offline
Newbie
Karma: 0
Posts: 29
Arduino rocks
|
 |
« Reply #10 on: June 20, 2010, 06:14:55 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
0
Offline
Full Member
Karma: 0
Posts: 181
Arduino rocks
|
 |
« Reply #11 on: June 20, 2010, 07:45:54 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 160
Posts: 15603
+39 349 2158303
|
 |
« Reply #12 on: June 20, 2010, 05:11:55 pm » |
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#OverviewCiao Uwe
|
|
|
|
« Last Edit: June 20, 2010, 05:14:44 pm by uwefed »
|
Logged
|
|
|
|
|
Global Moderator
Milano, Italy
Offline
Edison Member
Karma: 10
Posts: 1095
Arduino rocks
|
 |
« Reply #13 on: June 25, 2010, 05:01:29 pm » |
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. 
|
|
|
|
|
Logged
|
F
|
|
|
|
|