Test LM35 con Arduino Uno compatibile

Salve, sono nuovo del forum e anche del mondo Arduino. Per cominciare ho provato a collegare un sensore di temperatura LM35 ad un Arduino Uno compatibile. Lo skecth che ho utilizzato per la prova è il seguente:

float temp;
int tempPin = 0;

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

void loop()
{
  temp = analogRead(tempPin);
  temp = temp * 0.48828125;
  Serial.print("TEMPERATURA = ");
  Serial.print(temp,1);
  Serial.print("*C");
  Serial.println();
  delay(10000);
}

Nella console seriale i valori restituiti dal sensore sono molto altalenanti e non corrispondono alla temperatura "reale" misurata tramite termometro digitale:

TEMPERATURA = 47.4*C
TEMPERATURA = 0.0*C
TEMPERATURA = 0.0*C
TEMPERATURA = 46.4*C
TEMPERATURA = 0.0*C
TEMPERATURA = 10.7*C
TEMPERATURA = 46.4*C
TEMPERATURA = 0.0*C
TEMPERATURA = 0.0*C
TEMPERATURA = 45.9*C

Il collegamento del sensore credo sia corretto ed è stato realizzanto tramite breadboard. L'Arduino è alimentato tramite USB; ho provato anche ad alimentarlo tramite alimentatore esterno, ma le cose non sono cambiate.

Posso aver sbagliato qualcosa o il sensore è difettoso?

Grazie in anticipo.

Ciao

sicuro dei contatti? (che siano ben relizzati e non ballerini?)

di solito poi le letture vengono mediate, ovvero non si fa la singola lettura ma 4/5 letture, si scarta la prima e si fa la media dei restanti (di solito va meglio)

mi preocuoa più lo zero... sembra quasi che ci sia un falso contatto da qualche parte!! comunque avere lo schema reale di come hai fatto (non teorico) porebbe aiutare

Come hai collegato il LM35?? Ciao Uwe

Grazie per le risposte.

Ho seguito il seguente schema:

Per i collegamenti tra Arduino ed il sensore ho utilizzato una breadboard con dei cavetti maschio maschio

Ciao

svenny71: Salve, sono nuovo del forum

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento: Regolamento - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Manca il resistore di carico sul terminale di uscita (10k) che va verso l'ingresso analogico di Arduino.

LM35 fornisce in uscita una tensione di 10mV per ogni grado di temperatura, cioè a 20°C la tensione sarà 200mV.

Poiché il convertitore (ADC) di Arduino è a 10bit con un "passo" di 5 / 1023 = 0.00488V = 4.88mV, dovresti ottenere a 20°C un valore di 200 / 4.88 = 40.98, che è appunto quello che ottieni.

Ti manca il passaggio da valore ADC a gradi Celsius.

Grazie per la risposta.

Ora non ho a disposizione la resistenza da 10k. Comunque ho provato, come mi hai suggerito, a convertire il valore ADC in gradi Celsius. Ho modificato lo sketch nel seguente modo:

float temp;
int tempPin = 0;

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

void loop()
{
  temp = analogRead(tempPin);
  temp = temp * 0.48828125 / 2.04918032787;
  
  if (temp > 10)
  {
    Serial.print("TEMPERATURA = ");
    Serial.print(temp,1);
    Serial.print("*C");
    Serial.println();
  }  
  delay(3000);
}

Ho messo il controllo "se la temperatura è maggiore di 10" in quanto alcune volte mi vengono restituiti valori di 2 o 3 gradi (la temperatura nella stanza è di circa 20 gradi). Ora ho questi risultati:

TEMPERATURA = 23.1*C
TEMPERATURA = 16.7*C
TEMPERATURA = 19.1*C
TEMPERATURA = 23.1*C
TEMPERATURA = 17.4*C
TEMPERATURA = 22.9*C
TEMPERATURA = 22.9*C
TEMPERATURA = 19.8*C
TEMPERATURA = 23.4*C
TEMPERATURA = 18.6*C

Credo che facendo più letture e calcolando la media (come consigliato da Martinix) si riesca ad avere un risultato accettabile tramite questo sensore.

Saluti