Sensore NTC e LM35DZ

Ciao a tutti,

Sto provando a fare della letture di temperatura tramite Arduino. Ho usato 2 sensori, un NTC e un LM35DZ. Il problema è che a temperatura ambiente le 2 misure sono diverse di un grado e mi sta bene. Ma superati i 40° C la temperatura ricavata dall' NTC è sempre più alta di 6-7 C° rispetto al sensore LM35DZ.

Ora, dove sbaglio??? Ho già fatto molte prove,ma non c'è ne salto fuori.

LMZ è collegato a vcc e l'uscita è direttamente collegata al pin analogico di Arduino, mentre per leggere l' NTC, ho fatto un partitore con una R1 = 10K.

Vi mostro i programmi utilizzati. Per LM35DZ

/*
 Programma per lettura di Temperatura LM35DZ/NOPB
 */



int i;          //per la media della lettura


float temp;  //dichiarazione di variabile che contiene la temperatura
float temp1; // per la media
//int tempPin = A0;  //inizializzazione del pin di Arduino

void setup()
{

//analogReference(INTERNAL);  
Serial.begin(9600); //apertura porta seriale, set della velocità a 9600 bps
}

void loop()
{


temp = 0;
for (i=0; i < 5; i=i+1) 
                        {
             temp1=0;
             delay(10);
             temp1 = analogRead(A5); 
             temp1 = (5.0 * temp1 * 100.0)/1023.0; 
        
             temp=temp1+temp;
          
      }

temp=temp/5;
           //conversione del dato analogico in temperatura


Serial.println(temp);                         //invia i dati alla seriale
Serial.print(" Celsius, ");

delay(1000);                                  //aspetta 1 secondo prima di ripetere
}

Per NTC

#define Ro 10000      // Valore NTC a 25°C
#define NTCPIN A1     // Pin di collegamento NTC
#define Tnom 25       // Temperatura nominale NTC
#define B 3960        // Coeff. Beta della NTC (dai datasheet)
#define R1 10000 

float Temp;     //7 serve al sensore

float RNTC;
float x;
float t;
float T;

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

}

void loop() {
              Serial.print("Temp=");  
              Serial.println(misTemp()); 
              delay(1000); 

}

// Funzione che misura la temperatura
float misTemp() {
Temp=analogRead(A1);


x=(Temp/1023)*5;   // proporzione

RNTC=(R1*5/x)-R1;

t=(1/Tnom)*(log(RNTC/Ro)/B);

T=(1/t)-273,15;
}

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Nel codice dell NTC, ci sono un pò di errori:

  1. a differenza dell'altro, non c'e' la forzatura delle costanti con le virgole:
x=(Temp/1023)*5;

Meglio:

x=(Temp/1023.0)*5.0;
  1. Questo è errato, non segnalato dal compilatore, forse solo un warning, ma è errato:
T=(1/t)-273,15;

In C si scrive in inglese quindi i decimali si scrivono con il punto:

T=(1/t)-273.15;

P.S. nell'editor usa CTRL+T per indentare meglio. E togli un pò di righe vuote che non servono a una cippa, non è un tema che più lungo è, meglio è. :wink:

Ma superati i 40° C la temperatura ricavata dall' NTC è sempre più alta di 6-7 C° rispetto al sensore LM35DZ.

Va bene, ma qual'è dei due misura la temperatura effettiva?

Ipotizzando che LM35DZ misuri la temperatura giusta, sicuramente c'è un errore nel calcolo NTC.

NTC non da una uscita proporzionale alla temperatura ma una specie di parabola, o ricordo male?

vb, come la maggior parte dei fenomeni fisici, la resistenza di una NTC rispetto alla temperatura ha un andamento esponenziale/logaritmico.

Per questo motivo si effettua la linearizzazione della curva, usando come riferimento il valore della resistenza a 25°C (298.15°K) ed un coefficiente B (°K) che esprime l'andamento della curva.

grazie, io sapevo grosso modo questo
e li ho sempre usati solo come protezione per i motori.

Ciao a tutti..grazie delle risposte.
Ho provato a modificare il codice per l'NTC ma la misura rimane sempre la stessa. Ho sempre i 7 C di differenza... Però leggendo mi sembra di aver capito che gli NTC siano abbastanza sensibili e dovrebbero sbagliare di poco.