Go Down

Topic: LM35 (Read 1 time) previous topic - next topic

enrico m

Salve a tutti,
ho cellegato un sensore di temperatura LM35 al pin analogico 1 del mio arduino mega e tutto funzionava benissimo finchè ho aggiunto sul pin analogico 2 un sensore di umidità HIH400 HONEYWELL, il sensore di umidità funzione bene ma l'LM35 ha iniziato a dare i numeri del lotto con sbalzi anche di 20 gradi fra una lettura e la successiva, se commento le righe del sensore di umidità l'LM 35 riprende a funzionare bene...
qualcuno è in grado di aiutarmi?
grazie e saluti
enrico

leo72

Ho notato anch'io che questi transistor sono molto influenzati dalle correnti assorbite da altri dispositivi presenti nel sistema.
Ad esempio io ho uno shield autocostruito con un LM335Z ed un RTC DS1307. Sopra a questo shield ne ho un altro con un display LCD 3310 della Nuelectronics che mi visualizza l'ora, la data e la temperatura.

Siccome lo shield con l'LCD è retroilluminato, io spengo la retroilluminazione dopo 10 sec. Quando spengo la retroilluminazione, la temperatura letta cala di 2°C! Non appena riaccendo la retroilluminazione, questa risale nuovamente!

Stefanoxjx

Posso chiederti se mi fai una cortesia di specificare come hai collegato l'LM35?
Ne ho uno anch'io ma non riesco a farlo funzionare :(
Grazie.
www.multiwii.it
www.sdmodel.it

enrico m

guardando da sopra, con la parte piatta in basso, a destra i 5v a sinistra il gnd e al centro il pin analogico

Stefanoxjx

Ed è come l'ho collegato io, quindi fin qui sono giusto.
Poi, leggi il valore tramite analogRead giusto?
www.multiwii.it
www.sdmodel.it

enrico m


ti allego il programma che uso io, alimentando il sensore di umidità con un pin digitale ho risolto il problema degli errori di lettura dell'LM35, anche se non ho ancora capito il perchè... :), cmq a te interessa solo la parte relativa all'LM35


int LM35=1; //Assegniamo alla variabile LM35 il pin di ingresso analogico 1
float TEMPERATURA; //Dichiariamo la variabile che conterrà il valore della temperatura
int HIH4000=2; //Assegniamo alla variabile HIH4000 il pin di ingresso analogico 2 del sensore HIH4000
float UR; //Dichiariamo la variabile che conterrà il valore dell'UMIDITA' RELATIVA
void setup()
{
 Serial.begin(9600);
}

void loop()
{
 
 TEMPERATURA= analogRead(LM35)*0.488;
 Serial.println("TEMPERATURA:");
 Serial.println(TEMPERATURA);
 Serial.println();
 delay(3000);
 UR= (analogRead(HIH4000) - 163)/6.0;
 Serial.println("UMIDITA' RELATIVA:");
 Serial.println(UR);
 Serial.println();
 delay(3000);
}

Stefanoxjx

Ti ringrazio, appena ho un secondo riprovo a vedere se ne esco vittorioso :D
www.multiwii.it
www.sdmodel.it

Stefanoxjx

Perfetto, ora funziona.
Ho scoperto che avevo fatto tutto giusto ma non so il perchè mi si impallava la comunicazione seriale e quindi non riuscivo a vedere i dati sul terminale.

Posso farti un piccolo appunto sul tuo programma?
No?
Beh, te lo faccio lo stesso :D
Nell'intestazione del programma, hai dichiarato le seguenti variabili:

Code: [Select]

int LM35=1;
int HIH4000=2;


Siccome queste ti servono solo come riferimento mnemonico per le porte utilizzate, ti consiglio di non dichiarare delle variabili che occupano memoria per niente, ma di usare la direttiva #define.

per esempio:
Code: [Select]

#define   LM35         1
#define   HIH4000   1


Il risultato non cambia, però in questo modo usi meno memoria.
Magari lo sapevi già, ma a me piace fare lo sborone :D :D :D
Ciao.
www.multiwii.it
www.sdmodel.it

garinus

la misura del lm 35  ipende dalla tensione in ingresso: se quella scende (causa un carico) anche la misura della t scende

enrico m

si però nelle specifiche dell'HIH4000 si parla di un assorbimento max di 500 microA ...

Go Up