Sensor de Temperatura com Termistor no Arduino - NTC e PTC
  • Retrofit
  • 20/05/2020

Sensor de Temperatura com Termistor no Arduino - NTC e PTC

Sensor de Temperatura com Termistor no Arduino - NTC e PTC

Neste artigo vou mostrar a utilização do sensor de temperatura tipo termistor - NTC e PTC, com Arduino. O termistor é um componente eletrônico cuja resistência elétrica varia de acordo com a temperatura. Assim, o seu uso é bastante simples, aliado ao fato de ser um componente de baixo custo, o que torna muito comum o uso do termistor como sensor de temperatura.

 

Por: Diego J. Stefanello e Ricardo B. Morim

 

Termistores, nunca vi ... Ou será que já vi ?!

O termistor é utilizado como sensor em muitas aplicações, desde termômetros medicinais, eletrodomésticos até em algumas aplicações industriais. Já que são componentes baratos e simples de se utilizar, são empregados nas mais variadas aplicações.

Um exemplo de aplicação é mostrado na Figura 1. Trata-se de um condicionador de ar do tipo split, no qual são empregados dois NTCs no trocador de calor com a função de sensor de temperatura.

 Figura 1: NTCs no trocador de calor de um condicionador de ar .

 

Dada a sua simplicidade e versatilidade, vamos mostrar a utilização do termistor com o Arduino para a leitura de temperatura. Em outras palavras, vamos fazer o projeto de um termômetro utilizando um termistor e uma placa Arduino.

 

NTC e PTC

Em síntese, existem basicamente dois tipos de termistor. Um deles é de coeficiente de temperatura negativo (NTC, do inglês Negative Temperature Coefficient) enquanto o outro tipo possui coeficiente de temperatura positivo (PTC, do inglês Positive Temperature Coefficient).

O termistor NTC possui variação de resistência inversamente proporcional a temperatura, isto é, quando a temperatura aumenta o valor da sua resistência elétrica diminui.

Por outro lado, o PTC apresenta variação de resistência diretamente proporcional a temperatura. Portanto, quando a temperatura aumenta, o valor da resistência elétrica do termistor PTC também aumenta.

O aspecto físico de alguns modelos de termistores pode ser visto na Figura 2.

igura 2: Aspecto físico dos termistores. Fonte: electrical4u.com

 

A variação da resistência elétrica de um termistor, entretanto, não acompanha de forma linear a variação de temperatura. Isto é, a relação entre resistência elétrica e temperatura é um parâmetro próprio do componente.

Assim sendo, esta correlação é disponibilizada pelo fabricante, normalmente na forma de uma tabela ou fórmula.

 

Simbologia e especificações dos termistores

Os símbolos elétricos utilizados para a representação de termistores são apresentados na Figura 3.

 

igura 3: Símbolos do termistor.

 

Estes são os símbolos comumente utilizados e esquemas elétricos.

Quanto as principais especificações dos termistores, você deve estar atento para com:

  • A sua resistência elétrica padrão, normalmente especificada a uma temperatura de 25 °C. Por exemplo, um NTC de 10 kΩ apresenta uma resistência elétrica de 10 kΩ a uma temperatura de 25 °C.
  • A máxima capacidade de dissipação de energia, em W. Uma vez que o termistor é um resistor, a circulação de corrente elétrica pelo componente tem como consequência a dissipação de potência. Para a aplicação, deve-se ter em mente ainda que a circulação de corrente elétrica pelo termistor provoca o aumento da sua temperatura. Portanto, você deve estar atento para que esta corrente de polarização seja de um valor muito baixo.

 

O termistor como sensor de temperatura no Arduino

Para a utilização do termistor como sensor de temperatura é necessário o emprego de um meio de conversão da medida de sua resistência elétrica em temperatura. Nesse sentido, a forma mais simples de se fazer esta conversão é projetar um divisor resistivo e medir a tensão no ponto central.

Este arranjo é muito simples, semelhante ao que nós fizemos no artigo sobre a utilização do sensor de luz LDR com o Arduino, sendo apresentado na Figura 4.

 


Figura 4: Circuito para medição de temperatura usando o ADC do Arduino.

 

O resistor R1 possui valor fixo e tem a função de polarização do Termistor T1. 

Quando o termistor T1 é submetido a variação de temperatura, ele sofre uma modificação no valor da sua resistência elétrica. Uma vez que isso aconteça, o valor da tensão no nó de junção do Termistor T1 com o Resistor R1 é modificado, em virtude do circuito obedecer a Lei de Ohm.

Este ponto de junção (com a tag ADC-ARDUINO) é conectado ao Conversor Analógico Digital (ADC) do Arduino para medição desta tensão.

Com a medição desta tensão o valor de resistência elétrica do Termistor T1 é calculado. Uma vez que este valor seja conhecido, basta aplicar um dos métodos para obter o valor da temperatura: Tabela de correspondência ou Equação matemática.

 

Método Tabela de correspondência

Neste método, basta que você programe, no Arduino, uma tabela com os valores de temperatura. Estes valores são acessados utilizando como índice o valor lido no ADC do Arduino. 

Na Figura 4, você pode ver uma tabela de correspondência entre essas 3 variáveis (resistência do NTC, valor do ADC e temperatura correspondente).

 

Figura 5: Tabela de conversão resistência-tensão-temperatura.
Fonte: http://sparks.gogo.co.nz/ntc_thermistor.html

 

Método Equação matemática

Conforme explicado, o desafio deste circuito é obter o valor da resistência do termistor T1, que chamarei de   através da leitura da tensão, doravante  . Considere você ainda o fato de que o ADC do Arduino tem uma resistência elétrica muito alta. Logo, ele não drena corrente elétrica do circuito.

Assim, ao alimentar o circuito da Figura 3, uma corrente elétrica circula através de   e de R1. Esta corrente elétrica, que chamarei de  , tem valor dado por:

Uma vez que você tenha esta definição, fica fácil de verificar que a tensão de saída do circuito,  , é obtida de:

Como a leitura do Arduino fornece o valor de  , o que precisamos fazer é apenas rearranjar estas duas fórmulas para obtermos o valor de :

Rearranjando esta equação, de modo a isolar :

Simplificando:

Uma vez que o valor de R1 é fixo e conhecido, chegamos a fórmula para calcular o valor da resistência do Termistor.

Com o valor da resistência do termistor, vamos ao cálculo da temperatura.

O termistor é um componente não linear, portanto serão necessários alguns cálculos específicos para obter o valor da temperatura.

Desse modo, existem algumas possibilidades: Utilizar tabelas, método de Stenhairt-Hart e o método do fator Beta.

A não linearidade é percebida pela variação de resistência elétrica do componente em função da temperatura: Na faixa de temperaturas baixas, o termistor responde com grande variação de resistência em função de uma variação pequena de temperatura. Entretanto, em altas temperaturas a variação de resistência tem intensidade menor.


Figura 6: Curva da resistência VS temperatura do NTC.

 

Método de Stenhair-Hart

Este método é governado pela seguinte equação:

 

Nesta equação, A, B e C são parâmetros numéricos, R é a resistência elétrica do termistor e T é a temperatura, em graus Kelvin.

O parâmetro B é indicado pelo datasheet do componente e os parâmetros A e C, as vezes você encontrará no datasheet e outras será necessário realizar um procedimento experimental. 

Encontrando os parâmetros A, B e C do NTC

Os parâmetros A, B e C podem ser de difícil aquisição, ainda mais se você não dispor do datasheet do NTC. Então vou te ensinar a usar um método prático pra conseguir estes valores.

Primeiro, meça o termistor em três temperaturas diferentes, as quais você saiba o valor. As temperaturas devem ser espaçadas uniformemente e separadas por pelo menos 10 graus. Eu usei as temperaturas de 60°C, 40°C e 20°C. Medi as temperaturas com uma sonda termopar, dessas que acompanham os multitestes.

 


Figura 7: Termopar e NTC juntos, para medição de temperatura e resistência

 

Você pode fazer da seguinte maneira: Coloque um pouco de água mineral em um recipiente e insira o conjunto da Figura 6 dentro.  Aqueça acima de 60°C (62 ~ 63°C). Aguarde a temperatura cair e estabilizar em  60°C. Anote o valor da resistência do NTC. Após, adicione ao poucos, água fria, até a mistura estabilizar em 40°C. Anote o valor de resistência do NTC. Por ultimo, pode utilizar água fria (da geladeira ou da torneira, dependo da época do ano ou de onde estiver) pra consegui estabilizar em 20°C. Anote o valor de resistência do NTC.

Eu coletei os seguintes valores:

T1=  60°C = 333,15°K    ->  R1= 2550 ohms

T2=  40°C = 313,15°K    ->  R2= 5650 ohms

T3=  20°C = 293,15°K    ->  R3= 13950 ohms

Para converter de graus Celsius (°C)  para Kelvin (°K)  basta adicionar 273,15 do valor.

Agora, usando as formulas da Figura 7, faremos os cálculos.


Figura 7: Formulas para calculo  das constantes A, B e C

 

L1 = ln(2550) = 7,843      L2 = ln(5650) = 8,639     L3 = ln(13950) = 9,543

Y1 = 1/333,15 = 0,003     Y2 = 1/313,15 = 0,003193     Y3 = 1/293,15 = 0,003411

γ2 = (0,003193 - 0,003) / (8,639 - 7,843) = 0,00024097

γ3 = (0,003411 - 0,003) / (9,543 - 7,843) = 0,000241012

C = (( 0,000241012 - 0,00024097) / ( 9,543 - 8,639)) * ( 1 / ( 7,843 + 8,639 + 9,543))
C = 0,0000000017590952

B = 0,003193 - 0,0000000017590952 * (7,8432 + 7,843*8,639 + 8,6392)
B = 0,000240612

A = 0,003 - 7,843*(0,000240612 + 0,0000000017590952*7,8432)
A = 0,0011133

 

Método do Fator Beta

Neste método, a equação utilizada é:

Nesta equação, B é uma constante, que depende do componente, devendo ser verificada no datasheet do termistor. R0 é a resistência do termistor a temperatura ambiente T0, normalmente especificada para 25 °C. R é a resistência medida do termistor, isto é, o parâmetro que depende da temperatura atual.

Além disso, você deve atentar para o fato de que a fórmula utiliza valores de temperatura em graus Kelvin (°K). Nesse caso, 25 °C = 298,15 °K.

Adicionalmente, o fator B é obtido em função da curva de resposta do termistor, isto é, da sua relação Resistência/Temperatura.

 

 

Montando seu termômetro com NTC e Arduino

 

Agora que a teoria foi apresentada, vamos à prática! O nosso propósito é fazer um termômetro simples, porém funcional e relativamente preciso.

Vou te mostrar como fazer um termômetro usando um NTC, pois ele é mais facilmente encontrado nas lojas de componentes. Entretanto, você pode usar um PTC, bastando alterar um pouco a programação.

Para a montagem você vai precisar dos seguintes itens:

  • Arduino Uno
  • Resistor 10kΩ
  • Fios Jumper’s
  • Protoboard
  • NTC de 10k

 Montando o circuito

Monte seu circuito conforme a Figura 8. Certifique-se que ele esteja desligado durante a montagem.

 


Figura 8: Montagem do circuito no protoboard.

 

Esta montagem é simples e rápida, logo você conseguirá faze-la sem problemas. Caso tenha duvidas, escreva nos comentários, que lhe ajudaremos o mais rápido possível.  

O sensor NTC é o componente de corpo transparente.  Esse era componente que mais se aproximou do formato de um NTC, no Thinkercad. Mas como falei no inicio o texto, há muitos formatos e tamanhos para esses componentes. 

 

Usando o método de Stenhair-Hart

 

Inicialmente vamos testar o método Stenhair-Hart. Basta usar o código abaixo e ver a magica acontecer.

/****************************************************************************************

                           TOT Engenharia

 

Neste exemplo, você entenderá como pode ser lido o valor do ADC, referente a

temperatura do NTC e convertida em graus Celsius, utilizando  o método Stenhair-Hart.

 

Autor: Diego Stefanello

Data: 01/2019

Versão: 1.0

****************************************************************************************/

 

 

int PIN_NTC = A0; // Define o pino onde está conectado o sensor NTC

 

 

// --- Ajustes iniciais ---

void setup()

{

   Serial.begin(115200);  // Inicia a serial, a 115200bps

}

 

// --- Looping pricipal ---

void loop()

{

   long resistencia;   // Variáveis auxiliares

   double temperatura;

 

   int RawADC = analogRead(PIN_NTC); // Faz uma leitura do ADC

 

   resistencia = ((10240000/RawADC) - 10000);  // Assumindo que o termistor usado seja de 10k.  Calcula o valor atual da resistência = (1024/ADC)

 

   /******************************************************************/

   /*       Utiliza a equação de Steinhart-Hart Thermistor:          */

   /*    Temperatura em Kelvin = 1 / {A + B[ln(R)] + C[ln(R)]^3}     */

   /*    onde A = 0.0011133, B = 0.000240612 e C =  0.000000001759    */

   /******************************************************************/

   temperatura = log(resistencia);

   temperatura = 1 / (0.0011133 + (0.000240612 * temperatura) + (0.000000001759 * temperatura * temperatura * temperatura));

   temperatura = temperatura - 273.15;  // Converte Kelvin para Celsius

  

  

   Serial.print("Temperatura: "); // Imprime o texto

   Serial.print((int)temperatura); // Envia o valor da temperatura, somente a parteira inteira

  

   Serial.print("\xC2\xB0"); // Envia o simbolo "°". Arduino IDE 1.8.3 utiliza formatação UTF-8

   Serial.println("C"); // Envia o caracter "C" e o comando de nova linha e retorno

  

   delay(1000); // Aguarda 1 segundo para fazer uma nova leitura

}

 

Usando o método do Fator Beta

 

Abaixo temos o código do Fator Beta. Esse método leva em conta somente o fator Beta do NTC, sendo um pouco menos preciso que o método anterior, por considerar menos variáveis na conversão resistência para temperatura.

/**********************************************************************************

                           TOT Engenharia

 

Neste exemplo, você entenderá como pode ser lido o valor do ADC, referente a

temperatura do NTC e convertida em graus Celsius, através do metodo Fator Beta

 

Autor: Diego Stefanello

Data: 01/2019

Versão: 1.0

*********************************************************************************/

 

int PIN_NTC = A0; // Define o pino onde está conectado o sensor NTC

  

#define NTCNOM 10000 // Valor do termistor na temperatura nominal     

#define TEMPNOM 25  // Temp. nominal descrita no Manual

#define NAMOSTRAS 5 // Número de amostragens para o calculo

#define BCOEFICIENTE 4300 // coeficiente Beta do NTC

#define RSERIE 10000 // valor do resistor em série   

 

 

 

// --- Ajustes iniciais ---

void setup()

{

   Serial.begin(115200);  // Inicia a serial, a 115200bps

}

 

 

// --- Looping pricipal ---

void loop()

{

   float temperatura, resistencia; // Variáveis auxiliares

 

   resistencia = ((10240000/analogRead(PIN_NTC)) - NTCNOM);  //  Calcula o valor atual da resistência = (1024/ADC - valor do NTC a 25°C)

  

 

   /******************************************************************/

   /*       Utiliza a equação do Fator Beta:                         */

   /*    Temperatura em Kelvin = T0 + (B / (ln(R/R0)))               */

   /*  onde, neste caso: T0 = 25C, B = 3820, R é a resistencia atual */

   /*  do NTC e R0 = 10k                                             */

   /******************************************************************/

 

   temperatura = resistencia / NTCNOM; // (R/Ro)

   temperatura = log(temperatura);   // ln(R/Ro)

   temperatura /= BCOEFICIENTE;  // 1/B * ln(R/Ro)

   temperatura += 1.0 / (TEMPNOM + 273.15); // + (1/To)

   temperatura = 1.0 / temperatura; // Inverte o valor

   temperatura -= 273.15;                         // Converte para Celsius

 

   Serial.print("Temperatura: ");

   Serial.print((int)temperatura);

   Serial.print("\xC2\xB0"); // Envia o simbolo "°". Arduino IDE 1.8.3 utiliza formatação UTF-8

   Serial.println("C"); // Envia o caracter "C" e o comando de nova linha e retorno

 

  

   delay(1000); // Aguarda 1 segundo para fazer uma nova leitura

}

 

 

A montagem do circuito é simples e na Figura 9 você pode ver a que eu fiz.

 


Figura 9: Montagem final no protoboard.

 

Usando o monitor serial, você poderá ver a temperatura medida pelo NTC, como apresentado na Figura 10. 

Figura 10: Print da tela do monitor serial do Arduino

 

Conclusão

 

Neste artigo, nós mostramos dois métodos de conversão da resistência do NTC para temperatura: Stenhair-Hart e Fator Beta.

Agora cabe a você testa-los e definir qual método melhor te atende.

Compartilhe seus resultados conosco! Isto certamente vai ajudar muitas pessoas que também estão iniciando a programar Arduino.

Caso você teve alguma dificuldade com este artigo ou queira comentar a sua implementação, por favor deixe um comentário com a sua dúvida. Teremos prazer em ajudá-lo(a)!