Monitor de temperatura ambiente usando Arduino e o sensor LM35

Vários dispositivos de consumo agora envolvem monitoramento de temperatura. Por exemplo, a maioria dos aparelhos de ar condicionado no mercado apresentam controlo climático, onde o AC monitoriza continuamente a temperatura ambiente de uma sala e regula o ar condicionado de acordo. Até mesmo alguns relógios digitais agora possuem monitores de temperatura incorporados. Muitos outros aparelhos de consumo também oferecem monitoramento de temperatura.

Neste projeto, construímos um sensor de temperatura usando Arduino e o sensor de temperatura LM35. O LM35 pode ser usado para detectar temperaturas ambientes e de superfície.

O objetivo do sensor construído aqui é monitorar a temperatura ambiente de uma sala durante um ciclo de 24 horas e exibir a temperatura atual, a temperatura máxima registrada e a temperatura mínima registrada nesse ciclo de 24 horas em um painel LCD.

Componentes necessários:
1. Arduino UNO x1
2. Um LCD de 16×2 caracteres x1
3. Um pote de 10K x1
4. Um resistor de 330 Ohms ou qualquer resistor de baixo valor x1
5. Um sensor LM35 x1
6. Uma placa de ensaio x1
7. Jumper macho-macho ou fios de conexão

Diagrama de circuito:

Conexões de circuito
O monitor de temperatura construído neste projeto utiliza um sensor de temperatura LM35. A LCD de 16×2 caracteres exibe as temperaturas atuais, máximas e mínimas registradas em um ciclo de 24 horas.

O circuito é projetado conectando o LM35 e o LCD de caracteres com o Arduino UNO.

A série LM35 inclui sensores, como LM35, LM35A, LM35CA, LM35C e LM35D. O sensor utilizado é o LM35 do pacote TO-92 LP. Nesta embalagem, o sensor vem como um dispositivo de três terminais. Da vista frontal, o terminal mais à esquerda fornece a fonte de alimentação, o terminal do meio oferece a saída analógica e o terminal mais à direita é o aterramento do sensor.

No circuito, o sensor recebe uma única fonte de alimentação do Arduino. A saída analógica do sensor é conectada ao pino de entrada analógica A0 do Arduino UNO. Nesta configuração de circuito, o LM35 atua como sensor básico de temperatura centígrada. Ele emite a tensão analógica diretamente proporcional à temperatura em uma faixa positiva (2˚ a 150˚C).

Para exibir as temperaturas atuais, mínimas e máximas registradas, um LCD JHD162A de 16 × 2 caracteres faz interface com o Arduino UNO. O módulo LCD de 16 pinos tem interface no modo de 4 bits.

  • Os pinos 1 (GND) e 16 (LED) do módulo LCD são conectados ao terra.
  • O pino 2 (VCC) está conectado ao VCC.
  • O pino 15 (LED+) do módulo LCD é conectado ao VCC por meio de um resistor de pequeno valor.
  • O pino 3 (VEE) está conectado ao terminal variável de um potenciômetro, enquanto os terminais fixos do potenciômetro estão conectados ao terra e ao VCC.
  • O pino R/W está conectado ao terra, pois o Arduino só gravará dados no módulo LCD.
  • Os pinos RS, EN, DB4, DB5, DB6 e DB7 do LCD são conectados aos pinos 0, 2, 8, 9, 10 e 11 do Arduino UNO, respectivamente.

O circuito é montado em uma protoboard. A placa de ensaio é fornecida com um aterramento comum e um trilho de alimentação de 5 V de um dos pinos de aterramento e do pino de 5 V do Arduino UNO.

Esboço do Arduino

Como funciona o projeto
O LM35 é um sensor de temperatura de uso geral da Texas Instruments. A série é composta pelos sensores LM35, LM35A, LM35CA, LM35C e LM35D.

O sensor LM35 usado neste circuito pode detectar uma temperatura variando de -55˚ a 150˚C. Também é calibrado internamente para escala centígrada e fornece uma tensão de saída diretamente proporcional à temperatura centígrada. A saída do sensor tem uma precisão de +/-0,25˚C em temperatura ambiente e +/-0,75˚C em escala completa.

O sensor LM35 recebe uma fonte de alimentação positiva ou negativa do Arduino. Sua saída analógica está conectada ao pino A0 do Arduino UNO.

O Arduino está programado para amostrar a tensão analógica do sensor para obter a leitura da temperatura. Na folha de dados do LM35, pode-se verificar que na inicialização, a saída do sensor se estabiliza em 40 uSEC. Como o sensor é alimentado com uma tensão CC constante de 5V, espera-se uma saída analógica estável do sensor.

O sensor LM35 pode ser configurado como um sensor de temperatura centígrado básico ou em escala real em um circuito.

Como sensor básico de temperatura centígrada, o LM35 deve ser configurado de acordo com este diagrama de circuito:

Como um sensor de temperatura centígrado em escala real, o LM35 deve ser configurado de acordo com este diagrama de circuito:

O sensor ganhará 10mV por grau centígrado. Numa configuração em escala real, o ganho do sensor é obtido na polaridade reversa às temperaturas negativas.

A temperatura pode ser derivada da saída de tensão de acordo com esta equação:

Temperatura (em ˚C) = Tensão de saída LM35 (em milivolts)/10

Ao usar o Arduino, o LM35 não pode ser configurado como um sensor de temperatura centígrado em escala real, pois os pinos analógicos na placa Arduino só podem detectar tensões unipolares. Portanto, o sensor deve ser configurado como um sensor básico de temperatura centígrada, onde detecta e mede faixas de temperatura de 2˚ a 150˚C.

Para uma determinada faixa de temperatura, a saída analógica do sensor deve estar entre 20mV e 1,5V. À temperatura ambiente (25˚C), a saída do sensor deve ser de 250 mV.

É ideal retirar um grande número de amostras de tensão do sensor e obter um valor médio como resultado final. Isso se deve às conexões da placa de ensaio, às flutuações de alimentação do sensor e a outros fatores operacionais.

Ao coletar um número significativo de amostras de tensão, um valor médio constante da temperatura pode ser obtido – que pode ser usado como uma leitura confiável da temperatura do sensor.

No entanto, o monitor de temperatura projetado aqui faz mais do que apenas detectar a temperatura ambiente atual. Também mantém um registro da temperatura ao longo de um ciclo de 24 horas, interpretando a temperatura mínima e máxima ao longo de um dia inteiro.

Mas em vez de registar as temperaturas durante um longo período para descobrir as temperaturas máximas e mínimas, o Arduino está programado para comparar as temperaturas registadas recentemente com as temperaturas registadas anteriormente.

O dispositivo registra a primeira leitura de temperatura, que envolve a retirada de 4.000 amostras consecutivas de tensão do LM35. O valor médio dessas amostras é então usado para registrar a primeira temperatura após o dispositivo ser ligado. São necessárias cerca de quatro vezes o número de amostras de tensão colhidas para a primeira leitura para garantir um valor médio estável. Este número de amostras é coletado para uma leitura confiável após a inicialização.

O Arduino usa a tensão analógica no pino A0 e a converte para um valor digital de 10 bits, variando de 0 a 1023, usando o ADC interno. O valor da tensão analógica pode ser obtido multiplicando o valor do ADC por uma tensão de referência (que neste caso é 5V) e dividindo a expressão por 1024.

Tensão Analógica = Valor ADC * Referência Analógica / 1024
= Valor ADC * 5V/1024

Como o sensor ganha 10mV por grau centígrado, a tensão analógica (em mV quando dividida por 10) dá a temperatura em graus Celsius. Como a tensão derivada do sensor está em Volts, a leitura da tensão analógica deve ser multiplicada por 1.000 para convertê-la em mV e depois dividida por 10 para obter a leitura correta da temperatura.

O valor da temperatura é obtido por esta equação:

Temperatura (˚C) = Tensão Analógica (V) * 100

Após registrar a primeira leitura de temperatura, também são definidas as temperaturas atual, última registrada, mínima e máxima. Em seguida, o Arduino é programado para fazer leituras de temperatura a cada segundo. Portanto, um loop é executado e iterado 86.400 vezes (24 horas x 60 minutos x 60 segundos).

Em cada iteração, a temperatura do sensor LM35 é registrada retirando 1.000 amostras consecutivas de tensão do sensor. Um valor médio dessas amostras é então registrado para obter um resultado confiável e constante.

A temperatura registrada recentemente é comparada com a última, a mínima e a máxima temperaturas registradas. Se a temperatura registrada recentemente for menor que a última e a temperatura mínima registrada, a temperatura mínima será definida para as temperaturas atuais. Da mesma forma, se a temperatura recentemente registada for superior à última registada e às temperaturas máximas registadas, a temperatura máxima é definida para a temperatura actual.

A leitura atual da temperatura e as leituras atualizadas da temperatura mínima e máxima são exibidas no LCD de caracteres. Se a temperatura registrada for inferior a 10˚C, um zero é preenchido antes dela, para que as leituras exibidas apareçam bem formatadas no painel do display.

No final da iteração, a leitura da temperatura atual é transferida para a última temperatura registrada e é dado um atraso de 999 milissegundos.

O Arduino pegará 65 a 260 uSEC de tensão de amostragem em sua entrada analógica e o converterá em um valor ADC. Após cerca de 1.000 amostras de tensão serem coletadas em cada iteração, o Arduino leva menos de um milissegundo para obter uma leitura média de temperatura de mais de 1.000 amostras.

Um atraso de 999 milissegundos no final de cada iteração significa que leva cerca de um segundo para realizar duas leituras de temperatura consecutivas. Portanto, a cada segundo, Arduino:

  • Registra uma leitura de temperatura do sensor LM35
  • Compara com as temperaturas registradas anteriormente e as temperaturas mínima e máxima registradas
  • Atualiza as temperaturas mínima e máxima
  • Exibe as temperaturas atuais, mínimas e máximas no LCD
  • Protege a leitura da temperatura atual como a última temperatura registrada

Guia de programação
Para começar, a biblioteca LiquidCrystal.h é importada no código. Então, um objeto definido pela variável “lcd” é definido como a classe LiquidCrystal.

#include
//LCD Cristal Líquido(RS, E, D4, D5, D6, D7);
LiquidCrystal lcd(0, 2, 8, 9, 10, 11);

Uma variável global 'LM35' é definida para denotar o pino de entrada analógica A0 onde o sensor LM35 está conectado. Uma variável 'vin' do tipo float é definida para manter a leitura atual do ADC. Além disso, uma variável 'vin_av' do tipo float é definida para manter a média das leituras ADC das amostras de tensão.

Uma variável 'tempc' do tipo inteiro é definida para calcular e armazenar a temperatura. As variáveis ​​current_temp, last_temp, min_temp e max_temp são definidas para armazenar valores das temperaturas atual, último registrado, mínimo e máximo, respectivamente.

Uma variável de contador 'i' é definida para os loops de execução que envolvem a coleta de amostras de tensão analógica do sensor LM35. Uma variável de contador 'j' é definida para executar todo o código em um intervalo de 1 segundo durante 24 horas.

const int LM35 = A0;
flutuar vin;
float vin_av = 0;
int tempc, temperatura_atual, última_temp;
int min_temp, max_temp;
flutuar eu, j;

No função configuração o LCD é inicializado no tamanho 16×2 usando o método Begin .

configuração nula
{
lcd.begin(16, 2);
}

É definida uma função temp_init que registra a primeira leitura do sensor LM35 coletando 4.000 amostras de tensão. O primeiro registro de temperatura é definido como as últimas temperaturas registradas, mínima e máxima.

void temp_init {
for(i=0; i<4000; i++){
vin = analogRead(LM35);
vin_av = vin_av + vin;
}
vin_av = vin_av/4000;
vin_av = (vin_av/1023)*5;
tempc = vin_av*100;
última_temp = tempc;
min_temp = temp;
max_temp = tempc;
}

Uma função LogTemp é definida para registrar a temperatura do sensor LM35 coletando 1.000 amostras de tensão e calculando a média delas para obter uma leitura confiável e constante.

int LogTemp {
for(i=0; i<1000; i++){
vin = analogRead(LM35);
vin_av = vin_av + vin;
}
vin_av = vin_av/1000;
vin_av = (vin_av/1023)*5;
tempc = vin_av*100;
temperatura de retorno;
}

Na função loop , a primeira leitura de temperatura é feita chamando a função temp_init . É executado um loop for que itera 86.400 vezes com uma iteração em um intervalo de um segundo.

Em cada iteração:

  • O display LCD é apagado
  • As sequências de texto estáticas são impressas no LCD
  • A leitura da temperatura atual é registrada chamando a função LogTemp
  • A temperatura atual é comparada com a última registrada, as temperaturas mínima e máxima
  • Os valores de temperatura mínima e máxima são atualizados
  • Os valores das temperaturas atual, mínima e máxima são exibidos no LCD no formato apropriado
  • A leitura da temperatura atual é garantida como a última temperatura registrada
  • Um atraso de 999 milissegundos é dado para cobrir o tempo de um segundo

loop vazio
{
……
}

A função loop itera até que o Arduino seja desligado. Assim, o Arduino registra a temperatura do sensor LM35 a cada segundo e interpreta a temperatura mínima e máxima ao longo de um ciclo de 24 horas, de acordo com o programa do usuário acima.

Observações práticas
Quando este sensor de temperatura centígrado básico LM35 baseado em Arduino foi testado em uma sala com ventilação AC, descobriu-se que a temperatura mínima registrada era de 20˚C. Sem ar condicionado, a temperatura máxima da sala era de 36˚C (durante o verão). Quando o ar condicionado foi ajustado para 22˚C, a temperatura registrada ficou entre 24˚ e 25˚C.

(Links para o Vídeo P02-DV deste projeto)

Related Content

Back to blog

Leave a comment

Please note, comments need to be approved before they are published.