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.
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.
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.
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):
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:
Repositório de código aqui, do Github. Outra referência pode ser encontrada aqui.
// 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);
}
Primeiramente precisamos do beta do termistor, que eu encontrei na internet (aqui) como sendo 3950, mas pode variar conforme o NTC que você tem em mãos. Temos também “r0” que é a resistência do termistor a 25ºC, no meu caso era 10k Ohm. Configuramos VCC que no nosso caso (no Arduino) foi medido com um multímetro a 4,92V. E por fim o valor de “R” série que no meu caso é 9,81k Ohm (também medido com um multímetro).
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):
Com um termômetro externo a temperatura sobre o NTC deu um pouco a baixo, porém parecida o suficiente:
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.
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.
Deixe um comentário