quarta-feira, janeiro 09, 2019

Usando um Termistor NTC

Já experimentei vários sensores de temperatura aqui no blog. Vou examinar agora um sensor bem simples, que é a base de alguns dos que já testei: o termistor.

Um termistor é um resistor cuja resistência varia com a temperatura. Bem, praticamente todo resistor varia com a temperatura, porém normalmente queremos que esta variação seja pequena, pois queremos uma resistência constante. Num termistor estamos interessados em ter uma variação de resistência previsível e mensurável.


Como medir a resistência com um microcontrolador? Convertendo a resistência em tensão e a medindo com um ADC. O jeito mais fácil de fazer isto é montando um divisor resistivo. Uma ponta do termistor é ligada à alimentação (Vcc)) e a outra a um resistor de resistência R conhecida e ao ADC. A outra ponta da resistência R é ligada ao terra:

Conforme a resistência do termistor muda, a corrente que flui pelo par termistor/resistor muda. Supondo que a resistência R seja fixa, podemos calcular o valor da resistência do termistor (RT) a partir da tensão medida pelo ADC (V):

    RT = R * (Vcc - V) / V

Como converter esta resistência em temperatura? A primeiro coisa a considerar é que existem dois tipo de termistor. O que vou usar é o mais comum, o chamado NTC (negative temperature coefficient), no qual a resistência diminui quando a temperatura aumenta.

A wikipedia apresenta algumas fórmulas para calcular a temperatura (em Kelvin) a partir da resistência (em ohms). A mais simples considera que a resistência varia linearmente com a temperatura, mas isto é uma aproximação muito ruim.

A opção seguinte é a baseada num parâmetro chamado Beta (B):

    T = B * ln (R/Rx)

onde Rx = R0 * exp (- B / T0), sendo T0 a temperatura correspondente à resistência R0.

Mais completa inda é a equação de Steinhart-Hart, que utiliza três parâmetros (a, b, c):

    1/T = a + b * ln(R) + c * (ln(R)^3)

Idealmente o fabricante informa os parâmetros do termistor. No meu caso eu usei um termistor "genérico", cuja única marcação é 102 (o que indica uma resistência de 1K a 25oC). O jeito foi calcular o beta usando a seguinte expressão que se baseia em duas correspondências conhecidas entre R e T:

    B = ln (RT1/RT2) / ( (1 / T1) - (1 / T2))

O programa abaixo ilustra o uso de um termistor com beta conhecido para medir a temperatura:
/*
 * Leitura de temperatura usando um termistor
 */

// Conexão do termistor
const int pinTermistor = A0;

// Parâmetros do termistor
const double beta = 2400.0;
const double r0 = 1404.0;
const double t0 = 273.0 + 21.0;
const double rx = r0 * exp(-beta/t0);

// Parâmetros do circuito
const double vcc = 5.0;
const double R = 2200.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);
}

Referências

https://en.wikipedia.org/wiki/Thermistor
https://www.ametherm.com/thermistor/ntc-thermistor-beta
http://labdegaragem.com/profiles/blogs/tutorial-como-utilizar-o-termistor-ntc-com-arduino

Nenhum comentário: