Skip to Content

Tutorial do sensor de temperatura analógico LM35 com Arduino

Tutorial do sensor de temperatura analógico LM35 com Arduino

Neste tutorial, vais aprender a usar um LM35 sensor de temperatura analógico com Arduino. Incluí um diagrama de ligação e códigos de exemplo para te ajudar a começar!

Na primeira parte deste artigo, podes encontrar as especificações e o pinout do LM35. De seguida, vamos ver como ligar o sensor ao Arduino.

O primeiro exemplo de código pode ser usado para obter leituras de temperatura do sensor e mostrar os resultados no Monitor Serial. No segundo exemplo, vou mostrar-te como usar a tensão de referência interna de 1,1 V do Arduino para obter leituras mais precisas. Por fim, vamos ver como mostrar a temperatura num  I2C LCD  para criar um termómetro autónomo.

Materiais

Componentes de hardware

LM35 analog temperature sensor (TO-92) × 1 Amazon
Arduino Uno × 1 Amazon
Breadboard × 1 Amazon
Jumper wires ~ 10 Amazon
16×2 character I2C LCD × 1 Amazon
USB cable type A/B × 1 Amazon

Software

Arduino IDEArduino IDE

Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.

Sobre o LM35

O LM35 é um sensor de temperatura em graus Celsius barato e de precisão fabricado pela Texas Instruments. Fornece uma tensão de saída linearmente proporcional à temperatura em graus Celsius e, por isso, é muito fácil de usar com o Arduino.

O sensor não necessita de calibração ou ajuste externo para fornecer precisões de ±0,5°C à temperatura ambiente e ±1°C na faixa de temperatura de −50°C a +155°C.

Uma das desvantagens do sensor é que ele requer uma tensão de polarização negativa para ler temperaturas negativas. Portanto, se isso for necessário para o teu projeto, recomendo usar o DS18B20 ou o TMP36. O TMP36 da Analog Devices é muito semelhante ao LM35 e pode medir temperaturas de -40°C a 125°C sem componentes externos.

Podes encontrar um tutorial dedicado para o TMP36 e DS18B20 aqui:

O fator de escala de saída do LM35 é 10 mV/°C e fornece uma tensão de saída de 250 mV a 25°C (ver figura abaixo).

LM35 output voltage in mV versus temperature
Tensão de saída do LM35 em mV versus temperatura

Note que o sensor funciona numa faixa de tensão de 4 a 30 V e que a tensão de saída é independente da tensão de alimentação.

O LM35 faz parte de uma série de sensores de temperatura analógicos vendidos pela Texas Instruments. Outros membros da série incluem:

  • LM335 – tensão de saída diretamente proporcional à temperatura absoluta a 10 mV/°K.
  • LM34 – tensão de saída linearmente proporcional à temperatura em Fahrenheit a 10 mV/°F.

Pinout do LM35

O LM35 vem em 4 tipos de embalagem diferentes, mas o tipo mais comum é o pacote de transistor TO-92 de 3 pinos.

Pacote TO-92

O pinout do sensor é o seguinte:

LM35 analog temperature sensor pinout

Note que o pino 1 (+V S ) é o pino mais à esquerda quando o lado plano do sensor (com o texto impresso) está virado para ti.

Nome Pino Descrição
+V S 1 Pino de alimentação positiva (4 – 30 V)
V OUT 2 Saída analógica do sensor de temperatura
GND 3 Pino de terra do dispositivo, ligar ao terminal negativo da fonte de alimentação

Podes encontrar as especificações do LM35 na tabela abaixo.

Especificações do sensor de temperatura analógico LM35

Tensão de alimentação 4 V a 30 V
Corrente de funcionamento 60 µA
Faixa de temperatura -55°C a +155°C
Precisão garantida ±0,5°C a +25°C
±1°C de -55°C a +150°C
Fator de escala de saída 10 mV/°C
Tensão de saída a 25°C 250 mV
Autoaquecimento <0,1°C em ar parado
Pacote TO-92 de 3 pinos
Fabricante Texas Instruments

Para mais informações, podes também consultar o datasheet aqui:

Ligação – Ligação do sensor de temperatura analógico LM35 ao Arduino

Ligar um LM35 ao Arduino é muito fácil, pois só precisas de ligar 3 pinos. Começa por ligar o pino +V S  ao output de 5 V do Arduino e o pino GND ao terra.

De seguida, liga o pino do meio (V OUT ) a qualquer uma das entradas analógicas do Arduino. Neste caso, usei o pino de entrada analógica A0.

LM35 analog temperature sensor with Arduino Uno wiring diagram
Diagrama de ligação do sensor de temperatura analógico LM35 com Arduino Uno

As ligações também estão indicadas na tabela abaixo:

Ligações do sensor de temperatura analógico LM35

LM35 Arduino
Pino 1 (+V S ) 5 V
Pino 2 (V OUT ) Pino A0
Pino 3 (GND) GND

Converter a tensão de saída do LM35 em temperatura

Para converter a tensão de saída do sensor em temperatura em graus Celsius, podes usar a seguinte fórmula:

Temperatura (°C) = V OUT / 10

com V OUT  em milivolt (mV). Portanto, se a saída do sensor for 750 mV, a temperatura é 75°C.

Como podes ver no diagrama de ligação acima, a saída do LM35 está ligada a uma das entradas analógicas do Arduino. O valor dessa entrada analógica pode ser lido com a função  analogRead(). No entanto, esta função não retorna realmente a tensão de saída do sensor.

As placas Arduino contêm um conversor analógico-digital (ADC) multicanal de 10 bits, que mapeia tensões de entrada entre 0 e a tensão de funcionamento (5 V ou 3,3 V) em valores inteiros entre 0 e 1023. Num Arduino Uno, por exemplo, isto dá uma resolução entre leituras de 5 volts / 1024 unidades, ou 0,0049 volts (4,9 mV) por unidade.

Portanto, se usares analogRead() para ler a tensão numa das entradas analógicas do Arduino, obterás um valor entre 0 e 1023.

Para converter este valor de volta para a tensão de saída do sensor, podes usar:

V OUT = leitura do ADC * (Vref / 1024)

Vamos usar estas fórmulas nos exemplos de código abaixo.

Exemplo de código do sensor de temperatura analógico LM35 com Arduino

Com o seguinte código de exemplo, podes ler a temperatura de um sensor LM35 e mostrar no Monitor Serial.

/* LM35 analog temperature sensor with Arduino example code. More info: https://www.makerguides.com */

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

  delay(1000); // wait a second between readings
}

Deverás ver a seguinte saída no Monitor Serial:

Saída do Monitor Serial

Certifica-te de que a taxa de transmissão (baud rate) do Monitor Serial está também definida para 9600.

Como o código funciona

Primeiro, defini a que pino do Arduino o pino V OUT do sensor está ligado. Neste caso, usamos o pino analógico A0. A instrução #define pode ser usada para dar um nome a um valor constante. O compilador substituirá todas as referências a esta constante pelo valor definido quando o programa for compilado. Portanto, em todo o lado onde menciones sensorPin, o compilador substituirá por A0 quando o programa for compilado.

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

Na secção setup do código, iniciamos a comunicação serial com uma taxa de 9600 baud.

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
}

Na secção loop do código, começamos por fazer uma leitura do sensor com a função analogRead(pin).

  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

De seguida, usamos as fórmulas que mencionei anteriormente no artigo para converter a leitura em tensão e depois em temperatura.

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

Por fim, os resultados são impressos no Monitor Serial:

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

Melhorar a precisão das leituras

Como usamos a tensão de referência padrão do Arduino para a entrada analógica (ou seja, o valor usado como topo da faixa de entrada), a resolução máxima que obtemos do ADC é 5000/1024 = 4,88 mV ou 0,49°C.

Se quisermos uma precisão maior, podemos usar a referência interna de 1,1 V do Arduino. Esta tensão de referência pode ser alterada usando a função analogReference().

Com 1,1 V como tensão de referência, obtemos uma resolução de 1100/1024 = 1,07 mV ou 0,11°C. Note que isto limita a faixa de temperatura que podemos medir a 0 a 110 graus Celsius.

Realcei as linhas que precisas de adicionar/alterar no código abaixo:

/* LM35 analog temperature sensor with Arduino example code. More info: https://www.makerguides.com */

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);

  // Set the reference voltage for analog input to the built-in 1.1 V reference:
  analogReference(INTERNAL);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (1100 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

  // Print the temperature in the Serial Monitor:
  Serial.print(temperature);
  Serial.print(" \xC2\xB0"); // shows degree symbol
  Serial.println("C");

  delay(1000); // wait a second between readings
}
Repara nos incrementos menores entre as leituras

Exemplo de código LM35 com LCD I2C e Arduino

Se quiseres fazer um termómetro autónomo que não precise de computador, pode ser útil saber como mostrar as leituras de temperatura num ecrã LCD.

Com o código de exemplo abaixo, podes mostrar as leituras de temperatura num 16×2 character I2C LCD.

Ligar o LCD I2C é bastante fácil, como podes ver no diagrama de ligação abaixo. Podes consultar o meu tutorial detalhado sobre How to control a character I2C LCD with Arduino para mais informações. Se quiseres usar um LCD padrão sem I2C, dá uma vista de olhos em How to use a 16×2 character LCD with Arduino.

LM35 analog temperature sensor with 16x2 character I2C LCD and Arduino wiring diagram.
Diagrama de ligação do sensor de temperatura analógico LM35 com LCD I2C 16×2 caracteres e Arduino.

As ligações também estão indicadas na tabela abaixo:

Ligações do LCD I2C

LCD de caracteres I2C Arduino
GND GND
VCC 5 V
SDA A4
SCL A5

Note que o sensor de temperatura LM35 está ligado da mesma forma que antes.

Instalar as bibliotecas Arduino necessárias

Para usar um LCD I2C, precisas de instalar a  LiquidCrystal_I2C  biblioteca Arduino.

Para instalar esta biblioteca, vai a Tools > Manage Libraries (Ctrl + Shift + I no Windows) no IDE do Arduino. O Library Manager abrirá e atualizará a lista de bibliotecas instaladas.

Installing an Arduino library step 1 open Library Manager
Library Manager

Agora procura por ‘liquidcrystal_i2c’ e procura a biblioteca de  Frank de Brabander . Seleciona a versão mais recente e depois clica em Install.

Instalar a biblioteca LiquidCrystal_I2C do Arduino

Exemplo de código LM35 com LCD I2C

/* LM35 analog temperature sensor with I2C LCD and Arduino example code. 
   https://www.makerguides.com */

// Include the required Arduino libraries:
#include "LiquidCrystal_I2C.h"

// Create a new instance of the LiquidCrystal_I2C class:
LiquidCrystal_I2C lcd(0x27, 16, 2);

// Degree symbol:
byte Degree[] = {
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
  B00000
};

// Define to which pin of the Arduino the output of the LM35 is connected:
#define sensorPin A0

void setup() {
  // Start the LCD and turn on the backlight:
  lcd.init();
  lcd.backlight();

  // Create a custom character:
  lcd.createChar(0, Degree);
}

void loop() {
  // Get a reading from the temperature sensor:
  int reading = analogRead(sensorPin);

  // Convert the reading into voltage:
  float voltage = reading * (5000 / 1024.0);

  // Convert the voltage into the temperature in degree Celsius:
  float temperature = voltage / 10;

  // Print the temperature on the LCD;
  lcd.setCursor(0, 0);
  lcd.print("Temperature:");
  lcd.setCursor(0, 1);
  lcd.print(temperature);
  lcd.write(0); // print the custom character
  lcd.print("C");

  delay(1000); // wait a second between readings
}

Deverás ver a seguinte saída no LCD:

DS18B20-16x2-I2C-LCD-output
Saída no LCD

Conclusão

Neste tutorial, mostrei-te como usar um sensor de temperatura analógico LM35 com Arduino. Se quiseres aprender mais sobre outros sensores de temperatura, consulta os artigos abaixo.

Se tiveres alguma dúvida, sugestão, ou se achares que falta algo neste tutorial, por favor deixa um comentário abaixo.