Interface do termistor NTC com o Arduino

Os termistores são componentes simples, baratos e precisos que facilitam a obtenção de dados de temperatura para seus projetos. Os termistores ou THERMally sensitive resISTORs são resistores variáveis, cuja resistência será alterada com a temperatura. Esse recurso nos permite ler a temperatura ou a mudança de temperatura medindo a resistência dos termistores. Os termistores são usados em vários itens de uso diário, como termostatos, SMPS, circuitos de proteção contra surtos e baterias recarregáveis, etc.

Pinagem do termistor NTC

Tipos de termistores

Dependendo dos materiais utilizados e da forma como reagem à temperatura, os termistores são classificados em dois tipos:

  • Termistores de coeficiente de temperatura negativo ou termistores NTC
  • Termistores de coeficiente de temperatura positivo ou termistores PTC

Termistores de coeficiente de temperatura positivo ou termistores PTC

Com os termistores PTC, a resistência aumenta à medida que a temperatura sobe, geralmente devido ao aumento das agitações da rede térmica. Eles são geralmente usados para proteção contra sobrecorrente, como fusíveis reinicializáveis.

Termistores de coeficiente de temperatura negativo ou termistores NTC

Com os termistores NTC, a resistência diminui à medida que a temperatura aumenta, devido a um aumento no número de elétrons de condução energizados pela agitação térmica da banda de valência. Os NTC são comumente usados como sensores de temperatura ou em série com circuitos como fontes de alimentação como limitadores de corrente de irrupção.

Aqui está o gráfico de resposta de resistência versus temperatura para o TCS610 10K NTC da wavelength electronics. Você pode ver que, a 25⁰C, a resistência do termistor NTC é de 10 Kohms. Quando a temperatura aumenta, a resistência diminui.

Como funciona um termistor NTC?

Como já mencionado, a resistência de um termistor NTC muda com a mudança de temperatura. Assim, podemos medir a resistência do termistor e calcular a temperatura em relação à resistência medida. É claro que o termistor não é o melhor para medições precisas de temperatura, mas é muito barato e pode ser usado com muita facilidade. Aqui está uma pequena amostra de como funciona um termistor NTC.

Perguntas frequentes sobre o termistor NTC

O que é um termistor NTC?

O termistor NTC é um resistor sensível ao calor com um coeficiente de temperatura negativo. Sua resistência diminui quando a temperatura aumenta.

Como o NTC é calculado?

Os valores reais de resistência de um termistor NTC específico são obtidos multiplicando a razão RT/R25 (valor tabulado) pelo valor de resistência a 25°C, especificado na ficha técnica.

De que são feitos os termistores NTC?

Os termistores são feitos de cerâmica sinterizada composta por material altamente sensível com propriedades de resistência versus temperatura consistentemente reproduzíveis.

Os termistores NTC são lineares?

Não. Os termistores são dispositivos de resistência variável não lineares.

Por que os termistores NTC são usados em baterias de íon-lítio?

Os termistores NTC são usados para medir a temperatura da bateria. Como as baterias de íon-lítio são altamente perigosas em altas temperaturas, é necessário monitorar sua temperatura continuamente.

Medindo a resistência e a temperatura NTC

Para medir a resistência de um termistor NTC, usaremos um divisor de tensão. Um terminal do termistor será conectado à linha VCC por meio de um resistor de valor conhecido e o outro terminal será conectado ao terra. As conexões serão como mostrado abaixo.

Para medir a resistência do termistor NTC, primeiro mediremos a tensão do divisor de tensão. A equação do divisor de tensão é a seguinte.

Vout = Vin*[R2/(R1+R2)]

Como conhecemos Vin, R1 e Vout, podemos calcular o valor do termistor NTC R2 com a seguinte equação

R2=(Vout*R1) / (Vin-Vout)

Diagrama do circuito de interface do termistor NTC Arduino

A conexão é bastante simples. Vamos criar um divisor de tensão com o termistor NTC e um resistor de valor conhecido. Para este caso, vamos usar um resistor de 10K para isso. O divisor de tensão é construído com o resistor de 10K conectado a 5V e o termistor conectado ao terra. A tensão é medida onde o termistor NTC e o resistor estão conectados juntos. Como sabemos o valor do resistor de referência e a tensão de referência, podemos calcular a resistência do termistor a partir da queda de tensão medida. A partir dessa queda de tensão, podemos então calcular a resistência do termistor. A partir da resistência calculada do termistor, também podemos calcular a temperatura.

Você deve estar se perguntando por que conectamos o resistor de referência ao GPIO2 em vez do pino de 5V. Isso se deve ao fenômeno do autoaquecimento. Se conectarmos um termistor de 10K com um resistor de 10K para formar um divisor de tensão, e o divisor de tensão for conectado a 5V e depois ao terra, teremos um fluxo de corrente mínimo de cerca de 25mA (5V / (10K + 10K) = 0,25mA) o tempo todo.  Mesmo que isso não pareça uma grande quantidade de corrente, com certeza aquecerá seu termistor, pois mesmo o fluxo de corrente de 25 mA pode causar uma dissipação de energia de cerca de 0,625 mW (0,25 mA x 2,5 V). Isso também se considerarmos que o valor do termistor e o resistor de referência permanecem constantes. Como sabemos, a resistência do termistor varia drasticamente com a temperatura. Portanto, permitir o fluxo contínuo de corrente afetará a leitura. Portanto, para evitar isso, só colocaremos o GPIO em nível alto enquanto estivermos fazendo a leitura e, assim que fizermos a leitura, mudaremos o estado do GIO para baixo. A conexão real é mostrada na imagem abaixo.

Código do Arduino para interface do termistor NTC com o Arduino

Vamos dar uma olhada na seção de código. O código é bastante simples. A resistência do termistor NTC é medida usando o divisor de tensão e, em seguida, a temperatura é calculada a partir dela.

Nas primeiras linhas, declaramos as variáveis globais e os pinos. O pino analógico A0 é usado para medir a tensão no divisor de tensão. O pino D2 é usado para fornecer 5V para o divisor de tensão. A resistência nominal do NTC a 25⁰C, o coeficiente Beta do NTC e a resistência do resistor de valor conhecido também foram declarados. A taxa de amostragem é o número de amostras coletadas para o cálculo da média.

#define ntc_pin A0         // Pino, ao qual o divisor de tensão está conectado
#define vd_power_pin 2        // 5V para o divisor de tensão
#define nominal_resistance 10000       // Resistência nominal a 25⁰C
#define nominal_temeprature 25   // temperatura para resistência nominal (quase sempre 25⁰ C)
#define samplingrate 5    // Número de amostras
#define beta 3950  // O coeficiente beta ou o valor B do termistor (geralmente 3000-4000); verifique a folha de dados para obter o valor exato.
#define Rref 10000   // Valor do resistor usado para o divisor de tensão
int samples = 0;   // matriz para armazenar as amostras

Na função setup(), inicializamos a comunicação serial e definimos o pino D2 como saída. A taxa de transmissão está definida como 9600 e você pode defini-la de acordo com a necessidade do usuário.

void setup(void) {
pinmode(vd_power_pin,OUTPUT);
 Serial.begin(9600);   initialize serial communication at a baud rate of 9600
}

Na função de loop, a tensão no divisor de tensão é medida usando o pino analógico A0. Cinco amostras são coletadas e a média é calculada para melhor precisão. Esse valor é usado para calcular a resistência do NTC. Usando a resistência, a resistência nominal e o coeficiente beta, a temperatura é calculada usando a equação de Steinhart-Hart. Em seguida, a resistência e a temperatura são impressas no monitor serial.

void loop(void) {
  uint8_t i;
  float average;
  sample = 0;
  // take voltage readings from the voltage divider
  digitalWrite(vd_power_pin,HIGH);
  for (i=0; i< samplingrate; i++) {
   samples += analogRead(ntc_pin);
   delay(10);
  }
  digitalWrite(vd_power_pin,LOW);
  average = 0;
  average = samples/ samplingrate;
  Serial.print("ADC readings ");
  Serial.println(average);
  // Calculate NTC resistance
  average = 1023 / average - 1;
  average = Rref/ average;
  Serial.print("Thermistor resistance ");
  Serial.println(average);
  float temperature;
  temperature = average / nominal_resistance;     // (R/Ro)
  temperature = log(steinhart);                  // ln(R/Ro)
  temperature /= beta;                   // 1/B * ln(R/Ro)
  temperature += 1.0 / (nominal_temeprature + 273.15); // + (1/To)
  temperature = 1.0 / temperature;                 // Inverter
  temperature -= 273.15;                         // converter a temperatura absoluta em C
  Serial.print("Temperature ");
  Serial.print(temperature);
  Serial.println(" *C");
  delay(1000);
}

 

Medindo a resistência e a temperatura do termistor NTC

A fotos abaixo mostra como podemos fazer a interface de um termistor NTC com o Arduino. Você pode ver que, quando o ferro de solda toca o termistor, sua resistência começa a diminuir.

Código Completo

#define ntc_pin A0     // Pino, ao qual o divisor de tensão está conectado 
#define vd_power_pin 2 // 5V para o divisor de tensão 
#define nominal_resistance 10000 // Resistência nominal a 25⁰C 
#define nominal_temeprature 25 // temperatura para resistência nominal (quase sempre 25⁰ C) 
#define samplingrate 5 // Número de amostras 
#define beta 3950 // O coeficiente beta ou o valor B do termistor (geralmente 3000-4000); verifique a folha de dados para obter o valor exato. 
#define Rref 10000 // Valor do resistor usado para o divisor de tensão 
int samples = 0; // matriz para armazenar as amostras
void setup(void) {
  pinMode(vd_power_pin, OUTPUT);
  Serial.begin(9600);   //initialize serial communication at a baud rate of 9600
}
void loop(void) {
  uint8_t i;
  float average;
  samples = 0;
  // take voltage readings from the voltage divider
  digitalWrite(vd_power_pin, HIGH);
  for (i = 0; i < samplingrate; i++) {
    samples += analogRead(ntc_pin);
    delay(10);
  }
  digitalWrite(vd_power_pin, LOW);
  average = 0;
  average = samples / samplingrate;
  Serial.println("\n \n");
  Serial.print("ADC readings ");
  Serial.println(average);
  // Calculate NTC resistance
  average = 1023 / average - 1;
  average = Rref / average;
  Serial.print("Thermistor resistance ");
  Serial.println(average);
  float temperature;
  temperature = average / nominal_resistance;     // (R/Ro)
  temperature = log(temperature);                  // ln(R/Ro)
  temperature /= beta;                   // 1/B * ln(R/Ro)
  temperature += 1.0 / (nominal_temeprature + 273.15); // + (1/To)
  temperature = 1.0 / temperature;                 // Invert
  temperature -= 273.15;                         // convert absolute temp to C
  Serial.print("Temperature ");
  Serial.print(temperature);
  Serial.println(" *C");
  delay(2000);
}
Please follow and like us:
error0
fb-share-icon
Tweet 20
fb-share-icon20