leggere sensore ntc

allora sto provando a leggere un sensore NTC, attraverso un partitore di tensione. voi direte, qual'è il problema?? la cosa che mi manda in crisi è che con il partitore quando la temperatura è bassa ho una tensione in uscita "alta" mentre quando la temperatura è alta la tensione è "bassa", ora come faccio a far leggere ad arduino la temperatura ed ovviamente a convertirla in gradi centigrati??

P.S. mi serve questo tipo di sensore perchè deve stare al bagno ed in pressione P.P.S. ho la scala di resistenza del sensore NTC da -40° a + 140° e sono consapevole che non è lineare ma il range di temperatura che serve a me è abbastanza lineare (50°-100°)

Dovresti fornire lo schema od i valori di partitore ed il modello di NTC (valore a temperatur ambiente, valore a 50°C e valore a 100°C).

Ettore Massimo Albani

il partitore è in allegato sotto r2 è il sensore ntc, r1 è di 3,3kohm questi sono i valori del sensore in base alla temperatura -40° 48805ohm -30° 27414ohm -20° 15971ohm -10° 9620ohm 0° 5975ohm 10° 3816ohm 20° 2502ohm 25° 2044ohm 30° 1679ohm 40° 1152ohm 50° 807ohm 60° 576ohm 70° 418ohm 80° 309ohm 90° 231ohm 100° 176ohm 110° 135ohm 120° 105ohm 130° 83ohm 140° 66ohm

alimentandolo a 5volt a 50° su Vout ho 0,97v e a 100° 0,25volt

Diagram of voltage divider netwrok.svg|0x0

intanto invertirei i componenti

Cioè mettere l'ntc al posto della resistenza fissa??

Dalle misure che hai riportato confermo la linearità nel range +50 ÷ +100.

Quindi l’equazione della retta è:
Y = mX + Q
con X = Tensione, Y = Temperatura

Per conoscere il valore in °C della tua misura in volt, devi prima calcolare il valore di m (coefficiente angolare), prendendo i due estremi del campo di linearità.

m = (y1 - y2) / (x1 - x2) = (50 - 100) / (0.648 - 0.167)

con ARef = 3.3V
x1 = ARef * R2(50°C) / (R1 + R2(50°C))
x2 = ARef * R2(100°C) / (R1 + R2(100°C))

Poi devi calcolare la Q (intercetta) che è il valore Y di intersezione della retta con l’asse Y:
Q = 100

Si noti che, per aumentare la precisione della lettura, ho scelto per ARef la tensione interna più bassa possibile per Arduino (per la MEGA è possibile scegliere 1.1V e 2.56V)

Sul PDF troverai a i grafici calcolati con Excel ed il polinomio interpolatore.

Ettore Massimo Albani

NTC.pdf (21.5 KB)

devo fare o complimenti al sig. Albani che di domenica sera ha tanta voglia di aiutare e sbrogliare calcoli! Comunque per migliorare la precisione si potrebbe abbassare R1 in modo da avere una variazione di tensione maggiore sul sensore. Spostare il sensore al posto di R1 è vero che inverte l’andamento,cioè temperatura bassa=tensione bassa ma per me è un problema perché la carcassa del sensore è a massa e sulla caldaia dove andrà montato c’è già un altro sensore che sfrutta la carcassa come massa quindi sono costretto ad usarlo al contrario, cioè tensione bassa=temperatura alta

ho modificato a causa di un errore sull’intercetta (Q = 100 e non 50).

Vedi il nuovo PDF.

Inoltre, per aver una maggiore precisione, ti conviene usare un’interpolazione logaritmica.

PS: qui non ci sono Sig., Ing., Dott., Cav., Lup.Man… solo amici! :slight_smile:

NTC.pdf (20.1 KB)

cyberhs: usare un'interpolazione logaritmica.

a me piace l'equazone della parabola, spesso e volentiei è molto realistica. Consiglio di mettere i valori in grafico ed ossevare la curva risultante

y = ax^2+bx+c

dove a b e c sono le incognite da trovare mettendo a sistema 3 valori empirici

Non mi ha dato ancora nessuno del signore =( =(

Usare il riferimento interno comporta un errore nel caso che la tensione di alimentazione cambi perché la tensione di uscita del partitore resistivo dipende dalla tensione di alimentazione. Puoi aumentare l' uscita del partitore abbasando la resitenza pullup a un valore di 470 Ohm (valore intermedio tra le resistenze a 50 e 100 gradi) C'é un inghippo la corrente attraverso il sensore non deve riscaldarlo. Nel tuo caso che é a bagno il passaggio di calore tra il bagno e il sensore é buono e non dovrebbe dare problemi.

Ci sono altri tipi di sensori ( PT100 o Termocoppie) che hanno vengono anche loro confezionato in dei involucri adatti per i Tuoi scopi e che sino piú lineari nella risposta elettrica.

Ciao Uwe

Non mi ha dato ancora nessuno del signore

Ci penso io “signor uwefed” :slight_smile:

Per uwefed:
invidia eh? :slight_smile:

Per lesto:
la maggior parte dei fenomeni fisici è in base logartimica/esponenziale naturale (base “e”): non per niente è definita “naturale”.
Se osservi il mio grafico, infatti, vedrai che il polinomio interpolatore naturale è quasi perfetto.

si ma in tutto questo c'è una cosa che non ho capito, come faccio a far leggere ad arduino un segnale analogico che si comporta al contrario?? devo mettere un operaziozionale che mi inverte il segnale?? altrimenti sono costretto a cambiare sensore e ripiegare sulle pt100

Tu leggi normalmente il valore espresso in volt (evidentemente devi convertire il valore int 0-1023 in volt, ma non credo che per te sia un problema).

Poi applichi l'equazione che ti ho fornito, oppure, molto meglio, usi il polinomio interpolatore "naturale" che ti ho allegato (vedi ultimo invio) Temperatura = -36.779 * log(Volt) + 33.786

PS: mi sono accorto di un errore nel grafico in quanto l'asse delle ordinate y non è ohm ma °C

vitoos: come faccio a far leggere ad arduino un segnale analogico che si comporta al contrario??

Moltiplichi per un valore negativo -> lettura * -1 o in altri casi fai il complemento --> 1024 - lettura.

secondo me "nonno uwefed" va meglio :grin:

m_ri: secondo me "nonno uwefed" va meglio :grin:

mi sa che hai ragione, calcolando il partitore in modo da avere 10mV/C° nel range 50°-110°e guardandolo in questo range come lineare a 110° mi ritrovo 38° reali in più, cioè quando sul display vengono segnati 110° in realtà sono 148°. Prenderò in considerazione le pt100 dato che ho visto che ci sono anche quelle che fanno al caso mio, però anche li bisogra studiarsi bene il circuito per amplificare il segnale ed in modo lineare, aprirò un nuovo topic

...e ti arrendi così?

Ah, i giovani... :D

vitoos:

m_ri: secondo me "nonno uwefed" va meglio :grin:

mi sa che hai ragione, calcolando il partitore in modo da avere 10mV/C° nel range 50°-110°e guardandolo in questo range come lineare a 110° mi ritrovo 38° reali in più, cioè quando sul display vengono segnati 110° in realtà sono 148°. Prenderò in considerazione le pt100 dato che ho visto che ci sono anche quelle che fanno al caso mio, però anche li bisogra studiarsi bene il circuito per amplificare il segnale ed in modo lineare, aprirò un nuovo topic

La PT 100 necessita pure una linerizzazione ma anche un circuito amplificatore. Se vuoi fare le cose comode: termocoppia K e MAX6675 che misura da 0 a 1000Gradi con risoluzione di 0,25Gradi. libreria: http://arduino.cc/playground/Main/MAX6675Library Ciao Uwe

cyberhs: ...e ti arrendi così?

Ah, i giovani... :D

Purtroppo sig. Albani 7anni fa quando mi sono diplomato dal corso di elettronica e telecomunicazione dell'itis di Eboli in testa mi è rimasto solo un gran casino per le poche ore di laboratorio fatte e per le tante ore di letteratura e storia varia ed in più ho ripreso in mano solo adesso, dopo 7 anni, il saldatore in mano perché il mondo di Arduino mi sta schiarendo le idee. Nel tuo stesso profilo dici la verità " chi sa fà, chi non sa insegna". Uwefed purtroppo mi viene più semplice fare una linearizzazione ed amplificazione di una pt100 che usare un ntc. Per la termocoppia ho già costruito un circuito per misurare la temperatura dei fumi della caldaia ma con l'AD595 e devo dire che va a meraviglia anche se misura solo 500° va bene perché oltre i 300° i fumi non vanno. Usare un max6675 per misurare l'acqua di una caldaia che non andrà oltre gli 85° lo vedo sprecato