Tutorial: Como utilizar Termistor NTC com Arduino

Adquira estes componentes na Loja do Lab de Garagem

Olá Garagistas!!! 

Neste tutorial vamos utilizar o Termistor NTC de 10K junto com o Arduino e a biblioteca Thermistor para obtermos os valores em graus Celsius. Esta biblioteca utiliza a equação de Steinhart-Hart para converter o valor da resistência em valores de temperatura e em uma segunda monstagem, mostramos como fazer o mesmo só que agora utilizando o método do Fator Beta (exemplo baseado em um exemplo da Adafruit). 

 

Lista de Materiais 

1 x Arduino Uno Rev 3 ou Garagino Rev 1*

1 x Termistor NTC de 10KΩ

1 x Resistor de 10KΩ

1 x Protoboard Mini

Alguns jumpers 

* Se for utilizar o Garagino você necessitará do conversor USB-Serial, pois vamos imprimir o valor convertido do sensor em ºCelsius no Serial Monitor.

 

O Termistor

Para fazer a leitura da temperatura, vamos utilizar um Termistor. Este é um tipo de resistência especial que altera seu valor razão da temperatura onde o componente é colocado.

Existem dois tipos de Termistores os NTC e os PTC.

 

Termistor PTC (Positive Temperature Coefficient): Este tipo de Termistor tem o coeficiente de temperatura positivo, ou seja, a resistência aumenta com o aumento da temperatura.

Termistor NTC (Negative Temperature Coefficient): Já este é o inverso do anterior e seu coeficiente de temperatura é negativo. Com isto sua resistência diminui com o aumento da temperatura.

 

O valor nominal do termistor é dado normalmente a 25 ºCelsius e neste caso utilizaremos um termisitor de 10K. Ele atua na faixa de -40 a +125.

  

Determinação da temperatura

Para determinar a temperatura do existe dois métodos um utilizando a interpolação pela fórmula de Steinhart-Hart ou ainda podemos utilizar a equação do fator Beta.

Abaixo você vê dois métodos para aquisição da temperatura:

 

Método Steinhart-Hart

  Equação Steinhart-Hart

 O método de Steinnhart- Hart é implementado por uma biblioteca que fizemos algumas modificações para mantermos a compatibilidade da mesma com a IDE do Arduino.

 

A biblioteca  pode ser baixada neste link: Thermistor.zip

Realizamos alguns testes aqui com este sensor junto aos valores desta biblioteca e o termistor respondeu a valores muito próximos desejados(mesmo sem ter feito alterações nos valores dos coeficientes de temperatura). 

Para este Circuito podemos utilizar e o Sketch exemplo com este circuito:

Circuito para Método Steinhart-Hart

Sketch


#include <Thermistor.h>

Thermistor temp(0);

void setup() {
  Serial.begin(9600);
}

void loop() {
  int temperature = temp.getTemp();
  Serial.print("Temperatura no Sensor eh: ");
  Serial.print(temperature);
  Serial.println("*C");
  delay(1000);
}

 

 

Método do Fator Beta

 

 

 Equação do fator Beta

O método do fator beta pode ser implementado utilizando um código de exemplo usado pela adafruit (fizemos uma pequena modificação pois o Termistor que utilizamos é um NTC).

O circuito deve ser montado segundo a função abaixo:

 

 Circuito para Método do Fator Beta

Segundo o manual do nosso termistor, o fator beta do mesmo é 3977 e utilizamos ele no Sketch abaixo:

 

// Pino onde o Termistor esta conectado
#define PINOTERMISTOR A0         
// Valor do termistor na temperatura nominal
#define TERMISTORNOMINAL 10000      
// Temp. nominal descrita no Manual
#define TEMPERATURENOMINAL 25   
// Número de amostragens para 
#define NUMAMOSTRAS 5
// Beta do nosso Termistor
#define BCOEFFICIENT 3977
// valor do resistor em série
#define SERIESRESISTOR 10000    
 
int amostra[NUMAMOSTRAS];
int i;
void setup(void) {
  Serial.begin(9600);
  analogReference(EXTERNAL);
}
 
void loop(void) {
  float media;
 
  for (i=0; i< NUMAMOSTRAS; i++) {
   amostra[i] = analogRead(PINOTERMISTOR);
   delay(10);
  }
 
  media = 0;
  for (i=0; i< NUMAMOSTRAS; i++) {
     media += amostra[i];
  }
  media /= NUMAMOSTRAS;

  // Converte o valor da tensão em resistência
  media = 1023 / media - 1;
  media = SERIESRESISTOR / media;
  
  //Faz o cálculo pela fórmula do Fator Beta
  float temperatura;
  temperatura = media / TERMISTORNOMINAL;     // (R/Ro)
  temperatura = log(temperatura); // ln(R/Ro)
  temperatura /= BCOEFFICIENT;                   // 1/B * ln(R/Ro)
  temperatura += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  temperatura = 1.0 / temperatura;                 // Inverte o valor
  temperatura -= 273.15;                         // Converte para Celsius
 
  Serial.print("Temperatura no Sensor eh: ");
  Serial.print(temperatura);
  Serial.println(" *C");
 
  delay(1000);
}

É isto pessoal espero que vocês gostem do Tutorial e que usem estes sensores, eles são uma alternativa barata e simples de conseguir uma amostra da temperatura ambiente. Se gostarem do tutorial ou tiverem dúvidas, por favor, deixem seus comentários abaixo.

\o/

Exibições: 88468

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Edwaldo Queiroz Dias em 3 agosto 2020 às 11:59

Becker, no fim desse post o colega encontrou uma solução para um caso semelhante ao seu:

https://www.vivaolinux.com.br/topico/Arduino/Como-estabilizar-a-lei...

Veja se te ajuda.

Comentário de Lauro Becker em 3 agosto 2020 às 10:53

Montei um NTC no circuito com Método Steinhart-Hart. Funcionou razoavelmente.
MAS, se fizer leituras frequentes a temperatura lida oscila bastante, tanto para cima quanto para baixo em valores que podem variar até 0,6ºC+-.
Mesmo fazendo uma média com cinco leituras UMA leitura a cada meio segundo (delay(500)) varia muito, mesmo num ambiente de leitura com temperatura bem estável.

Alguém tem alguma sugestão ou explicação para esse erro?

Comentário de Roberto S em 18 abril 2017 às 0:04

ola pessoal,

implentei o metodo SH com NTC 1k e leitura no LCD. Deu tudo certo, inclusive coloquei um termometro junto para ver se batiam as leituras. Na mosca! 

Detalhe importante: o resistor fixo deve ter o menso valor do termistor, então no meu caso usei um de 1k.

Comentário de BRUNO FAGUNDES SPERB em 23 maio 2016 às 11:00

Olá, Pessoal! 

A exemplo do Henrique G de Castro, estou usando um resistor de 1K para medir a temperatura. Usando o método Steinhart-Hart, com sketch do tutorial, obtenho temperaturas ao redor de 75ºC (imagens abaixo).

Não conheço o código o suficiente para tentar alterar, por isso pergunto: alguém já fez esta experiência para um resistor NTC de 1K (imagem abaixo)?

Abraços!

 

Comentário de Alan Santos em 12 fevereiro 2016 às 17:29

Pessoal, vocês que estão com leitura fixa em 273.15, lembre-se: o código está pegando o analogReference(EXTERNAL), Logo, ou você retira essa linha do código, ou conecta os 5V no AREF como na imagem. Abraços!

Comentário de Fábio de Souza Guedes em 20 setembro 2015 às 12:17

Pessoal, estou com uma mesma dúvida que já perguntaram aqui neste fórum. É possível utilizar mais Termistor NTC nesse programa e como devo fazer isso?

Comentário de Edwaldo Queiroz Dias em 12 setembro 2015 às 19:48

Galera,

Boa tarde.

É bem possível que esses valores incorretos (negativos) estejam sendo gerados por resistor incorreto.

Vejam os valores deste programa e observem, à direita e em baixo, "Model Calculator".

Se precisarem, vejam o coeficiente do seu termistor neste arquivo. Na segunda página há uma tabela. Na primeira coluna, o valor do termistor e na segunda coluna, o coeficiente correspondente.

Preencham os dados do programa acima, com base nos dados do arquivo de informações do termistor e alterem o "Model Calculator", que verão valores PRÓXIMOS aos negativos que estão encontrando.

Espero ter ajudado.

Um grande abraço e bons projetos.

Comentário de Marcia Guimaraes em 9 agosto 2015 às 21:45

Pois ée.... Fiz os 2 projetos e também só retorna -273,15 C. 

Comentário de Vinícius Barbosa Varoto em 7 agosto 2015 às 10:31

Galera, eu queria fazer um programa sem usar biblioteca. Fiz todas as contas da equação de Steinhart-Hart, mas o arduino apresentava uma temperatura de 10 graus quando a temperatura era de 20. Eu verifiquei com um multímetro que a tensão e a resistência apresentadas pelo programa estavam corretas. Então eu encontrei um cara que não usou nada disso, ele apenas multiplicou o valor lido por uma constante e deu certo. https://www.youtube.com/watch?v=uMysa8YlodA. Vejam nos comentários. Mas mesmo assim é importante que eu faça da maneira como vocês mostram no artigo acima. Abaixo deixo meu programa pra quem puder me ajudar. Obrigado.

#include <math.h>
void setup() {
  Serial.begin(9600);
  pinMode(A0,INPUT);
}
void loop() {
  double n=0; //numero que o pino A0 le
  double Rt=0; //resistencia calculada
  float t=0; //temperatura
  float v=5;//tensao no termistor
  n=analogRead(A0);
  v=5-(analogRead(A0)/1023.0)*5.0;//calculo da tensao no ntc
  Rt=(5*(10000/(5-v)))-10000; //calculo da resistencia do ntc no momento da leitura
  t=(1/(0.001229148+(0.000234125*log(Rt))+(0.0000000876741*pow(log(Rt),3))))-273.15;//equação de Steinhart-Hart
  Serial.print("n= ");
  Serial.print(n);
  Serial.print("Tensao: ");
  Serial.print(v);
  Serial.print("\tResistencia: ");
  Serial.print(Rt);
  Serial.print("\tTemperatura: ");
  Serial.println(t);
  delay(1000);
}

Comentário de Christiano Reis em 2 março 2015 às 13:14

Ai juliano wiesniewski!! Fique atento ao fator beta. É ele que define o valor da temperatura. Se você tiver errando esse cara, vai vim temperaturas zuadas mesmo.

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço