Alternativas para Medição de Temperatura com Arduino

Neste artigo vamos analisar os principais sensores existentes no mercado brasileiro para a medição de temperatura com Arduino.


Na Internet existem excelentes tutoriais sobre medição da temperatura com o Arduino.
No entanto, sabemos que   existem várias opções de sensores disponíveis para essa finalidade, o que pode gerar uma certa dúvida na hora da compra.

Nosso objetivo aqui é descrever os principais sensores disponíveis no mercado brasileiro comparando suas características de forma a ajudar nossos leitores a decidirem qual é a melhor alternativa para usarem em seus projetos.

Vamos iniciar falando sobre cada um deles apontando suas características, vantagens e desvantagens e, no final, faremos um quadro resumo das especificações para facilitar a comparação.


Termistores

Termistor NTC
Termistor

Descrição:

Termistores são termoresistores feitos com materiais semicondutores que, por suas características, podem ser usados para medir e controlar a temperatura.
Tecnicamente, todos os resistores são termistores, pois suas resistências variam com a temperatura. No entanto, esses componentes são feitos para que essas mudanças ocorram de forma drástica de modo que sejam identificáveis.
Pelo fato dos termistores serem muito sensíveis às variações de temperatura, existe certa dificuldade em estabelecer uma relação entre os dois valores, pois essa variação não é linear.
Outro efeito colateral dos termistores é que, como eles trabalham em função da corrente, a temperatura detectada vai ser sempre um pouco “mais quente” que a temperatura ambiente.
Felizmente existem bibliotecas disponíveis para o Arduino que corrigem e  facilitam esses cálculos.
Os termistores podem ser classificados em duas categorias: O NTC (Negative Temperature Coeficient), no qual a resistência é inversamente proporcional à temperatura e o PTC (Positive Temperature Coeficient) com comportamento inverso. O primeiro é mais difundido por ter um custo menor de fabricação.

Vantagens:

•    Mais baratos!
•    Melhor relação custo/benefício, pois possuem boa precisão;
•   Mais fácil de serem adaptados para serem usados em baixo d’água, pois são apenas resistores;
•    Mais resistentes e duráveis

Desvantagens:

•    Precisam de cálculos relativamente complexos (Bibliotecas) para interpretar as leituras;
•    Não trabalham muito bem em altas temperaturas.

Tutoriais:

A FATEC de Jundiaí/SP tem um ótimo tutorial com esquemas de ligação que você encontra aqui

Bibliotecas:

A librarys de termistores estão há algum tempo sem atualização, mas ainda funcionam nas versões atuais do Arduino. Existe a opção de obtê-la pela própria IDE. Seguem alguns links: ThermistorThermistor4

Especificações:

Como existem vários fabricantes, optamos deixar a critério do leitor pesquisar o modelo desejado.

Variações:

A GBK Robotics possui um módulo termistor bem prático: veja aqui.
É possível também encontrar versões de termistores a prova de água.

DHT11

dht11 - sensor de temperatura
Sensor Temperatura DHT11

O sensor DHT11, bastante conhecido dos makers, nada mais é do que um dispositivo que traz embutido um componente NTC para medição de temperatura e um elemento capacitivo para medição da umidade. Seu grande diferencial é que é possível obter essas duas medidas usando apenas um pino do Arduino.

Vantagens:

  • Medição da temperatura e umidade em uma única porta;
  • Possui uma library bastante completa, onde é possível obter os valores em Celsius e Fahreinheit, bem como outras opções bem interessantes.

Desvantagens:

  • O DHT11 é relativamente lento. Segundo a literatura, é necessário um intervalo de 2 segundos entre as leituras.
  • A precisão também não é boa, pois somente computa valores positivos inteiros (de acordo com a versão).

Tutoriais:

Veja aqui o tutorial da AdaFruit.

Bibliotecas:

Essa excelente biblioteca está disponível pela IDE do Arduino e também no GitHub. A partir da versão 2.30, será necessário baixar esta outra library: https://github.com/adafruit/Adafruit_Sensor

Especificações:

Veja aqui o manual da MicroPik

Variações:

O DHT22 é uma versão aprimorada do DHT11 que corrige vários de seus problemas. Existe também um módulo para o DHT11 que facilita sua ligação.

LM35

Sensor temperatura LM35
SensorTemperatura LM35

O sensor LM35 é um circuito integrado onde seu componentes apresentam uma saída de tensão linear referente à temperatura atual. Ele é apresentado com vários tipos de encapsulamentos, sendo o mais comum o TO-92, que mais se parece com um transistor.

Este sensor normalmente é utilizado colando-o sobre a superfície que se deseja medir a temperatura. Nesse caso sua temperatura estará em torno de 0.01ºC abaixo da temperatura da superfície que se encontra colado, pressupondo que a temperatura da superfície seja a mesma que a temperatura do ar que se encontra ao redor desde ambiente.

No LM35, para cada 10mV na saída representa um grau Celsius. Então se é medido em sua saída  222 mV, isso  representa que a temperatura é de 22,2°C, partindo deste principio,  qualquer multímetro  pode ser usado como um termômetro de precisão.

Vantagens:

  • Facilidade de uso pois, diferentemente dos termistores, a relação entre as medidas é linear. Dessa forma a temperatura pode ser calculada com uma simples regra de três sem bibliotecas adicionais.
  • Calibrado para temperaturas em Celsius

Desvantagens:

  • O LM35 é sensível às interferências eletromagnéticas, o que dificulta sua ligação.

Tutoriais:

Bibliotecas:

Não necessita de bibliotecas, devido à facilidade dos cálculos.

Especificações:

http://www.ti.com/lit/ds/symlink/lm35.pdf

Variações:

Pode ser encontrado em outros tipos de encapsulamentos

DS18B20

Sensor DS18B20
Sensor DS18B20

O DS18B20 é um circuito integrado para medição da temperatura com ótima precisão. Cada sensor possui um identificador  único o que permite conectar vários deles em um único pino (One-Wire) com boa precisão mesmo a grandes distâncias do micro controlador.

Vantagens:

  • Versões a prova d’água;
  • Podem ser conectados vários sensores (<= 127) em uma mesma porta;
  • Medição a grandes distâncias
  • Alimentação elétrica pelo modo regular ou “parasita”
  • Possui funções de alarme de temperaturas

Desvantagens

  • Exige o uso de várias bibliotecas, o que pode, em alguns casos, consumir mais memória.

Tutoriais:

Bibliotecas:

Dallas Temperature e One-Wire

Especificações:

http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

Variações:

Pode ser encontrado na versão à prova d’água

Outras Alternativas

Existem algumas alternativas menos conhecidas no mundo Arduino, das quais destaco as seguintes:

  • Termopares: São sensores mais robustos capazes de medir baixas e altas temperaturas ( -200°C a 1350°C ) por isso são bastante usados em ambientes industriais.
    Os termopares não apresentam nenhuma eletrônica complexa e consistem simplesmente da junção de 2 tipos de metais que produzem uma diferença de tensão entre seus terminais. É possível então estabelecer uma relação entre a temperatura e a tensão detectada. Veja aqui um tutorial sobre os termopares do tipo K: https://learn.adafruit.com/thermocouple?view=all
  • MCP9808: Baseado no microprocessador MCP9808, este sensor é um dois mais precisos do mercado e pode se comunicar com o Arduino através de I2C. Tutorial: http://www.filipeflop.com/pd-1529a7-sensor-de-temperatura-mcp9808.html?ct=&p=1&s=1

Quadro comparativo

 
Faixa * Precisão * Preço US$ **
Termistor NTC  – 40°C a + 125 ºC  ± 1.0 ºC  0,5
DHT11  – 0°C a + 50 ºC  ± 2.0 ºC  3,0
DHT22  – 40°C a + 80ºC  ± 0,5 ºC  6,0
LM35  – 55ºC a + 150ºC  ± 0,5 ºC  2,5
DS1820B  – 55°C a +125°C  ± 0,5 ºC  4,0
Termopar K  – 100°C a 500°C  ± 2.0 ºC  10,0
 MCP9808  – 40°C a +125°C  ±0,25°C  11,0

Obs:
* Valores médios
** Preço aproximado no Brasil

Referências

Conhece algum outro sensor que não aparece nessa relação ou gostaria de acrescentar alguma informação que faltou? Comente aí!
Veja também esses materiais complementares sobre o assunto:

6 comentários em “Alternativas para Medição de Temperatura com Arduino”

  1. Oi José Cintra,
    Muito legal este artigo. Somente um comentário sobre o DS1820B. Eu considero fácil seu uso e programação, utilizando-se das bibliotecas “OneWire” e “DallasTemperature”, um programa para fazer mostrar a temperatura podería ser reduzida ao código abaixo:

    #include
    #include
    #define ONE_WIRE_BUS 2
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);

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

    void loop(void)
    {
    Serial.print(“Solicitando leitura de temperatura…”);
    sensors.requestTemperatures();
    Serial.println(“OK”);
    Serial.print(“Temperatura dispositivo 1 (index 0) é: “);
    Serial.println(sensors.getTempCByIndex(0));
    }

  2. Boa Matéria, Parabéns.
    No caso do DS18B20 realmente segurar um microcontrolador por quase 1 seg. para fornecer a temperatura pode ser um problema, ainda mais para projetos que precisam de respostas rápidas para efetuar seus controles.

    Porém, na library DallasTemperature_h tem um comando que poucos conhecem, o Sensor.setWaitForConversion(false); Com este comando a leitura do sensor passa a ser assíncrona e a library não segura mais o microcontrolador.

    Mas, o delay para fazer a leitura deve ser dado no sketch do projeto. O tempo médio para fazer a leitura da temperatura com 12 bits de precisão é 750 ms, no exemplo abaixo mostra como fazer a leitura do DS18B20 deixando o microcontrolador livre para outras funções.

    #include
    #include

    OneWire pino(2);
    DallasTemperature Sensor(&pino);
    DeviceAddress AddrSensor;
    long HoraDeLerTemp=0;

    void setup(void){
    Serial.begin(115200);
    Sensor.begin();
    Sensor.getAddress(AddrSensor, 0);
    Sensor.setWaitForConversion(false); // <== coloca no modo assincrono
    }

    void loop(){
    //…
    //Faz outros controles
    //…

    if (HoraDeLerTemp<millis()){ //Checa se passou 750ms e faz a leitura
    float temperatura = Sensor.getTempC(AddrSensor);
    Serial.println(temperatura);
    Sensor.requestTemperatures(); //Prepara nova leitura
    HoraDeLerTemp=millis()+750; //após 750ms
    }
    }

    Dependendo do projeto, eu recomendo dar uma olhada no sensor TMP36, ele não precisa de librarys e a leitura é feita diretamente no A/D.

    1. Obrigado, Celso.
      Em breve, pretendo atualizar essa matéria e levarei em conta suas contribuições
      Abraço.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *