Guia para sensores de temperatura LM35, LM335 e LM34 com Arduino

Tempo de leitura: 7 minutes

Este guia mostra como usar os sensores de temperatura LM35 (LM35DZ), LM335 e LM34 com a placa Arduino. Mostraremos como conectar os sensores e escrever o código para obter leituras de temperatura. Por último, construiremos um exemplo de projeto para exibir as leituras do sensor em um display OLED.

 

Apresentando os sensores de temperatura LM35, LM335 e LM34

O LM35, LM335 e LM34 são sensores de temperatura linear que emitem uma tensão proporcional ao valor da temperatura.

Sensor de temperatura Voltagem de saída Linearidade
LM35 (LM35DZ) proporcional à temperatura em Celsius (ºC) 10mV/ºC
LM335 proporcional à temperatura em Kelvin (ºK) 10mV/ºK
LM34 proporcional à temperatura em Fahrenheit (ºF) 10mV/ºF

Esses sensores funcionam de maneira semelhante, mas são calibrados de forma diferente para produzir uma tensão proporcional às diferentes unidades de temperatura.

O LM35 produz 10 mV por aumento de graus Celsius na temperatura. De forma semelhante, o LM335 produz 10 mV por graus Kelvin de aumento de temperatura e o LM34 produz 10 mV por graus Fahrenheit de aumento de temperatura.

Por exemplo, se o LM35 produz uma tensão de 345 mV, isso significa que temos um valor de temperatura de 34,5ºC.

Para obter mais informações sobre esses sensores, você pode consultar sua ficha técnica:

 

Pinagem LM35 (LM35DZ)

O LM35 possui apenas três pinos, VCC, Vout e GND.

Aqui estão as conexões que você precisa fazer entre o LM35 e o Arduino:

LM35 / LM34 Arduino
VCC 5V
Vout Qualquer pino analógico
GND GND

Observação: se você estiver usando um sensor de temperatura LM34, a pinagem é a mesma do LM35.

 

Pinagem LM335

A pinagem do sensor de temperatura LM335 é ligeiramente diferente.

LM335 Arduino
Adj Não conecte
Vout Qualquer pino analógico (Pull Up com resistor de 2k Ohm)
GND GND

O pino de ajuste pode ser usado para calibrar o sensor e obter leituras de temperatura mais precisas. Não usaremos esse pino neste tutorial, então ele deve ser deixado desconectado.

 

Diagrama esquemático

Você deve seguir o mesmo diagrama esquemático se estiver usando um sensor de temperatura LM35 ou LM34. Você deve seguir um diagrama ligeiramente diferente se estiver usando o LM335.

 

LM35 e LM34 com Arduino

 

LM335 com Arduino

 

 

Código – temperatura de leitura

O código a seguir lê a temperatura do sensor LM35 e exibe as leituras no Monitor Serial. Este código também é compatível com LM335 e LM34 – você só precisa descomentar algumas linhas no código para usar o sensor certo.

 

const int sensorPin = A0; 
float sensorValue;
float voltageOut;

float temperatureC;
float temperatureF;

// descomente se estiver usando LM335
//float temperatureK;

void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  voltageOut = (sensorValue * 5000) / 1024;
  
  //calcula a temperatura para LM35 (LM35DZ)
  temperatureC = voltageOut / 10;
  temperatureF = (temperatureC * 1.8) + 32;

  //calcular a temperatura para LM335
  //temperatureK = voltageOut / 10;
  //temperatureC = temperatureK - 273;
  //temperatureF = (temperatureC * 1.8) + 32;

  //calcula a temperatura para LM34
  //temperatureF = voltageOut / 10;
  //temperatureC = (temperatureF - 32.0)*(5.0/9.0);

  Serial.print("Temperatura(ºC): ");
  Serial.print(temperatureC);
  Serial.print("  Temperatura(ºF): ");
  Serial.print(temperatureF);
  Serial.print("  Voltagem(mV): ");
  Serial.println(voltageOut);
  delay(1000);
}

 

Como funciona o código

Você começa definindo o pino que está conectado à saída do sensor. Deve ser um pino analógico. Estamos usando o pino A0, mas você pode usar qualquer outro pino analógico.

const int sensorPin = A0;

Defina uma variável que manterá o valor analógico lido do sensor:

float sensorValue;

A variável voltageOut armazenará o valor real de saída de tensão proveniente do sensor.

float voltageOut;

Em seguida, crie variáveis que armazenarão o valor da temperatura. Aqui, criamos as variáveis de temperaturaC e temperaturaF para manter a temperatura em Celsius e Fahrenheit, respectivamente.

float temperatureC;
float temperatureF;

Se você estiver usando o sensor LM335, também precisará de uma variável para manter a temperatura em Kelvin. Portanto, se você estiver usando esse sensor, será necessário remover o comentário da seguinte linha:

//float temperatureK;

Em setup(), declare o sensorPin como uma entrada:

pinMode(sensorPin, INPUT);

Inicialize uma comunicação serial a uma taxa de transmissão de 9600. Você precisa inicializar a comunicação serial para que possa exibir as leituras no Monitor Serial:

Serial.begin(9600);

No loop(), leia o valor vindo de seu sensor e salve-o na variável voltageOut. Para ler um valor analógico com o Arduino, você só precisa usar a função analogRead() e passar o pino que deseja ler como um argumento.

voltageOut = analogRead(sensorPin);

Conforme mencionado anteriormente, esses sensores emitem um valor de tensão que é proporcional à temperatura.

Os valores analógicos lidos do Arduino podem ter um valor entre 0 e 1024, em que 0 corresponde a 0V e 1024 a 5V. Portanto, podemos facilmente obter a tensão de saída do sensor em mV.

voltageOut = (sensorValue * 5000) / 1024

No caso do sensor LM35, vimos que 10mV corresponde a um aumento de graus Celsius na temperatura. Portanto, a temperatura em Celsius corresponde à tensão lida do sensor em mV dividida por 10mV.

temperatureC = voltageOut / 10;

Para obter a temperatura em Fahrenheit, só precisamos usar a conversão Celsius -> Fahrenheit:

temperatureF = (temperatureC * 1.8) + 32;

Se você estiver usando um LM335 ou LM34, use os mesmos cálculos para obter a temperatura. Você só precisa ter em mente que o LM335 retorna a temperatura em graus Kelvin e o LM34 em graus Fahrenheit. Em seguida, você pode converter os valores para outras unidades, se necessário.

Por fim, imprima as leituras dos sensores no Serial Monitor em graus Celsius e Fahrenheit.

Serial.print("Temperatura(ºC): ");
Serial.print(temperatureC);
Serial.print("  Temperatura(ºF): ");
Serial.print(temperatureF);

Para fins de depuração, também imprimimos a tensão.

Serial.print("  Voltagem(mV): ");
Serial.println(voltageOut);

O loop() é repetido a cada segundo.

delay(1000);

 

Demonstração

Faça upload do código para o seu IDE Arduino. Não se esqueça de selecionar a placa e a porta COM corretas no menu Ferramentas.

Depois disso, abra o Monitor serial a uma taxa de transmissão de 9600. Você deve obter novas leituras de temperatura a cada segundo. Você pode cobrir o sensor com o dedo para ver o aumento dos valores de temperatura.

 

Leituras de temperatura no display OLED

Nesta seção, mostraremos como exibir as leituras do sensor em um display OLED.

Para um tutorial aprofundado sobre como usar o display OLED com o Arduino, siga o próximo guia:

Peças necessárias

Para este projeto, você precisará das seguintes partes:

  • Placa Arduino Uno ou compatível.
  • Sensor de temperatura LM35 (ou LM335, LM34)
  • Resistor de 2k Ohm (se estiver usando um LM335)
  • Display OLED I2C
  • Jumper / Fios para Ligação.
  • ProtoBoard

Você pode encontrar em diversos sites no brasil ou no MercadoLivre está lista de material, caso não tenha.

 

Diagrama esquemático

Conecte todos os componentes conforme mostrado no próximo diagrama esquemático:

 

Instalando Bibliotecas OLED

Para controlar o display OLED, você precisa das bibliotecas adafruit_SSD1306.h e adafruit_GFX.h. Siga as próximas instruções para instalar essas bibliotecas.

1. Abra seu Arduino IDE e vá para Sketch Include Library > Manage Libraries O Library Manager deve abrir.

2. Digite “SSD1306” na caixa de pesquisa e instale a biblioteca SSD1306 da Adafruit.

Instalação da placa SSD1306 OLED Library Arduino UNO

3. Após instalar a biblioteca SSD1306 da Adafruit, digite “GFX” na caixa de pesquisa e instale a biblioteca.

4. Depois de instalar as bibliotecas, reinicie o seu Arduino IDE.

 

Código – Exibir leituras em OLED

Depois de conectar o circuito e instalar as bibliotecas necessárias, carregue o código a seguir em sua placa Arduino.

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // Largura da tela OLED, em pixels
#define SCREEN_HEIGHT 64 // Altura do display OLED, em pixels

// declaração para um display SSD1306 conectado a I2C (pinos SDA, SCL)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

const int sensorPin = A0; 
float sensorValue;
float voltageOut;

float temperatureC;
float temperatureF;

// descomente se estiver usando LM335
//float temperatureK;

void setup() {
  pinMode(sensorPin, INPUT);
  Serial.begin(9600);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("Falha na alocação de SSD1306"));
    for(;;);
  }
  
  delay(2000);
  display.clearDisplay();
  display.setTextColor(WHITE);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  voltageOut = (sensorValue * 5000) / 1024;
  
  // calcula a temperatura para LM35 (LM35DZ)
  temperatureC = voltageOut / 10;
  temperatureF = (temperatureC * 1.8) + 32;

  // calcular a temperatura para LM335
  //temperatureK = voltageOut / 10;
  //temperatureC = temperatureK - 273;
  //temperatureF = (temperatureC * 1.8) + 32;

  // calcula a temperatura para LM34
  //temperatureF = voltageOut / 10;
  //temperatureC = (temperatureF - 32.0)*(5.0/9.0);

  Serial.print("Temperatura(ºC): ");
  Serial.print(temperatureC);
  Serial.print("  Temperatura(ºF): ");
  Serial.print(temperatureF);

  // limpar a tela
  display.clearDisplay();

  // exibe a temperatura Celsius
  display.setTextSize(1);
  display.setCursor(0,0);
  display.print("Temperatura: ");
  display.setTextSize(2);
  display.setCursor(0,10);
  display.print(temperatureC);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("C");

  // exibe a temperatura Fahrenheit
  display.setTextSize(1);
  display.setCursor(0, 35);
  display.print("Temperatura: ");
  display.setTextSize(2);
  display.setCursor(0, 45);
  display.print(temperatureF);
  display.print(" ");
  display.setTextSize(1);
  display.cp437(true);
  display.write(167);
  display.setTextSize(2);
  display.print("F");

  display.display();    
  delay(1000);
 }

 

Demonstração

Parabéns! Você concluiu o projeto. Agora você pode verificar as leituras do sensor no display OLED. Novas leituras de temperatura são exibidas a cada segundo.

 

Empacotando

O LM35, LM335 e LM34 são sensores de temperatura linear que emitem uma tensão proporcional ao valor da temperatura. Eles podem ser alimentados pelo pino do Arduino 5V, e para ler a tensão, você usa um pino analógico.

Ler a tensão do sensor é tão fácil quanto usar a função analogRead() no pino do sensor. Depois, basta fazer um cálculo simples para obter a temperatura na unidade desejada.

 

Este artigo é uma tradução, apenas para facilitar o entendimento, visite o site original.

 

 

Visits: 1 Visits: 1199900