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°)
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
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à.
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.
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
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.
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
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
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: Arduino Playground - HomePage
Ciao Uwe
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