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)!