Ciao a tutti, vi contatto per chiedervi una informazione, ho creato lo sketch seguente per visualizzare la temperatura su display, ma la temperatura non si aggiorna e anche se scaldo il sensore il risultato non cambia.
Ne approfitto anche per chiedervi secondo voi perchè la temperatura misurata è superiore di circa 4 gradi... non riesco a capire il perchè.
Vi allego lo sketch che ho scritto:
/* Programma che acquisisce la temperatura tramite un trasduttore LM335, tramite lo sketch viene calcolata
l'uscita del trasduttore in millivolt, la temperatura in gradi kelvin e la temperatura in gradi
centrigadi, il tutto visualizzato su display.
*/
#include <LiquidCrystal.h> // includo la libreria
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // inizializzo la libreria con i pin utilizzati dal display
float tempK; //scelgo la variabile float per contenere la temperatura in °K
float tempC; //scelgo la variabile float per contenere la temperatura in °C
void setup()
{
// imposta al display il numero di righe e colonne
lcd.begin(16, 2);
//per stampare sul display la dicitura temperatura in °K e *C
lcd.print("Temperatura *K * C ");
}
//programmo il ciclo
void loop()
{
/*
formula che permette di ottenere la tensione in mV ricavato dal valore inviato dal trasduttore;
il segnale letto deve essere moltiplicato per la tensione di alimentazione (Vcc),
diviso per 1024 per ottenere il corrispettivo valore adattato ai pin analogici,
e moltiplicato per 100 per ottenere il valore in millivolt
*/
tempK = (((analogRead(0) * 5) / 1024 ) * 100 );
//per ottenere la temperatura in gradi centrigradi
tempC = tempK - 273.15 ;
//per spostare il cursore dalla prima riga alla seconda
lcd.setCursor(0, 1);
//per stampare sul display la temperatura in °K rilevata
lcd.print(tempK);
lcd.print(" ");
//per stampare sul display la dicitura temperatura in °C
lcd.print(tempC);
//aspetta 1 secondi prima di riprendere il ciclo
delay(1000);
}
scusa Leo, ma lui e' proprio cosi' che lo ha connesso se guardi lo schema fritz.
il problema e' nello sketch, la analog read la fai su pin 0, invece la devi fare su A0
Nel dubbio ho provato a caricare lo sketch presente su questo link vuoto agz , i valori presenti sullo schermo si aggiornano, ma rimane il problema che mi segna una temperatura di 49 gradi in una stanza che ne ha 23... ho provato ad inserire un potenziometro, ma la temperatura rimane di nuovo fissa...
Gli schemi in Fritzing non li guardo perché non ci si capisce molto
Cmq fare analogRead(0) o analogRead(A0) è la stessa cosa: A0 è una costante predefinita che vale 14
Devi sapere che in analogRead c'è un controllo per cui se il valore del pin passato è superiore a 14, viene sottratto questo valore per riportarlo nell'intervallo 0..5
Prova di misurare sia la tensione di alimentazione (tra i pin 5V e GND di Arduino) che la tensione di uscita del LM335.
Vedrai che la tensione di alimentazione non é cosí vicina a 5V come speri,
tempK = (((analogRead(0) * 5) / 1024 ) * 100 ); Presuppone che la tensione di aliemtnazione sia precisamente 5,000V
Io misuro su un mio 2009 5,01V e su um UNO R3 4,97V sempre attacato alla stessa USB dello stesso PC.
Questa differenza sono praticamente 4 gradi di differenza nella lettura.
Se Ti basta una temperatura di misura massima di 60 gradi usa i 3,3V come riferimento collegando i pin 3,3V con il Aref e setta il riferimetno esterno. Misura il valore reale dei 3,3V e inseriscilo nella formula di calcolo temperatura.
Ciao Uwe, collegando arduino alla presa usb ho tra gnd e vcc 4,68 V, mentre con la presa di rete ho 4,99V, il sensore segna sempre 2,98 V.
ho prova a settare lo sketch con entrambi i valori e ottengo 25 e 26 gradi circa, sempre 3 - 4 gradi superiore alla norma.
scusa l'ignoranza ma come devo procedere per utilizzare i 3,3 V? nel programma invece di 5 v inserisco 3,3V, ma come devo collegare il tutto?
lo sketch che ho creato cosa potrebbe essere sbagliato per non aggiornare i valori?
tripdalat:
Ciao Uwe, collegando arduino alla presa usb ho tra gnd e vcc 4,68 V, mentre con la presa di rete ho 4,99V, il sensore segna sempre 2,98 V.
ho prova a settare lo sketch con entrambi i valori e ottengo 25 e 26 gradi circa, sempre 3 - 4 gradi superiore alla norma.
scusa l'ignoranza ma come devo procedere per utilizzare i 3,3 V? nel programma invece di 5 v inserisco 3,3V, ma come devo collegare il tutto?
lo sketch che ho creato cosa potrebbe essere sbagliato per non aggiornare i valori?
Grazie mille
colleghi con un cavo i pin 3V3 e AREF di Arduino e nel setup "analogReference(EXTERNAL);"
e poi scrivi
tempK = (((analogRead(0) * 330) / 1023 ) );
tripdalat:
Ciao Uwe, collegando arduino alla presa usb ho tra gnd e vcc 4,68 V, mentre con la presa di rete ho 4,99V, il sensore segna sempre 2,98 V.
Ricontrolla i collegamenti, 2,98V è l'uscita che dovrebbe dare a 25°C: mi pare strano che anche riscaldandolo non vari la lettura.
Ricordati che la piedinatura riportata nel datasheet è vista da SOTTO quindi guardando frontalmente il sensore i pin sono, da SX a DX: ADJ, VCC, GND.
Inoltre i 4°C sono l'errore ammesso dal datasheet per un sensore non tarato.
Ma tu leggi 2,98V anche montando il sensore appena tolto dal freezer oppure hai una lettura ogni volta differente ma che poi non varia?
Ho fatto come diceva Uwe, ho testato le tensioni e ho rapportato la funzione che mi ha dato:
tempK = (((analogRead(0) * 5) / 1024 ) * 100 ) invece di 5 V ho messo il valore in volt ai capi della tensione di arduino!!