O termistor NTC é um componente simples e barato que pode ser utilizado para a medição de temperaturas. Sendo assim, neste post, veremos algumas de suas características e como utilizá-lo com o Arduino (sem bibliotecas).

O termistor

O que é o NTC

O termistor é um componente eletrônico (semicondutor) que pode ser representado como uma resistência que varia de acordo com a temperatura. No caso do NTC, sua resistência interna varia inversamente à temperatura. Isto é, quanto maior a temperatura, menor é sua resistência. É daí que vem o nome NTC (Negative Temperature Coeficiente – Coeficiente de Temperatura Negativo), que indica esta relação inversa.

Por meio dessa propriedade do termistor NTC, podemos utilizá-lo como um medidor de temperatura, conforme veremos mais à frente. Veja um exemplo de NTC na imagem abaixo. Na esquerda está ele sozinho e, na direita, ele está ligado em um módulo (KY-013).

Termistor NTC

Aplicações

Ele pode ser usado para:

  • Medir a temperatura de um ambiente.
    • Pode ser utilizado, por exemplo, em uma mini estação meteorológica.
  • Medir a temperatura de um objeto.
    • Verificar se um equipamento está sobreaquecendo.
  • Medir a temperatura de um líquido.
    • Isto pode ser útil em um processo industrial.

Característica do NTC

O termistor NTC pode vir em alguns formatos diferentes, incluindo em encapsulamentos SMD ou PTH, mas todos eles possuem algumas características em comum. A primeira delas é uma curva característica que mostra a relação entre sua resistência interna e a temperatura. Conforme dito, esta relação é inversa, assim como mostra a imagem abaixo:

Outra característica importante é a resistência do NTC à 25ºC, que é um valor conhecido. No caso, ela é uma das especificações comuns na hora de se comprar um termistor NTC. Entretanto, esta resistência à 25ºC não é 100% exata e existe uma margem de erro pro valor, que é especificada no datasheet do componente. Um valor comum de encontrar no mercado é um NTC de 10kΩ à 25ºC, como é o caso da curva da imagem anterior.

Além desses aspectos, o termistor NTC possui alguns outros:

  • A faixa de temperatura suportada pode variar um pouco, mas é comum ser algo como de -40 a 125ºC.
  • Em alguns casos, é preciso ficar atento à máxima tensão aplicada ao NTC.
  • Constantes pertinentes para a conversão da resistência em temperatura.
    • Serão discutidas no tópico seguinte.

Por fim é importante mencionar que alguns datasheets fornecem uma tabela com algumas equivalências entre os valores de temperatura e de resistência do NTC em questão. Veja um exemplo aqui (página 16) e aqui (página 3).

Ao invés das tabelas, pode ser mais fácil calcular o valor utilizando algumas fórmulas conforme veremos no tópico adiante.

Fórmulas

Existem 3 formas principais de se converter o valor da resistência em temperatura:

  • Aproximação de primeira ordem:

Neste cenário, você considera que a variação de temperatura com a resistência é linear. Por exemplo:

T = k \times R

Esta aproximação simplifica consideravelmente o cálculo, entretanto ela é bastante imprecisa, pois a variação da temperatura não é nada linear conforme a curva de exemplo do tópico anterior.

  • Utilizando a equação “Beta”:

Existe uma fórmula chamada de “equação Beta” que permite o cálculo da temperatura com precisões de +-1% ao longo da faixa de 0 a 100ºC (Fonte: eepower).

Ela recebe este nome, pois depende apenas do parâmetro “Beta” (β) do termistor, que é encontrado no datasheet. Veja abaixo um formato da equação:

T = \frac{T_0 \times B}{T_0\ \times ln(\frac{R_t}{R_0}) + B}

Onde T é a temperatura (em Kelvin) para uma dada resistência Rt; R0 é a resistência a 25ºC; T0 é a temperatura de 25ºC em Kelvin (298,15K) e B é a constante “Beta” do termistor.

  • Utilizando a equação de Steinhart-Hart:

Esta é a terceira e mais precisa forma de se obter a temperatura. O erro desta equação é bem pequeno, podendo ser menor que 0,02ºC para uma ampla faixa de medição da temperatura (200ºC). (Fonte: Wikipedia).

A equação está indicada adiante:

\frac{1}{T} = a + b \times ln(R) + c \times (ln(R))^2 + d \times (ln(R))^3

Onde T é a temperatura (em Kelvin) para uma dada resistência R; a, b e c são coeficientes específicos do NTC em questão obtidos experimentalmente e idealmente expostos no datasheet do componente (veremos mais à frente).

Obs: É comum ver essa formula simplificada sem o termo elevado ao quadrado, mas esse é seu formato original.

PTC

Existe outro tipo de termistor, que é chamado de termistor PTC (Positive Temperature Coeficient – Coeficiente de Temperatura Positivo). Como o PTC possui um coeficiente positivo, sua resistência interna aumenta à medida que sua temperatura também aumenta. Ou seja, seu comportamento é o oposto do NTC.

Por conta disso, ele pode ser utilizado em uma aplicação extremamente útil: fúsivel auto-resetável. Isso, porque o objetivo de um fusível é impedir que ocorra curto-circuito em um circuito. Então, se o PTC for instalado em série com um circuito em curto, o aumento na corrente que passa por ele faz com que sua temperatura interna aumente e, consequentemente, sua resistência. E, se sua resistência aumenta, ele automaticamente faz a corrente que passa por ele diminuir impedindo que o curto ocorra.

Ao contrário do fusível normal, ele não abre o circuito em caso de curto, mas impede que uma grande corrente passe pelo circuito. E, assim que o curto é removido, a corrente do circuito diminui para seu valor padrão, a temperatura do PTC diminui e sua resistência também. Ou seja, o circuito volta ao normal sem precisar trocar o PTC. Por isso ele é “auto-resetável”.

Módulo KY-013

Normalmente os módulos “para Arduino” tem o propósito de facilitar a ligação com os componentes utilizados. No contexto de termistores, a ligação sem o módulo já é bem simples e direta, então o módulo não é tão vantajoso assim em relação à utilização direta do NTC.

O circuito do módulo é constituído de um NTC 3mm e um resistor de 10kΩ. E os dois ficam ligados na configuração de divisor de tensão.

Sobre a pinagem do KY-013, ele possui 3 pinos (veja novamente na imagem abaixo):

  • S (sinal) – Ligação central do divisor de tensão.
  • Vcc – Pino de alimentação (5V normalmente).
    • Não fica indicado na placa, mas é o pino do meio.
  • – (negativo) – Pino de alimentação negativa (GND).

Termistor NTC

Utilizando o termistor NTC com o Arduino

Circuito

O objetivo do código é obter a temperatura a partir da variação da resistência do NTC. Sendo assim, uma forma de medir a resistência, é ligando ela em série com um resistor na configuração de divisor de tensão. Desta forma, variações na resistência provocarão variações de tensão. E estas variações da tensão podem ser lidas por meio dos pinos analógicos do Arduino. Portanto, uma forma de fazer isso está mostrada abaixo:

Ligação com o termistor NTC

O NTC foi ligado em série com um resistor de 10kΩ. Em uma ponta, o resistor foi ligado aos 5V e na outra ponta o NTC foi ligado ao GND. No meio deles, foi feita uma ligação para o pino A0 do Arduino.

Sugestão de compra

Se você estiver precisando de componentes, dê uma olhada na AutoCore Robótica! Adiante estão alguns dos NTCs disponíveis lá no site deles para você poder montar o circuito mostrado aqui.

Sensor de Temperatura NTC 10k 3mm
Sensor de Temperatura NTC à Prova D'água 10k
Sensor de Temperatura Ntc 10k 5mm
Módulo Sensor de Temperatura Ntc Termistor KY-013

Convertendo resistência em temperatura

Para converter a resistência em temperatura, vou utilizar a equação de Steinhart-Hart, que foi comentada no tópico “Fórmulas”. Como não achei os valores dos coeficientes no datasheet do NTC que tenho (MF52 – 10k à 25ºC), vou utilizar os que estão neste link:

A = 0.00102192985237609

B = 0.000241453242427025

C = -0.000000247620754758454

D = 0.000000165394923419592

Não sei dizer se é de fato necessário utilizar tantas casas decimais, mas acredito que ajude na precisão.

Ao invés de pegar os coeficientes “prontos”, você pode calculá-los e, neste link, é possível encontrar uma planilha para ajudar nisso.

Código de exemplo (Steinhart-Hart)

O código de exemplo utiliza a fórmulas discutidas anteriormente. Sendo assim, não pretendo explicá-lo, mas você pode ler os comentários para entender o procedimento corretamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <math.h>

// Constantes do termistor
#define A   0.00102192985237609
#define B   0.000241453242427025
#define C   -0.000000247620754758454
#define D   0.000000165394923419592

// Pino analógico para ler o NTC
#define NTC_PIN     A0
// Valor do resistor ligado em série com o NTC
#define RES_SERIE   10000.0

void setup()
{
  // Inicia a comunicação serial (monitor serial)
  Serial.begin(9600);
}

void loop()
{
  float res, temp;

  // Mede o pino analógico e converte em resistência
  // A fórmula está simplificada, mas o passo a passo seria:
  // Converter leitura analógica em tensão -> converter tensão em resistência
  res = RES_SERIE/(1023.0/((float)analogRead(NTC_PIN)) - 1.0);

  // Calcula o ln da resistência para agilizar o cálculo seguinte
  res = log(res);

  // Converte a resistência em temperatura por meio da equação de Steinhart-Hart
  temp = A + B*res + C*res*res + D*res*res*res;
  // Inverte, pois a equação acima é 1/T
  temp = 1.0/temp;
  // Converte de Kelvin para ºC
  temp -= 273.15;
 
  // Imprime o valor
  Serial.print("Temperatura: ");
  Serial.print(temp, 2);
  Serial.println("ºC");
 
  delay(1000);
}

Código de exemplo (Beta)

Resolvi colocar um código de exemplo utilizando a equação “Beta”. O valor de beta foi extraído do datasheet do NTC MF52 (meu caso). Leia os comentários para entender o procedimento.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <math.h>

// Constante do termistor
#define BETA   3950.0

// Pino analógico para ler o NTC
#define NTC_PIN     A0
// Valor do resistor ligado em série com o NTC
#define RES_SERIE   10000.0

void setup()
{
  // Inicia a comunicação serial (monitor serial)
  Serial.begin(9600);
}

void loop()
{
  float res, temp;

  // Mede o pino analógico e converte em resistência
  // A fórmula está simplificada, mas o passo a passo seria:
  // Converter leitura analógica em tensão -> converter tensão em resistência
  res = RES_SERIE/(1023.0/((float)analogRead(NTC_PIN)) - 1.0);

  // Calcula o ln de Rt/R0
  res = log(res/RES_SERIE);

  // Converte a resistência em temperatura por meio da "equação Beta"
  temp = 298.15*BETA/(298.15*res + BETA);
  // Converte de Kelvin para ºC
  temp -= 273.15;
 
  // Imprime o valor
  Serial.print("Temperatura: ");
  Serial.print(temp, 2);
  Serial.println("ºC");
 
  delay(1000);
}