Problema Arduino + LM35 e LED...

Ciao a tutti, sto realizzando un termometro con Arduino e una LM35... Vorrei fare che una volta superata una soglia di temperatura mi si accenda un LED... Il codice che utilizzo è questo:

int potPin = 0;                             //input read pin for LM35 is Analog Pin 0
float temperature = 0;                      //variable which will be calculated in process
int greenLED=07;                            //Pin10 = Green LED
long val=0;                                 //variable to store the value coming from the sensor


void setup()
{

  pinMode(greenLED, OUTPUT);                  //LED set to output
  Serial.begin(9600);  
  Serial.println("LM35 Thermometer    ");       //Print "LM35 Thermometer" once at start
}


void loop ()                                //loop below process
{

  val = analogRead(potPin);                 //read the value of sensor
  temperature = (5*val*100/1024);           //convert voltage to temperature
  Serial.println ((long)temperature);       //print temperature value on serial screen

  if (temperature >= 17)                      //Check if temp over x degrees C.
  {
    digitalWrite (greenLED, HIGH);          
  }
  else
  {
    digitalWrite (greenLED, LOW);        
  }



  delay(1000);                              

}

Quello che ho voluto fare con il codice è che superata la temperatura di 17°C mi si accenda il LED collegato al PIN 7... Il problema è il seguente: appena avviato il termometro la temperatura segnata è esata (intorno ai 15 gradi), poi riscaldando l' LM35 e portandola a 17 gradi il LED si accende; succede però una cosa strana: non appena il LED si accende la temperatura che mi viene segnata salta da 17 a 22°C e talora continua a salire fino a oltre 30°C... Quale può essere il problema?... Grazie mille a tutti...

Succede la stessa cosa se usi il pin 13 senza LED esterno?
Metti una resistenza di almeno 330 Ohm in serie al LED.
Ciao Uwe

Grazei mille, funziona perfettamente ora...

inv3rse:
Grazei mille, funziona perfettamente ora...

"ora"... come?
Con la resistenza in serie oppure usando il led sul pin 13?

Utilizzando la resistenza in serie...

Aha.
Spiegazione:
Il LED senza resistenza assorbe troppa tensione e i 5V si abbassano leggermente. Visto che i 5V vengono usati come riferiemnteo per il ADC del ATmega un abbassamento dei 5V significa che il segnale del LM35 che resta costante viene letto piú alto.

temperature = (5*val*100/1024);

Per la precisone devi dividere il risultato dei ADC per 1023 perché 5V corrisondono al 1023 (valore massimo che puó assumere il valore digitalizzato).
Puoi aumentare la precisione della lettura se setti il riferimento ai 1,1V interni.

Ciao Uwe

Grazie mille della spiegazione, in effetti non riuscivo a capire bene il perchè della resistenza, ma ora ho le idee chiare...

LED hanno sempre bisogno di un dispositivo per limitare la corrente. La soluzione piú semplice é una resistenza. Quelle piú inpegnative con fonti di corrente cosatante o driver switching per LED nel caso di LED di potenza.
Ciao Uwe