analogRead e temperatura

Sto usando un sensore lm35dz per acquisire periodicamente la temperatura. Il problema è il continuo variare della tensione letta con la funzione analogRead. Le variazioni sono sia in eccesso sia in difetto.

Per cercare di ovviare faccio la media tra 20 valori letti a distanza di 0,5 secondi. Mi chiedo però come mai la tensione continui a variare ? I fili dell'alimentazione sono avvolti tra loro per evitare correnti parassite. A livello software quali altri accorgimenti posso adottare?

It is an analog sensor, if the 5V changes, the analogRead returns a different value. Do you use the usb to power the Arduino board ? In that case th 5V is not very stable. You can use the internal reference of the Arduino. And you should read a few values (5 or more) and use the average.

Alcuni accorgimenti sono indicati nel DS del LM35

Peter ti ha dato indicazioni importanti: purtroppo la tensione di alimentazione di Arduino non è molto affidabile, se la usi come riferimento per il comparatore analogico può generare letture falsate; un ottimo metodo consiste nell'impostare la Vref internal (1,1V) piuttosto precisa e molto stabile e poi rapportare l'uscita del sensore mediante un partitore di precisione. Inoltre sul pin ARef devi collegare un condensatore da 0,1µF (ceramico o poliestere) verso GND. In una configurazione stand-alone ci sarebbe da lavorare sull'AVcc ma su Arduino non è possibile. Infine, come dice Icio, se il sensore è distante oltre il paio di metri rispetto ad Arduino, devi guardare sul data-sheet, c'è una configurazione specifica per le lunghe distanze. In passato con questi piccoli accorgimenti (continua a mantenere la media delle letture, puoi anche portarla a 30) abbiamo ottenuto risultati eccellenti.