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).
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.
- Nesta família de termistores por exemplo, a máxima tensão é 5V.
- 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).
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:
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.
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); } |
Muito obrigado pela ajuda, todos os dados são muito uteis, bom trabalho.
Att: Tiago.