NTC E MISURA DELLA TEMPERATURA CON ARDUINO Una NTC (Negative Temperature Coefficient resistenza a coefficiente di temperatura negativo) è una resistenza che cambia il suo valore con il variare della temperatura. In teoria tutte le resistenze variano il loro valore con la temperatura ma le NTC lo fanno in maniera sostanziale (anche 100 ohm per grado centigrado) mentre le normali resistenze cambiamo molto poco. Figura 1 Esempio di NTC modello Vishay TDC 210 Esistono due tipi differenti di resistenze sensibili alla temperatura, le NTC che all aumentare dei gradi centigradi diminuiscono gli Ohm e le PTC (positive temperature coefficient) che all aumentare dei gradi aumentano anche gli Ohm. Di solito le NTC vengono usate per misurare la temperatura mentre le PTC vengono usate come dispositivo di protezione ad esempio nei trasformatori. Di seguito un elenco delle caratteristiche fanno scegliere una NTC al posto di altri sensori: È il sensore più economico disponibile sul mercato; Può essere facilmente impermeabilizzato; Funzionano a qualsiasi tensione (di solito a 3 o a 5V); Rispetto alle termocoppie non richiede amplificatori per funzionare ma può essere collegata direttamente al microprocessore; Sono molto precise, infatti hanno un accuratezza di ±0,25 C; Sono molto robuste e affidabili L unico punto negativo è che per essere implementate su un microprocessore quest ultimo deve avere integrato un convertitore analogico/digitale ADC (analog digital converter). La semplicità di questo componente lo ha reso molto popolare in tutti quei circuiti che hanno bisogno di un elemento di feedback per accendere o spegnere una ventola di raffreddamento. Ad esempio il circuito seguente usa una NTC e 2 transistor per comandare il motore di una ventola quando la temperatura della NTC supera un certo valore. Può essere usato all interno di un alimentatore o in un amplificatore per raffreddare i transistor. Il costo di tutti i componenti per realizzare questo circuito non supera i 3. Pertile 1
ELENCO COMPONENTI R1 = 15K @ 20 C n.t.c. Thermistor R2 = 1K5 R3 = 1K R4 = 270R R5 = 22K R6 = 680R R7 = 470R C1 = 100µF 25V D1 = LED Q1 = BC547 Q2 = BD140 M1 = Ventola 12V 700mA max. Figura 2 Semplice circuito con NTC per controllare una ventola CARATTERISTICHE DELLA NTC TDC 210 Elenchiamo di seguito le caratteristiche della NTC da 1k prodotta da Vishay ricavate dal datasheet: Resistenza a 25 C: 1k ±5% Valore Beta B: 3000 ±5% Costante di tempo termica: 10 sec Range di misurazione: -55 C 105 C Diametro: 5mm Lunghezza 18mm COLLEGARE UNA NTC AD ARDUINO Una NTC può essere collegata ad Arduino utilizzando soltanto una resistenza aggiuntiva di pari valore. Ad esempio in laboratorio abbiamo collegato una NTC da 1k ad un Arduino UNO attraverso una resistenza da 1k. Questo è possibile perché all interno del microcontrollore ATMega 326 è presente un convertitore analogico digitale (ADC Analog to Digital Converter) che converte i valori di tensione da 0 a 5 V in valore numerico. Figura 3 Collegamenti della basetta Arduino con una NTC. Viene usato il pin A0 come ingresso. Pertile 2
LETTURA DELLA NTC CON PARTITORE RESISTIVO Per misurare la temperatura si sfrutta una NTC che cambia il suo valore in Ohm. Questo valore non può essere letto direttamente dal nostro microprocessore perché non ha integrato un ohmetro. Questo processore però ha incorporato un convertitore Analogico/Digitale (ADC) a 10 bit (1023 valori diversi); ecco che quindi possiamo collegare la NTC a una resistenza realizzando un partitore resistivo che creerà una tensione proporzionale al valore di temperatura. Figura 4 Partitore resistivo applicato alla porta A0 di Arduino La tensione presente sul terminale ADC si può calcolare in questo modo: Questo ci permette di calcolare la tensione su A0 ma bisogna calcolare la corrente che attraversa le due resistenze collegate in serie: che sostituito nella formula di prima dà: Dove 5 è la tensione di funzionamento del microcontrollore. La tensione dunque presente ai capi del convertitore ADC è proporzionale, come si vede dalla formula, al valore della NTC e quindi al valore della temperatura. Più precisamente quando la temperatura aumenta il valore Vadc diminuisce e viceversa. Pertile 3
NTC E CONVERTITORE ADC La tensione Vadc arriva al convertitore ADC che la confronta con 1023 valori diversi e ne restituisce un numero proporzionale. Questo valore si calcola in questo modo: Sostituendo opportunamente i valori calcolati precedentemente con quest ultima formula si ricava che il valore in Ohm della NTC può essere calcolato in questo modo: È interessante notare che il valore calcolato della resistenza NTC non dipende più dalla tensione di alimentazione ma solamente dalla resistenza R1 collegata in serie da 1kohm e dal valore misurato dal convertitore ADC che può essere un valore compreso tra 0 e 1023. Il problema da risolvere ora è quello di riuscire a ricavare un valore di temperatura partendo dal valore in Ohm della NTC. LEGGE DI STEINHART-HART Nel 1968 gli ingegneri John Steinhart e Stanley Hart pubblicarono una ricerca in cui mostravano come ricavare la temperatura di una NTC nota la sua resistenza. La formula fornisce una buona precisione ed è la seguente: In cui: T = Temperatura da calcolare (in gradi Kelvin); T 0 = Temperatura di taratura della NTC (di solito 25 C, 298,15 K); B = Valore caratteristico della NTC ricavato dai datasheet (per una resistenza da 1k, B=3000); R = Resistenza della NTC alla temperatura da misurare; R 0 = Resistenza della NTC alla temperatura T 0 (di solito 1k o 10k). Bisogna fare attenzione che il risultato di questa formula è in gradi Kelvin e quindi bisognerà sottrarre 273,15 per ottenere i gradi centigradi. Con questo sistema di misurazione si ottiene un grado di precisione di ± 0,5 C. Pertile 4
MISURA DELLA TEMPERATURA CON ARDUINO Il microcontrollore ATmega 328 di Atmel possiede un convertitore A/D che ben si presta a essere collegato ad una NTC per misurare la temperatura. // Calcola la temperatura di una NTC (TDC 210) // collegata a massa usando una funzione // (+5V)---R---(pinA0)---ntc---(gnd) #define Ro 1000 // Valore NTC a 25 C #define NTCPIN A0 // Pin di collegamento NTC #define Tnom 25 // Temperatura nominale NTC #define B 3000 // Coeff. Beta della NTC (dai datasheet) float Temp; // Settaggio velocità dati seriali void setup() { Serial.begin(9600); } // Ciclo infinito, programma principale void loop() { Serial.print("Temp="); Serial.println(misTemp()); delay(1000); } // Funzione che misura la temperatura float mistemp() { Temp = analogread(ntcpin); Temp = Ro/((1023/Temp)-1); Temp = Temp / Ro; // (R/Ro) Temp = log(temp); // ln(r/ro) Temp = Temp/B; // 1/B * ln(r/ro) Temp = Temp + 1.0 / (Tnom + 273.15); // + (1/To) Temp = 1.0 / Temp; // Invert Temp = Temp - 273.15; // convert to C } Figura 5 Esempio di misura di temperatura Pertile 5
TERMOREGOLAZIONE DELLA TEMPERATURA CON ARDUINO A questo punto risulta molto facile realizzare un dispositivo per termostatare un piccolo ambiente in cui è presente una resistenza da 30Ω per riscaldare l aria e una NTC da 1k per sentire la temperatura. Calore R 30Ω NTC Figura 6 Piccolo ambiente termostatato realizzato all'interno di un ovetto Kinder Figura 7 Schema elettrico di collegamento del termostato ad Arduino Pertile 6