Existem várias opções de sensores para medir temperatura. Neste tutorial vamos conhecer o mais simples deles – o termistor NTC- e como usá-lo junto com um Arduino.
Material necessário
No projeto exemplo deste tutorial utilizamos os seguintes componentes:
Conhecendo o Termistor NTC
Um termistor é um resistor cuja resistência muda conforme a temperatura ambiente. A rigor todo resistor tem o seu valor afetado pela temperatura, mas no termistor queremos que esta variação seja mensurável e previsível. Existem dois tipos de Termistor:
- O termistor PTC (Positive Temperature Coefficient) é aquele onde aumento da temperatura provoca aumento na resistência; e
- O termistor NTC (Negative Temperature Coefficient) é aquele onde aumento da temperatura provoca diminuição na resistência.
Para medir temperatura são normalmente utilizados os termistores do tipo NTC. A medição de temperatura requer:
- A medição da resistência do termistor
- A conversão da resistência em temperatura
Medição de Resistência com um Arduino
Para medirmos uma resistência com o Arduino vamos convertê-la em uma tensão, que será medida pelo ADC (usando o analogRead()). Para isto montamos um “divisor de tensão” colocando o termistor em série com um resistor de resistência R conhecida (e praticamente fixa na faixa de temperatura a medir):
A corrente que passa pelo termistor é a mesma que passa pelo resistor conhecido (considerando que a corrente que vai para o ADC é muito pequena): I = VCC / (RT + R). A tensão medida pelo ADC será V = R * I. Resolvendo estas equações para a resistência do termistor:
RT = R * (VCC – V) / V
Conversão da Resistência do Termistor NTC em Temperatura
Infelizmente, a variação de resistência de um termistor com a temperatura não é controlada por uma fórmula simples. O que se utilizam são equações que produzem resultados aproximados (dentro de uma faixa de temperatura) com base em parâmetros específicos para cada componente.
A equação abaixo é a mais comumente usada, e se baseia em um único parâmetro (ß) que costuma ser informado pelo fabricante do termistor:
T = ß * ln (R / RX)
Onde ln é o “logaritmo natural” e RX é obtido a partir de ß e uma equivalência conhecida de resistência (R0) a temperatura(T0):
RX = R0 * exp (- ß / T0)
Nestas fórmulas a temperatura está em graus Kelvin. Para converter para Celsius é necessário subtrair 273.
A Montagem
Nesta montagem foi usado um resistor de 20K com precisão de 1%, sendo possível usar um outro valor na faixa de 10K a 100K, alterando este valor no código. Se você não estiver muito preocupado com precisão, pode usar um resistor comum com 5% de precisão.
O Código
O exemplo abaixo envia as leituras de temperatura para o monitor da IDE. Os parâmetros do termistor no código abaixo foram extraídos do datasheet do termistor para o modelo MF521033600. Para um melhor precisão é usada uma média de várias leituras da tensão.
/* * Leitura de temperatura usando um termistor */ // Conexão do termistor const int pinTermistor = A0; // Parâmetros do termistor const double beta = 3600.0; const double r0 = 10000.0; const double t0 = 273.0 + 25.0; const double rx = r0 * exp(-beta/t0); // Parâmetros do circuito const double vcc = 5.0; const double R = 20000.0; // Numero de amostras na leitura const int nAmostras = 5; // Iniciação void setup() { Serial.begin(9600); } // Laço perpétuo void loop() { // Le o sensor algumas vezes int soma = 0; for (int i = 0; i < nAmostras; i++) { soma += analogRead(pinTermistor); delay (10); } // Determina a resistência do termistor double v = (vcc*soma)/(nAmostras*1024.0); double rt = (vcc*R)/v - R; // Calcula a temperatura double t = beta / log(rt/rx); Serial.println (t-273.0); // Dá um tempo entre leituras delay (10000); }
Gostou deste tutorial? Ajude-nos a melhorar o blog comentando abaixo sobre ele.
Excelente, porém, falta nomear cada linha de codigo, ou seja, funcoes: //
/*
const
void setup
void loop
boa tarde professor
tenho o seguinte circuito
ntc ligado par terra, o outro lado ligado num resistor de 50K, 1%, que esta ligado a uma fonte de 5v de precisão, entre o ntc e o resistor de 50 k, um capacitor de de 100 nF, e a saida para processodor em paralelo com o capacitor, ligando num adc e 12 bits.
pois estou trabalhando com STM32F103RBT6.
Então mudei o vcc para 3.3v, numero de divisões de 1024 para 4096, por que o adc é de 12 bits
e o resistro de 20k para 50k.
Esta certo ou não?
Benedito, se eu entendi direito a sua montagem, você está medindo a tensão sobre o termistor ao invés de sobre o resistor de valor conhecido. Se for isso mesmo, você precisa acertar as equações:
V = RT * I
RT = V*R/(VCC-V)
Gostei do artigo, o resistor fixo deve ser o mais preciso possível
No texto fala que foi usado um resistor de 20k, mas no sketch esta 2000. Qual é o certo?
const double R = 2000.0;
Sílvio,
Faltou um zero no código, pode adicionar.
Abraços!
Diogo – Equipe MakerHero