Neste tutorial, veremos a aplicação do Display LCD (Liquid Crystal Display, em inglês) usado para representar um medidor de temperatura que será dado pelo LM35. Para deixar o projeto mais visual possível, utilizaremos também 2 LED’s para indiciar se a temperatura está acima ou abaixo da temperatura padrão.
Veja só o protótipo final montado:
Projeto medidor de temperatura
Este projeto te possibilita fazer medições em qualquer ambiente que estiver, do seu próprio corpo e de objetos ao seu redor (aproxime um isqueiro no sensor e veja como a temperatura aumenta drasticamente).
Além disso, com este tutorial você irá entender a lógica por trás da programação do LCD e do LM35 e no final desde artigo, iremos te recomendar um mapa mental das principais funções utilizadas com Arduino e os principais artigos aqui do blog sobre programação em C/C++ para te ajudar durante a construção dos seus projetos.
Ademais, caso você se você ainda não sabe como um LCD funciona, ou, gostaria de se aprofundar mais sobre este componente, recomendamos que leia nosso tutorial completo sobre o componente aqui.
Display LCD 16×2 utilizado no projeto
Já se sua dúvida for com o medidor de temperatura, veja este tutorial:
Medidor de temperatura LM35 utilizado no projeto
Caso tenha dificuldade com potenciômetros, acesse este guia.
Potenciômetro utilizado no projeto
Você irá precisar de:
Sabemos que existem diversos outros sensores no mercado. Então, porque utilizamos o sensor LM35 neste tutorial? E qual a diferença deste componente para os outros existentes?
O LM35 é um CI de baixo custo e de baixa tensão que requer uma fonte de alimentação de +4 VDC a +20 VDC. Isso é ideal porque podemos alimentar o sensor com a saída de +5 V do Arduino. Sua acurácia para 25°C é ± 0.4 (vide datasheet) enquanto que, à -10 °C o sensor pode variar em ± 0.5 na medição.
Já a pinagem do componente, o LM35 possui apenas 3 pinos, 2 para a fonte de alimentação e um para a saída analógica. O pino de saída fornece uma saída de tensão analógica que é linearmente proporcional à temperatura em graus Celsius.
Segue abaixo ilustração dos pinos:
Esquema dos pinos do sensor LM35
A saída varia de 0 V – 1,75 V, quando alimentado por uma única fonte de alimentação. Uma saída de 0 V corresponde a uma temperatura de 0°C, e a saída aumenta 10 Mv para cada aumento de grau na temperatura.
Em síntese, os benefícios e principais características do medidor de temperatura LM35 são:
O circuito do medidor de temperatura que construímos está mostrado abaixo:
Montagem dos componentes do projeto.
Lembre-se de que você pode usar qualquer tensão entre 2,7 V e 5,5 V como fonte de alimentação. Para este exemplo, estamos utilizando uma fonte de 5 V, mas observe que você pode utilizar uma fonte de 3,3 V com a mesma facilidade. Não importa qual fonte você use, a leitura de tensão analógica variará de cerca de 0 V (terra) a cerca de 1,75 V.
Já o esquema elétrico está representado abaixo:
Esquema elétrico do projeto
Se estiver usando um Arduino de 5 V e conectando o sensor diretamente a um pino analógico, você pode usar estas fórmulas para transformar a leitura analógica de 10 bits em uma temperatura:
Tensão no pino em MiliVolts = (leitura do ADC) * (5000/1024)
Esta fórmula converte o número 0-1023 do ADC em 0-5000Mv (= 5V)
Se estiver usando um Arduino de 3,3 V, você terá que escrever esta fórmula:
Tensão no pino em MiliVolts = (leitura do ADC) * (3300/1024)
Esta fórmula converte o número 0-1023 do ADC em 0-3300Mv (= 3,3V)
Então, para converter milivolts em temperatura, use esta fórmula:
Temperatura °C = [(tensão analógica em Mv) – 500] / 10
Usar o LM35 é fácil, basta conectar o pino esquerdo à alimentação (2,7-5,5 V) e o pino direito ao GND. Então, o pino do meio terá uma tensão analógica que é diretamente proporcional (linear) à temperatura. A tensão analógica é independente da fonte de alimentação.
Para converter a tensão em temperatura, neste tutorial usamos a seguinte fórmula:
temperatura = (tensao) * 100.0
onde, tensao = (valorSensor/1024.0)*5.0
Ou seja, para uma tensão de 0.29 volts teríamos um valor de 29° C.
Para converter a temperatura em °C para Fahrenheit, basta fazer:
Temp em °F = (temperatura*9)/5 + 32;
No entanto, não precisa se preocupar com os cálculos pois eles estão todos prontos no código para você usar em seu projeto.
Abaixo está o código utilizado no projeto:
/* Projeto Medidor de Temperatura Eletrogate Tutorial programando um sensor de temperatura LM35 e um display LCD Criado por Flávio Babos (https://flaviobabos.com.br/arduino/) */ //Inclua a biblioteca do LCD #include <LiquidCrystal.h> //Defina as portas do Arduino para cada pino do LCD const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Defina a temperaturaC ambiente do lugar em que estiver para que as LED's acendam com base nisso int tempPadrao = 24; //Array que desenha o simbolo de grau byte a[8]= {B00110,B01001,B00110,B00000,B00000,B00000,B00000,B00000,}; //declare a variável de leitura do sensor const int sensorLM35 = A0; int i; float temperaturaC = 0; void setup() { //Inicializa comunicação serial Serial.begin(9600); //Método de percorrer os pinos e ao mesmo tempo declara-los como saída for(i=8; i<12; i++){ pinMode(i, OUTPUT); } //Inicializa o LCD e posteriormente exibe a temperaturaC e a tensão lcd.begin(16, 2); lcd.print("Temp: "); lcd.setCursor(0, 2); lcd.print("Tensao: "); lcd.setCursor(12, 2); lcd.print("V"); //Atribui a "1" o valor do array "A", que desenha o simbolo de grau lcd.createChar(1, a); //Coloca o cursor na coluna 7, linha 1 lcd.setCursor(10,0); //Escreve o simbolo de grau lcd.write(1); } void loop() { //Variável que faz a leitura do sensor int valorSensor = analogRead(sensorLM35); //Conversao da leitura do sensor em tensão V float tensao = (valorSensor/1024.0)*5.0; //Divide a variavel temperaturaC por 8, para obter precisão na medição temperaturaC = (tensao) * 100.0; //Conversão de Celsius para Fahrenheit float temperaturaF = (temperaturaC*9)/5 + 32; //mostra no monitor serial o valor lido Serial.print("Valor do sensor: "); Serial. print(valorSensor); //Mostra no monitor serial a tensão lida Serial.print(", Tensao (V): "); Serial.print(tensao); //Mostra no monitor serial os graus lidos Serial.print(", Celsius: "); Serial.print(temperaturaC); //Printa no serial monitor o valor convertido Serial.print(", Fahrenheit: "); Serial.println(temperaturaF); delay(100); lcd.setCursor(6, 0); //Escreve no display o valor da temperaturaC lcd.print(temperaturaC,1); lcd.setCursor(8, 1); //Escreve no display o valor da tensão lcd.print(tensao,2); if(temperaturaC < tempPadrao){ //se a temperaturaC lida for inferior a 27 °C digitalWrite(10, HIGH); //apaga led da porta 10 digitalWrite(11, LOW); //apaga led da porta 11 }else if(temperaturaC >= tempPadrao){ //se a temperaturaC lida estiver entre 27 ºC e 31 ºC digitalWrite(10, HIGH); //acende led da porta 10 digitalWrite(11, HIGH); //apaga led da porta 11 delay(1000); } }
A programação passo a passo do medidor de temperatura
Defina as portas do LCD a serem usadas
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7; LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
Use esta imagem como parâmetro para fazer as ligações em seu componente:
Esquema de pinos do display LCD
Variáveis do projeto
int tempPadrao = 24; byte a[8]= {B00110,B01001,B00110,B00000,B00000,B00000,B00000,B00000,}; const int sensorLM35 = A0; int i; float temperaturaC = 0;
Essas são as variáveis universais declaradas antes do setup (). Para a temperatura que está representando o ambiente (no caso utilizamos 24 °C), faça a primeira medição e adeque o valor de acordo com a temperatura do ambiente em que estiver e alterando, posteriormente, a variável tempPadrao.
Já para desenhar o caractere de grau “°”, declare uma variável byte e defina-a como um array “a” de 8 elementos.
Além disso, não se esqueça de determinar a porta que o seu LM35 estiver conectado e defina-o como leitura const int. Ademais declare a variável temperatura como float.
Setup de inicialização
void setup() { Serial.begin(9600); for(i=8; i<12; i++){ pinMode(i, OUTPUT); }
Inicie a comunicação serial em 9600 e declare os pinos utilizados aqui como OUTPUT em um laço de repetição for para economizar linha de código e otimizar sua programação.
Leitura do LCD
lcd.begin(16, 2); lcd.print("Temp: "); lcd.setCursor(0, 2); lcd.print("Tensao: "); lcd.setCursor(12, 2); lcd.print("V"); lcd.createChar(1, a); lcd.setCursor(10,0); lcd.write(1); }
Inicialize o LCD de forma a exibir a temperatura e a tensão coletada do sensor. Da mesma forma, escreva os símbolos de medição que representam o grau e a tensão (V).
Loop do programa
void loop() { int valorSensor = analogRead(sensorLM35); float tensao = (valorSensor/1024.0)*5.0; temperaturaC = (tensao) * 100.0; float temperaturaF = (temperaturaC*9)/5 + 32;
É aqui que o código irá: coletar as informações do sensor em valorSensor, transformar o valor lido em uma tensão, fazer a conversão de tensão em temperatura °C e transformar essa temperatura em °F.
Monitor Serial
Serial.print("Valor do sensor: "); Serial. print(valorSensor); Serial.print(", Tensao (V): "); Serial.print(tensao); Serial.print(", Celsius: "); Serial.print(temperaturaC); Serial.print(", Fahrenheit: "); Serial.println(temperaturaF); delay(100);
Essas linhas de comando são escritas para você poder acompanhar as leituras exibidas na tela do seu computador e validar as leituras exibidas no LCD e LED’s.
Os valores deverão aparecer da seguinte forma em seu monitor serial:
Medidor de temperatura – Monitor Serial
Não se esqueça de inserir um delay () entre a exibição dos valores no monitor serial e a exibição deles no LCD.
Exibição da temperatura e da tensão no seu LCD
lcd.setCursor(6, 0); lcd.print(temperaturaC,1); lcd.setCursor(8, 1); lcd.print(tensao,2);
Já essas linhas de código são cruciais para exibir, no display, a temperatura até então calculada e a tensão gerada pelo sensor. Para fazer isso use lcd.setCursor(coluna, linha) onde o primeiro atributo se refere a coluna e o segundo a linha do LCD.
Acendendo os LED’s
if(temperaturaC < tempPadrao){ digitalWrite(10, HIGH); digitalWrite(11, LOW); }else if(temperaturaC >= tempPadrao){ digitalWrite(10, HIGH); digitalWrite(11, HIGH); delay(1000); } }
Agora entra em jogo a temperatura padrão que você definiu no começo no código. Para nós aqui da eletrogate, a temperatura está em 27 °C mas para você, essa temperatura pode variar para mais ou para menos. Portanto, certifique-se de que a temperatura ambiente esteja condizente e use condicional if () para acender/apagar seus LED’s.
Um LED aceso pois temperatura está abaixo da temperatura padrão de 24 °C
Hoje aprendemos a construir um sistema de medição da temperatura ambiente e da temperatura corporal com um display LCD e um LM35. Nesse sentido, para ajudar você na sua caminhada de programação, recomendamos utilizar o mapa mental abaixo que contém as principais funções utilizadas nos códigos do Arduino IDE:
Baixe o mapa mental em alta definição das principais funções com Arduino aqui.
E, indicamos você estudar nossos artigos sobre programação na IDE do Arduino:
Caso deseje se aprofundar na plataforma Arduino, leia nosso artigo completo:
Se ainda assim possuir alguma dúvida de programação ou de projeto, utilize os comentários abaixo e deixe-nos saber para te ajudar.
Por fim, se tiver gostado do tutorial ou se ele te ajudou de alguma forma não deixe de o curtir e o compartilhar com seus amigos!
Para ficar melhor informado (a) sobre futuras promoções e futuros tutoriais, recomendamos nos acompanhar no Instagram @eletrogate.
Parabéns se você leu até aqui e até o próximo projeto.
Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!