,

Sensor de temperatura termistor NTC com Arduino

Posted by

Hoje vamos fazer a leitura de um termistor NTC com Arduino. Mas primeiro vamos definir alguns termos que serão úteis no decorrer do artigo. Primeiramente “termistor”, que é um resistor cuja resistência depende da temperatura ao qual está submetido.

Agora NTC, que em Inglês significa “negative temperature coefficient”, ou traduzindo “coeficiente negativo de temperatura”. Isso quer dizer que sua resistência diminui com o aumento da temperatura, e vice-versa. Diferente de um PTC “positive temperature coefficient”, coeficiente positivo de temperatura. Sua resistência aumenta com o aumento da temperatura.

O NTC é muito usado na indústria por ser um sensor barato e bem confiável, podendo seu usado em temperaturas entre -55ºC e +200C. O único porém é que sua curva não é linear como aquela de um LM35, é uma curva exponencial. Isso exige um equacionamento para se chegar em uma temperatura partindo-se de um valor de resistência. Veja imagem abaixo.

Fonte: https://circuitcellar.com/resources/quickbits/ntc-thermistor-linearization-2/
Fonte: https://circuitcellar.com/resources/quickbits/ntc-thermistor-linearization-2/

O circuito

O circuito eletrônico utilizado no experimento de hoje é bem simples, você precisa de um termistor NTC (eu peguei um de resistência 10k Ohm) e um outro resistor de 10k Ohm.

Fonte: https://www.instructables.com/NTC-Temperature-Sensor-With-Arduino/

Montei o circuito acima na plaquinha abaixo, para facilidade de conexão com o Arduino. Conectei o ponto central entre os dois componentes à entrada analógica A0 do Arduino. O +Vcc é 5V.

ntc thermistor circuit board
Placa de circuito do termistor NTC
Circuito do termistor NTC com Arduino
Circuito do termistor NTC com Arduino

O código abaixo foi o primeiro que utilizei para testar o funcionamento do termistor NTC, ele apenas lê a entrada analógica A0 e direciona o valor para o monitor serial do computador.


// These constants won't change. They're used to give names to the pins used:
const int analogInPin = A0;  // Analog input pin that the potentiometer is attached to

int sensorValue = 0;  // value read from the pot

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

void loop() {
  // read the analog in value:
  sensorValue = analogRead(analogInPin);
  
  // print the results to the Serial Monitor:
  Serial.print("sensor = ");
  Serial.println(sensorValue);
  
  // wait 2 milliseconds before the next loop for the analog-to-digital
  // converter to settle after the last reading:
  delay(200);
}

A leitura analógica no monitor serial é a seguinte. Veja que o valor é entre 0 e 1024 (2^10, 10bit):

Leitura de valor analógico no monitor serial
Leitura de valor analógico no monitor serial

O código

Como converter este valor para temperatura? Usei código desta referência. O código está abaixo e tem alguns detalhes a serem configurados:

// Fonte: https://www.makerhero.com/blog/termistor-ntc-arduino/
/*
 * Leitura de temperatura usando um termistor
 */
 
// Conexão do termistor
const int pinTermistor = A0;
 
// Parâmetros do termistor
const double beta = 3950.0;
const double r0 = 10000.0;
const double t0 = 273.0 + 25.0;
const double rx = r0 * exp(-beta/t0);
 
// Parâmetros do circuito
const double vcc = 4.92;
const double R = 9810.0;
 
// Numero de amostras na leitura
const int nAmostras = 5;
 
// Iniciação
void setup() {
  Serial.begin(9600);
}
 
// Laço perpétuo
void loop() {
  // Le o sensor algumas vezes
  int soma = 0;
  for (int i = 0; i < nAmostras; i++) {
    soma += analogRead(pinTermistor);
    delay (100);
  }
 
  // Determina a resistência do termistor
  double v = (vcc*soma)/(nAmostras*1024.0);
  double rt = (vcc*R)/v - R;
 
  // Calcula a temperatura
  double t = beta / log(rt/rx);
  Serial.println (t-273.0);
 
  // Dá um tempo entre leituras
  delay (1000);
}

A “mágica” do equacionamento acontece nas linhas abaixo:

// Determina a resistência do termistor
  double v = (vcc*soma)/(nAmostras*1024.0);
  double rt = (vcc*R)/v - R;
 
  // Calcula a temperatura
  double t = beta / log(rt/rx);
  Serial.println (t-273.0);

O resultado do valor lido no monitor serial pode ser visto abaixo, em graus celsius (ºC):

Leitura de temperatura já convertida, partindo do NTC no Arduino
Leitura de temperatura já convertida, partindo do NTC no Arduino

Com um termômetro externo a temperatura sobre o NTC deu um pouco a baixo, porém parecida o suficiente:

Leitura de temperatura com termômetro externo

Também fiz uma simulação em Wokwi aqui, porém lá o sensor está com seu resistor invertido, mostra temperatura “ao contrário”, sobe quando a tempertura do sensor desce. Veja o diagrama esquemático da simulação abaixo.

Simulação de NTC no Wokwi
Simulação de NTC no Wokwi

Palavras finais

Quer comprar alguns NTC para experimentar? use meu link patrocinado e compre no Banggood. Conheça também outro sensor de temperatura, desta vez integrado, o SHT21 aqui.

3 respostas

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *