Variazione temperatura inspiegabile

Salve a tutti, spero mi possiate dare una mano.

Sto seguendo il libro dei progetti di arduino, mi trovo precisamente al progetto numero 6 (Theremin comandato dalla luce).

Andando a modificare il progetto, ho voluto provare a creare un sistema di allarme con un sensore di temperatura, in cui se si raggiunge/supera una certa temperatura soglia, il piezo suona, appunto, come se fosse un allarme.

Il problema, però, sta nel fatto che non appena stacco dalla breadboard il piezo, il sensore di temperatura rileva una temperatura inferiore di 10-12 gradi rispetto alla temperatura che misura con il piezo sulla breadboard, che effettivamente corrisponde alla temperatura dell’ambiente.

In allegato le due differenze di misurazione di temperatura (scusate la qualità).

Vi posto anche il codice, magari può esservi utile:

float valoreSensore;
int temperatura;
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  valoreSensore = analogRead(A0);
  delay(1000);
  float tempInVolt = (valoreSensore/1024.0)*5.0;
  temperatura = (tempInVolt-.5)*100;
 Serial.print("temperatura: ");
 Serial.println(temperatura);

 
  if(temperatura>=23) {
    tone(8,1046,2000);
    //delay(10);
  } else if(temperatura>=20 && temperatura<=22) {
    tone(8,523,200);
    //delay(100);
  } else if(temperatura>=14 && temperatura <=19) {
    tone(8,262,20);
    //delay(1000);
  }else {
    noTone(8);
  }
}

Grazie per la pazienza!

Purtroppo non ho il libro dei progetti di Arduino e non conosco il progetto numero 6. E' necessario che tu indichi lo schema dei collegamenti del piezo e del sensore di temperatura e la sua sigla. Indica anche come alimenti il tutto. Ciao, P.

Grazie per la risposta!

In allegato c’è lo schema del progetto, ovviamente nel mio progetto al posto della fotoresistenza c’è il sensore di temperatura.

Il circuito è alimentato con una tensione a 5V.

Nel secondo allegato trovi il sensore di temperatura con la sua sigla.

Attendo riscontro!

La fotoresistenza è un componente la cui resistenza varia con la luce che la colpisce. Il TP36, il sensore che stai usando, è un componente che sul piedino di uscita genera una tensione, rispetto al piedino a massa, proporzionale alla temperatura. Per usarlo devi collegare il positivo ai 5 V, il negativo a GND e il piedino di uscita direttamente al piedino analogico senza alcuna resistenza.

Se invece lo hai collegato correttamente, ricontrolla i collegamenti perché questo tipo di sensori con uscita in tensione sono sensibili ai disturbi.

Lo schema progetto 6(1).jpg riporta lo schema del theremin. E' necessario vedere come hai collegato il tmp36. L'alimentazione a 5V è ottenuta collegando l'USB a che cosa? (PC, caricabatteria, alimentatore esterno,...). Ciao, P.

Il sensore di temperatura da una tensione porporzionale alla temperatura e non viene influenziato dalla tensione di aliemntazione. L' entrata analogica usa una tensione di riferimento per misurare la tensione e convertirla in un numero. Normalmente la tensione di alimentazione (5v) viene usata come riferimento.

Il calcolo della tensione entra la tensione di alimentazione 5V. Se questa non é 5,00V (che sucede spesso) allora il valore di temperatura calcolato sará sbaglaito.

rimedi:

Usare la tensione di riferimento interna. Misurare la tensione di aliemntazione e usare quel valore per il calcolo della temperatura (é un calcolo che deriva dalla misura del riferimento interno. Usare i 3,3V come riferimento esterno.

Ciao Uwe

Grazie a tutti per le risposte.

Il mio Arduino è alimentato con una tensione a 5V direttamente da pc (che a sua volta è collegato al caricabatterie), tramite cavo USB.

I collegamenti tra la breadboard e la scheda, e dei vari componenti sulla breadbord, dovrebbero essere giusti; per sicurezza in allegato potrete vedere con i vostri occhi.

Per cercare di ridurre eventuali disturbi cosa dovrei fare?

Non riesco proprio a capire per quale motivo sembra che tutta questa differenza di temperatura dipenda dalla presenza o no del piezo :roll_eyes:

Quando togli il piezo togli anche il lungo cavetto giallo di collegamento fra il piezo e l'Arduino?

Sei sicuro che i 5V sono veramente 5,00V e non per esempio 4,6V

Se non hai un tester usa http://www.instructables.com/id/Secret-Arduino-Voltmeter/ basta copiare la funzione e chiamarla. Ti ritorna la tensione.

Ciao Uwe

In effetti sarebbe meglio stampare sia il valore grezzo che viene dall'ADC che la sua trasformazione. Ma a me mi sa che il PWM che pilota il piezo va a finire nel segnale analogico.

Zoomx semplicemente stacco il piezo dalla breadboard, non tocco nient’altro…

Unwfed domani proverò con il link che hai scritto, nel frattempo se avete altre idee sono ben accette!

Grazie per la disponibilità

Togli anche il cavetto giallo.

Ho usato il link di uwefed ed effettivamente la tensione è proprio 5V (come risultato della funzione ottengo il valore 5001).

La cosa strana ora è che se chiamo quella funzione, il sensore rileva che la temperatura è o 19° o 21°, mentre se non la chiamo la temperatura è fissa a 18° lol.

Ma comunque, effettivamente, se stacco il piezo e tutti i ponticelli a lui riferito, come suggerito da zoomx, la misura rilevata è esattamente quella che ho inserendo il piezo e tutti i ponticelli collegati ad esso, "risolvendo" così il problema, o meglio, capendo cosa c'era che non andasse.

Zoomx saresti così gentile da spiegarmi come mai rimuovendo solo il piezo (e lasciando attaccato i cavetti) la temperatura veniva rilevata in maniera così distorta?

Grazie a tutti per l'aiuto!

La cosa “divertente”, ora, è che cambiando le condizioni negli if-else:

float valoreSensore;
int temperatura;
void setup() {
  // put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  valoreSensore = analogRead(A0);
  delay(1000);
  float tempInVolt = (valoreSensore/1024.0)*5.0;
  temperatura = (tempInVolt-.5)*100;
 Serial.print("temperatura: ");
 Serial.println(temperatura);

 
  if(temperatura>=23) {
    tone(8,1046,2000);
    //delay(10);
  } else if(temperatura>=21 && temperatura<=22) { //<---- modificato qui
    tone(8,523,200);
    //delay(100);
  } else if(temperatura>=19 && temperatura <=20) {   //<---- modificato qui
    tone(8,262,20);
    //delay(1000);
  }else {
    noTone(8);
  }
}

la temperatura rilevata è alternatamente 18 gradi e 20 gradi!

Possibile che il sensore trovi questi valori (errati, dato che la temperatura è fissa) semplicemente modificando un range?

Prova di leggere la temperature 2 volte (con analogRead) e scartare la prima lettura. Ciao Uwe

Il mio sospetto era che il segnale che mandavi al piezo venisse captato dal cavo del sensore analogico. Come ho scritto prima i sensori con uscita in tensione sono facilmente soggetti a disturbi. Ti confesso che non me lo aspettavo perché in passato ho usato sensori analoghi e non ho avuto tali disturbi anche se avevo letto che poteva succedere sopratutto con cavi lunghi.

I toni che mandavi al piezo, senza il piezo venivano trasmessi in radiofrequenza e captati dal cavo del sensore analogico, che era molto vicino. Con il piezo montato invece l'intensità della trasmissione crollava, forse anche a zero.