Código de Pesquisa

Aula 42: Usando o Sensor de Temperatura LM35 | Curso Arduino Passo a Passo

Aula 42: Usando o Sensor de Temperatura LM35 | Curso Arduino Passo a Passo

Nesta lição, aprenderemos a usar o sensor de temperatura LM35 com um Arduino para medir e exibir a temperatura em graus Celsius, Fahrenheit e Kelvin. Este sensor fornece uma tensão que é proporcional à temperatura, permitindo que leamos e processemos facilmente os dados em nosso programa Arduino. Ao final deste tutorial, você será capaz de implementar ações baseadas na temperatura em seus projetos.

O sensor de temperatura LM35 possui três pinos: o pino da esquerda é para a fonte de alimentação, o pino do meio fornece uma tensão correspondente à temperatura e o pino da direita é para o terra. O sensor opera em uma faixa de tensão de 4 a 30 volts e fornece uma saída de 10 milivolts por grau Celsius. Essa precisão permite leituras de temperatura precisas em várias aplicações.

Hardware Explicado

O componente principal deste projeto é o sensor de temperatura LM35. Ele é projetado para fornecer uma saída de tensão analógica que é diretamente proporcional à temperatura em graus Celsius. O sensor é adequado para uma ampla gama de temperaturas, de -55°C a +150°C, tornando-o versátil para diferentes ambientes.

LM35_pinout

O LM35 requer uma potência mínima (60 microamperes) e opera em uma ampla faixa de tensão. Sua impedância de saída é baixa, permitindo que ele interfira diretamente com os pinos de entrada analógica do Arduino sem circuitos adicionais. Essa simplicidade no design torna o LM35 uma excelente escolha para tarefas de medição de temperatura.

Detalhes da Ficha Técnica

Fabricante Texas Instruments
Número da peça LM35
Tensão de Lógica/IO 4-30 V
Corrente de saída (por canal) 1 mA máximo
Faixa de temperatura -55 a +150 °C
Tensão de saída 10 mV/°C
Precisão ±0,5 °C a 25 °C
Pacote TO-92

  • Garanta um fornecimento de energia adequado entre 4V e 30V para leituras precisas.
  • A tensão de saída é diretamente proporcional à temperatura (10 mV/°C).
  • Use capacitores de desacoplamento perto do pino de energia para estabilização.
  • Mantenha a polaridade correta ao conectar para evitar danos.
  • Certifique-se de fazer boas conexões para evitar entradas flutuantes, que podem causar leituras errôneas.

Instruções de Fiação

LM35_basic_wiring_bb

Para conectar o sensor de temperatura LM35, conecte o pino da esquerda (VCC) à saída de 5V no Arduino. O pino do meio (Saída) deve ser conectado ao pino de entrada analógica.A0, que usaremos para ler a temperatura. Por fim, conecte o pino correto (Terra) a um dos pinos de terra no Arduino. Certifique-se de que todas as conexões estejam seguras para evitar problemas durante a operação.

Ao fazer a ligação, lembre-se de que o LM35 pode ser alimentado com uma tensão de alimentação entre 4V e 30V, mas usar 5V é suficiente para aplicações com Arduino. Se você observar leituras de temperatura inesperadas, confira as conexões e assegure-se de que o sensor está devidamente alimentado.

Exemplos de Código e Passo a Passo

No código Arduino, definimos o pino de entrada analógica para ler a voltagem de saída do LM35 com o identificadorinPin, que está definido paraA0. Além disso, definimos uma constanteLM35_FACTORdefina para 0,01 para representar a saída do sensor por grau Celsius.

const int inPin = A0; // can change
const float LM35_FACTOR = 0.01; // do not change

Esta configuração nos permite ler a temperatura de maneira simples. Em seguida, inicializamos a comunicação serial nosetup()função para começar a enviar dados de temperatura ao monitor serial.

void setup() {
  Serial.begin(9600);
  Serial.println("Robojax LM35 for Arduino");
}

Dentro doloop()função, lemos continuamente a temperatura e a imprimimos em diferentes unidades. AprintTemperature()a função aceita um parâmetro de caractere para especificar o formato de temperatura desejado, permitindo que exibamos a temperatura em Celsius, Fahrenheit ou Kelvin.

void loop() {
  printTemperature('C');
  printTemperature('F');
  printTemperature('K');
  delay(1000); // Wait for 1000ms
}

Para tomar uma ação com base na temperatura, podemos verificar se a temperatura excede um determinado limite usando ogetTemperature()função. Esta função calcula a temperatura média em um número específico de amostras.

Para mais detalhes, assista ao vídeo associado para uma walkthrough completa do código (no vídeo às 10:15).

Demonstração / O que Esperar

Quando o sensor LM35 estiver devidamente conectado e o código do Arduino for carregado, você deverá ver a temperatura exibida em Celsius, Fahrenheit e Kelvin no monitor serial. Se você aplicar calor ao sensor, observará que as leituras de temperatura aumentam de acordo.

Esteja ciente de que a fiação incorreta pode levar a leituras de temperatura irregulares, como valores extremamente altos ou baixos. Sempre certifique-se de que o sensor está conectado corretamente para evitar esses problemas (no vídeo às 12:30).

Marcação de Títulos do Vídeo

  • 00:00- Introdução ao LM35
  • 02:30- Instruções de Fiação
  • 05:00- Explicação do Código
  • 10:15- Demonstração de Leitura de Temperatura
  • 12:30- Problemas Comuns e Soluções

Imagens

LM35_basic_project
LM35_basic_project
LM35_basic_wiring_bb
LM35_basic_wiring_bb
LM35_pinout
LM35_pinout
503-Lesson 42: Using an LM35 Temperature Sensor with Arduino
Idioma: C++
++
/*
 * Robojax Arduino Step-by-Step Course
 * Part 4: Temperature Sensors
 * Lesson 42: Introduction to LM35
 * This Arduino sketch is to use LM35 to measure temperature
 * This code has two ways to get temperature
 * 1-To print the temperature either in C, F or K on the serial monitor
 * 2-To return the value in C, F and K
 *


  Please watch video instruction here https://youtu.be/DRIC4wDu878
 This code is available at http://robojax.com/course1/?vid=lecture37
 
with over 100 lectures free on YouTube. Watch it here http://robojax.com/L/?id=338
Get the code for the course: http://robojax.com/L/?id=339

 * Written by Ahmad Shamshiri on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 * in Ajax, Ontario, Canada. www.robojax.com
 *


 *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.


*/

const int inPin =A0;//can change
const int iteration = 1000; //can change (see video)
const float LM35_FACTOR =0.01;// do not change

// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
  Serial.begin(9600);
  Serial.println("Robojax LM35 for Arduino");
  delay(500);
}

// the loop routine runs over and over again forever:
void loop() {
 //robojax.com LM35 Code for Arduino
  printTemperature('C');
  Serial.println();
  printTemperature('F');
  Serial.println();
  printTemperature('K');
  Serial.println();
  Serial.println();
//  Serial.print(" Temperature: ");
//  printDegree();
//  Serial.print(getTemperature('C'));
if(getTemperature('C') >87)
{
 // do something here (watch video)
}
//  Serial.println();
  delay(1000);//Wait for 1000ms (change it if you want)
}

/*
 * getTemperature()
 * @brief gets the average temperature
 * @param average temperature
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return returns one of the values above
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:36 in Ajax, Ontario, Canada
 */
float getTemperature(char type)
{
	// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
    float value,voltage,temperature;//define variables
    int sensorValue;
    float averageTemperature =0;

    for(int i=0; i< iteration; i++)
    {
      sensorValue = analogRead(inPin);//read analog value
      voltage = sensorValue * (5.0 / 1023.0); //convert it to voltage
      temperature = voltage / LM35_FACTOR; //convert voltage to temperature
      averageTemperature += temperature;//add
    }

    averageTemperature /=iteration;
  if(type =='F')
   {
    value = averageTemperature *9/5 + 32;//convert to Fahrenheit
   }else if(type =='K')
   {
    value = averageTemperature + 273.15;//convert to Kelvin
   }else{
    value = averageTemperature;// return Celsius
   }
    return value ;
}//getTemperature()

/*
 * printTemperature()
 * @brief prints  temperature on serial monitor
 * @param charact type
 * @param "type" is character
 *     C = Celsius
 *     K = Kelvin
 *     F = Fahrenheit
 * @return none
 * Written by Ahmad Shamshiri for robojax.com
 * on May 08, 2020 at 02:45 in Ajax, Ontario, Canada
 */
void printTemperature(char type)
{
	// Robojax.com Code YouTube Watch it here http://robojax.com/L/?id=338
    float value;
    float temp = getTemperature(type);
   Serial.print(temp);
    printDegree();
  if(type =='F')
   {
     Serial.print("F");
    }else if(type =='K')
   {
     Serial.print("K");
   }else{
     Serial.print("C");
   }

}//printTemperature()

/*
 * @brief prints degree symbol on serial monitor
 * @param none
 * @return returns nothing
 * Written by Ahmad Shamshiri on July 13, 2019
 * for Robojax Tutorial Robojax.com
 */
void printDegree()
{
    Serial.print("\\xC2");
    Serial.print("\\xB0");
}

Coisas que você pode precisar

Recursos e referências

Arquivos📁

Nenhum arquivo disponível.