TMP36 - Aref: errore dopo i 55 gradi

Ciao a tutti,
sto costruendo una sonda che mi occorre per leggere una temperatura esatta all’interno di un forno.
Utilizzo un TMP36gz e un Arduino Uno.

Se utilizzo i 5 volts senza il pin Aref nessun problema (precisione a parte) ma se vado ad utilizzare i 3,3v e il pin Aref appena la temperatura supera di poco i 55 gradi la temperatura letta va di colpo in negativo (il problema è identico con un Arduino Mega).

lo sketch:

#define aref_voltage 3.34         // valore misurato con multimetro
 
int tempPin = 0;        
int tempReading;       
 
void setup(void) {

  Serial.begin(9600);   
 
  analogReference(EXTERNAL);
}
 
 
void loop(void) {
  
  tempReading = 0;
 
  for(byte Ciclo = 0; Ciclo<100; Ciclo++)
  {
    tempReading += analogRead(tempPin);
    delay(10);
  }  
 
  tempReading /= 100;

  float voltage = tempReading * aref_voltage;
  voltage /= 1024.0; 
 
  float temperatureC = (voltage - 0.5) * 100 ;  
                                               
  Serial.print(temperatureC); Serial.print(" gradi - ");
  Serial.print(tempReading);     // the raw analog reading
  Serial.print(" - ");
  Serial.print(voltage); Serial.println(" volts");
  
  delay(250);
}

Qualche idea?

Grazie Mille, Bubz

Dimenticavo: la prova è stata fatta alimentando il tmp36gz sia a 5volts che a 3,3 volts.

Bubz

a occhio, se definisci
tempReading come int, vai fuori scala
Assegnala come unsigned long tempReading
o riduci il numero di letture. 100 sono un po’ esagerate

Grazie dell'intervento, ma purtroppo non abbiamo capito il perchè del problema di questo errore dopo i 55° gradi dato che (vedi sotto)....

Lo sketch va bene però ho risolto mettendo un partitore resistivo tra i 5v e la massa ed ho "generato" un valore di riferimento di 2,47 volts che ho mandato al pin AREF. L'errore non viene più generato.

Ora vorrei capire perchè utilizzando come valore di riferimento (interno) 5 volts tutto ok, con valore ext di 2,47 (e altri) tutto ok, con internal2v26 (su arduino mega) tutto ok mentre con l'external di 3,34 (preso dal pin dell'arduino) continua a dare errore. Qualcuno ha la risposta?

Tnx, Bubz

Disturbi ? ... imprecisione da loop di ritorno ? ... sul 3.3V c'e' attaccato altro ? ...

Comunque, per principio, se hai bisogno di un riferimento di tensione, meglio usarne sempre uno esterno, tipo ad esempio la serie REF della TI o il TL431 della ONSemi, o altri simili, ormai ne sono disponibili una marea sterminata sia fissi che regolabili, sono in genere sempre parecchio piu stabili dei riferimenti interni, e costano poco o nulla ...

Grazie mille Etemenanki,
almeno mi hai dato un’idea sulla “zona” dove lavorare anche se sicuramente opterò per i tl.

Utilizzando raramente Arduino non conoscevo la funzione di analogReference() ed andandomi a leggere un po’ di doc ho capito che con un semplice tl (ne ho in laboratorio una marea) posso tranquillamente avere un tensione di riferimento stabilizzata e precisa (disturbi a parte).

Come sempre, non basta fare ctrl+c e ctrl+v di sketch trovati online senza almeno un minimo di studio. Stupido io che scelgo spesso la strada pù semplice.

Grazie a tutti, Bubz