Sensore LM35 ad output sinusoidale?!?

Perchè mai il mio sensore LM35 invece di dare in output una tensione proporzionale alla temperatura mi dà valori che oscillano sinusoidalmente tra 0 e 180 con periodo di 3 secondi e mezzo???? :astonished:
Eppure non è mica un circuito complicato, so' 3 piedini da collegare! E non è collegato al contrario, ho letto che se lo colleghi al contrario si surriscalda!

per dire che oscilla sinusoidalmente hai guardato con un oscilloscopio?
hai collegato direttamente l'uscita all'ingresso analogico o c'è qualche circuito di amplificazione?
se lo tocchi con le mani cambiando la temperatura cambia qualcosa sull'uscita?

Macchè oscilloscopio, è solo il classico sketch elementare per l'LM35!

float temp;
int tempPin = A5;

void setup()
{
  Serial.begin(9600);
  digitalWrite(tempPin,HIGH);
}

void loop()
{
  temp = analogRead(tempPin);
  temp = temp * 0.48828125;
  Serial.println(temp);
  delay(100);
}

Il "circuito" è fatto di 3 fili!

Se metto il dito o ci alito sopra non cambia niente.

Pero' vedo che non cambia niente nemmeno TOGLIENDO il sensore... :roll_eyes: così scopro che sulle breadboard le file di VCC e GND dalle parti opposte della breadboard NON sono collegati tra loro! (geniale).
Vabbè, faccio i collegamenti per bene, e la situazione diventa che in presenza del sensore ho valore costante di 495.0 , in assenza ho 296.0 .

Boh?

Si saranno sminchiati i pin analogici della arduino?
Allora tolgo il chip e ce ne metto un altro: il chip sembra integro, perchè subito il led comincia a lampeggiare e mi appaiono sul serialmonitor i messaggi di un vecchio sketch.
Pero' quando cerco di caricare lo sketch... l'IDE non lo vede, mi dà il famigerato messaggio avrdude stk500_getsync()...

Che rottura.... :0

Che altro mi posso inventare?

per prima cosa collega tutto per bene, prendi un tester e verifica che ci sia una variazione di tensione proporzionale alla temperatura

poi ricollega l'arduino e passiamo al codice, quello che hai postato tu non ha molto senso... perchè scrivi " digitalWrite(tempPin,HIGH); " ?

Ho aggiunto quella riga "per sicurezza", tanto per non lasciare appeso il pin: in questo modo dovrebbe attivarsi una resistenza di pull-up, o qualcosa del genere.

Farò qualche prova col tester.

la resistenza di pull-up è utile per segnali digitali, con segnali analogici rischi di falsare la misura secondo me

Ho provato il sensore col tester, lui funziona, e la arduino uno che dà i numeri!!!

hai provato a togliete quella riga dove abiliti la resistenza di pull-up?

Avevo aggiunto il digitalWrite() DOPO aver verificato che lo sketch originale NON funzionava.

Ora è successa una cosa interessante: non ho fatto niente... se non stare due ore a guardare un film invece di giocare con Arduino... e adesso lo sketch originale funziona!!
Invece col digitalWrite() no.

Ma in nessuno dei due casi ho valori oscillanti come prima, ho sempre un valore costante (la temperatura senza il digitalWrite, un numero circa 10 volte più grande, ma sempre costante, col digitalWrite; e con un digitalWrite(tempPin,LOW) ho di nuovo invece la temperatura).

Ma che ne so, boh?
Si sarà emozionata la arduino quando ho caricato lo sketch che stampava a raffica i valori grezzi di tutti e 6 i pin analogici?!? E' l'unica cosa in più che ho fatto rispetto a prima!!!

sinceramente non sto capendo nulla di quello che fai, di quello che va e di quello che non va :sweat_smile:
comunque ribadisco che secondo me una resistenza di pull-up su misure analogiche falsa le letture

Nemmeno io sto capendo niente. :slight_smile:
Comunque è vero che quella di pullup le falsa, ma mettere il pin a massa no; e lavorare su un pin "casuale", senza cioè sapere come è impostato, non è "serio"; magari la arduino lo preimposta di per sè a LOW, ma che ne so?

Comunque mi è venuto un altro dubbio: ma analogRead(5) e analogRead(A5) sono la stessa cosa o no? Cioè, se metto un 5 in analogRead() o in digitalRead(), l'IDE capisce da solo che deve associarle lo stesso numero a pin diversi?

jumpjack:
Nemmeno io sto capendo niente. :slight_smile:
Comunque è vero che quella di pullup le falsa, ma mettere il pin a massa no; e lavorare su un pin "casuale", senza cioè sapere come è impostato, non è "serio"; magari la arduino lo preimposta di per sè a LOW, ma che ne so?

il discorso che fai non ha fondamenti, di default i pin sono impostati come input ad alta impedenza, che non vuole assolutamente dire che sono a massa

jumpjack:
Comunque mi è venuto un altro dubbio: ma analogRead(5) e analogRead(A5) sono la stessa cosa o no?

si

jumpjack:
Cioè, se metto un 5 in analogRead() o in digitalRead(), l'IDE capisce da solo che deve associarle lo stesso numero a pin diversi?

si

Sexondo me il Tuo problema sono falsi contatti. Qualche cavetto fa contatto e no a seconda come lo muovi o come é sollecitato.

Ciao Uwe

uwefed:
Sexondo me il Tuo problema sono falsi contatti. Qualche cavetto fa contatto e no a seconda come lo muovi o come é sollecitato.

Ciao Uwe

no, era troppo sinusoidale per essere casuale, ho proprio fatto il grafico su excel! Peccato che non l'ho salvato...
E poi ora mi resta il mistero del secondo chip che fa girare lo sketch che già contiene ma non vuole collegarsi all'IDE. Scommetto che se lo provo oggi, funziona...

mah.. comunque qualche "non senso c'è" a metti un pin come digitale e poi fai pullup

oppure lo lasci stare analogico e basta,

tieni presente che pin analogici lasciati liberi hanno la tendenza a seguire quelli vicini o muoversi di volta in volta