Sensore temperatura TMP36 cambi di temperatura improvvisi

Salve, sono nuovo di Arduino e sul forum, volevo avere un parere su un problema che ho riscontrato mentre svolgevo un esercizio.

Dico subito che potrei commettere errori banali di nomenclature o altro, dato che è solo da pochi giorni che sto smanettando con l'elettronica, ma veniamo al dunque.

Ho acquistato lo starter kit "ufficiale" con Arduino UNO all'interno, e sono arrivato a svolgere il progetto numero 3 che viene presentato sul libro incluso: l'Amorometro.

Questo consiste nell'utilizzare il sensore di temperatura TMP36 collegato al piedino analogico A0, ricavarsi la temperatura tramite software, dopodichè accendere alcuni LED a seconda della temperatura raggiunta, e controllare i dati attraverso il monitor seriale.

A grandi linee funziona, ma ci sono dei comportamenti strani da parte del sensore. Aggiungo, inoltre, di aver già cercato su altri topic un problema simile al mio, ma senza successo. Di solito quello che gli altri utenti lamentano, è che il sensore sia poco preciso di qualche grado, oppure che surriscaldi, o altro.
Quello che lamento io è che il sensore, inizialmente, mi dà in output una temperatura plausibile (circa 18 gradi, che purtroppo non posso confermare poichè non posseggo un termometro ambientale in casa). Dopodichè poggio le dita sopra il sensore per potergli far captare la mia temperatura (come previsto dall'esercizio) e qui accade l'arcano. Dopo qualche secondo in cui la temperatura rimane costante, schizza all'improvviso sui 60, 70 gradi, e rimane così anche per minuti interi dopo che io l'abbia lasciato.
Effettivamente quando lo tocco sembra caldo, o forse è solo suggestione ahah, ma non mi spiego perchè prima segnasse i 18 gradi...
Poi mi basta chiudere il monitor seriale, riaprirlo subito dopo, ed ecco che la temperatura ritorna sui 18!

Non credo che le mie mani siano assolutamente così calde, anzi.
Lo stesso fenomeno si ripropone anche solo soffiando aria calda sul sensore per qualche secondo.
Che sia qualcosa che riguarda l'umidità a causare un malfunzionamento?

Qualcuno consiglia di usare un condensatore mi pare, ma ad ora non so neanche cosa sia.
Il sensore mi pare proprio di averlo messo nel verso giusto, ho consultato anche il datasheet del componente.
Può essere che il sensore sia danneggiato? O che l'abbia danneggiato io piegando i piedini per farli entrare nella breadboard?
Non ho neanche a disposizione un multimetro per controllare l'ingresso nell'A0, visto che dovrebbe essere questo la causa di tutto... mi dispiace.

Se mi venisse in mente altro, lo scriverò.
Nel frattempo allego la foto del circuito, lo sketch, e il datasheet.

Grazie mille!

P.S. mi scuso nel caso abbia infranto qualche regola del forum o abbia sbagliato titolo, ho fatto del mio meglio!

const int sensorPin = A0;
const float baselineTemp = 18.36;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600); //apri una porta seriale

  for(int pinNumber = 2; pinNumber<5; pinNumber++) {
    // settiamo i pin da 2 a 4 su LOW
    pinMode(pinNumber, OUTPUT);
    digitalWrite(pinNumber, LOW);
  }

}

void loop() {
  // put your main code here, to run repeatedly:
  int sensorVal = analogRead(sensorPin); // il piedino riceve un valore da 0 a 1023

  Serial.print("Sensor Value: ");
  Serial.print(sensorVal);

  float voltage = (sensorVal/1024.0) * 5.0; // convertiamo il valore che viene inviato al piedino analogico nei reali Volts che riceve (da 0 a 5)

  Serial.print(", Volts: ");
  Serial.print(voltage);

  Serial.print(", degrees C: ");
  float temperature = (voltage - .5) * 100; // ricaviamo la temperatura tramite questa formula
  Serial.println(temperature);

  // gestione dei led
  if(temperature < baselineTemp) {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
  } else if (temperature >= baselineTemp + 2 && temperature < baselineTemp+4) {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);
  } else if (temperature >= baselineTemp + 4 && temperature < baselineTemp+6) {
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
  } else if (temperature >= baselineTemp + 6) {
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
  }

  delay(500);

}

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Fatto!
Ammetto di aver letto il regolamento velocemente, e la presentazione mi era sfuggita. Non avendo neanche trovato la sezione apposita per le presentazioni nella home ho supposto che non fosse necessaria... che figura. Ora ho letto tutto per bene.
Chiedo scusa.

ci sono tanti esempi:
https://www.youtube.com/results?search_query=tmp36+arduino
si, nel circuito consigliato devi mettere un condensatore da 0.1uf tra i piedini di alimentazione.

Scusami ma i video su youtube di esempio non mi dicono nulla di nuovo, non vedo cosa io abbia fatto di diverso.
Qualche altro suggerimento oltre al condensatore (che credo di non avere...)?

Nello starter kit ufficiale non ci sono i condensatori?
Sono quelli fatti così:


Occhio che potresti trovare qualcosa di simile ma scuro e più piccolo che potrebbe essere l'NTC, cioè un altro tipo di sensore di temperatura.
Il condensatore che ti serve dovrebbe avere scritto 104 cioè un 10 seguito da 4 zeri in pF quindi 100.000pF = 100nF = 0,1uF

Ah sì, l'ho trovato, anche se della misura da te indicata, all'interno di questo kit, è un rettangolino blu.
Purtroppo riscontro sempre lo stesso problema.
Quando uso le dita oppure aria calda, dopo qualche secondo schizza sui 60 gradi.
Come ho già scritto, potrei anche pensare sia un problema di umidità quando ci soffio sopra o delle dita. Ma allora perchè basta chiudere e riaprire il monitor seriale per farlo tornare normale?
Non capisco...

Nota positiva è che oggi segna una temperatura di base di 16,8 gradi, che è diversa da quella di ieri, quindi il sensore non dovrebbe avere problemi...
Mah...

Altre idee?