Lettura Temperatura con LM35DZ

Salve ragazzi, mi stò scervellando per capire dove sia il problema.
Ho utilizzato uno sketch trovato in rete e sembra corretto;

int PIN_TEMP=1;
int temp;

void setup()
{
Serial.begin(9600);
}

void loop()
{
float sensorValue;

sensorValue = analogRead(5.0* PIN_TEMP * 100) / 1024.0 ;
delay(1000);
Serial.println(sensorValue);
}

I collegamenti elettrici sono corretti, +5V sul primo pin, pin centrale uscita collegato a AI1 e terzo pin GND collegato a GND di arduino.
In uscita ho i seguenti valori:

0.29
0.27
0.25
0.23
0.25
0.27
0.26
0.24
0.23
0.25
0.27

Potreste aiutarmi a capire dov'è l'arcano?

Grazie

analogRead(5.0* PIN_TEMP * 100)

Questo codice è errato. Stai chiedendo di fare una lettura sul pin analogico il cui numero è 5.0PIN_TEMP100 :smiley:

Forse era così?

sensorValue = (5.0*analogRead(PIN_TEMP)* 100) / 1024.0 ;

MM.. no ora legge 409.18! Non capisco...

Zeus l'altro giorno ha chiesto aiuto sullo stesso sensore. Ecco cos'aveva usato lui:

analogValue = analogRead(Termostato); //lettura del sensore di temperatura
voltage = analogValue * 1.05;
voltage /= 1024.0;
temp1 = voltage * 100;

Ha detto che la lettura era molto precisa. Prova.

Potresti compilarmi lo sketch con questa ultima modifica? Basta che copi il codice nel mio primo post!

spillo84top:
Potresti compilarmi lo sketch con questa ultima modifica? Basta che copi il codice nel mio primo post!

Vuoi che ti porti anche una birra, nel frattempo che aspetti che il tuo sketch è pronto? XD

Se potessi la porterei io a te! Scusami ma sono alle prime armi e non conosco assolutamente il linguaggio, ho cominciato a farci pratica oggi!

scusa ma tu hai connesso il sensore all'ingresso asnalogico 1, allora devi dichiarare:

int PIN_TEMP=A1;

tu invece hai messo 1 che sarebbe il tx di arduino

Secondo le ultime vostre indicazioni ecco cos'ho scritto:

int PIN_TEMP=A0;
int temp;

void setup()
{
Serial.begin(9600);
}

void loop()
{
float sensorValue;

sensorValue = ((1.05 * analogRead(PIN_TEMP)) / 1024.0) * 100 ;
delay(1000);
Serial.println(sensorValue);
}


Ho usato l'ingresso analogico zero, ora i valori di uscita sono:

85.93
85.93
85.93
85.93
85.93
85.93
85.93
85.93
85.93
85.93
85.93

Testato:
scusa ma tu hai connesso il sensore all'ingresso asnalogico 1, allora devi dichiarare:

int PIN_TEMP=A1;

tu invece hai messo 1 che sarebbe il tx di arduino

No, quando si usa analogRead il valore del pin passato è implicitamente riferito agli ingressi analogici. Quindi analogRead(1) equivale a analogRead(A1).
Concordo con te che per rendere più chiaro il codice è sempre consigliabile utilizzare Ax per indicare i pin analogici.

eccone un'altra, grazie :slight_smile:

Lo sketch che ho scritto sopra è corretto?

non ho un lm35 altrimenti ti facevo una prova pratica, ma ci sono infiniti esempi di quel sensore, deve essere un banale probelma di connessione, perche' quel 85,93 esce fuori proprio in condizioni di sensore sconnesso

Non del tutto. Metti un delay(3000) nel setup subito dopo il Serial.begin per evitare che tu non riesca ad aprire in tempo il terminale ed Arduino riempa il buffer della seriale.
Metti anche un Serial.println(sensorValue, DEC) per avere la stampa in formato numerico.

@ spillo84top
un po caldo a casa Tua. :wink: :wink: 85 gradi ...

Il LM35DZ da come uscita 10mV per grado centigradi.
Per 30 gadi centigradi da 300mV.

per arrivare alla temperatura devi:
valore analgico letto diviso 1023 per la tensione di riferimento (5V oppure 1,1V riferimento interno) diviso 10 .

È preferibile usare il riferimento interno da 1,1V per avere maggior precisone e risoluzione.

Ciao Uwe

@Uwe:
già, mi ero scordato di dire che appunto Zeus usava il riferimento a 1,1V ed aveva perciò messo il moltiplicatore 1.05 (approssimazione personale sua). :blush:

uwefed:
@ spillo84top
un po caldo a casa Tua. :wink: :wink: 85 gradi ...

Il LM35DZ da come uscita 10mV per grado centigradi.
Per 30 gadi centigradi da 300mV.

per arrivare alla temperatura devi:
valore analgico letto diviso 1023 per la tensione di riferimento (5V oppure 1,1V riferimento interno) diviso 10 .

È preferibile usare il riferimento interno da 1,1V per avere maggior precisone e risoluzione.

Ciao Uwe

Ecco cos'ho scritto:

int PIN_TEMP=0;
int temp;

void setup()
{
Serial.begin(9600);
}

void loop()
{
float sensorValue;

sensorValue = (( analogRead(PIN_TEMP) / 1023) * 5.0) / 10.0 ;
delay(3000);
Serial.println(sensorValue, DEC);
}

Mi legge 0.0000000000!

allora i passi sono questi:
Prima cosa leggere il valore grezzo dalla porta:
int lettura = analogRead(0);
Poi la convertiamo in millivolt (float):
float voltaggio = lettura * 5.0;
voltaggio /= 1024.0;
ora la trasformiamo in una temperatura
float temperaturaC = (voltaggio - 0.5) * 100 ;
Adesso il valore è pronto per essere stampato sulla seriale:
Serial.print(temperaturaC);
Serial.println("°");
fine :slight_smile:

Mi puoi scrivere qui in un post lo sketch?

Scusa ma sono alle prime armi!

Con arduino o con la tastiera? :slight_smile: