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
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 }
/* ----------------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);
}
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
}
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.
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
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
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