Robotics Arduino
Published © GPL3+

How to make a thermometer with Arduino and the LM35 sensor

You will learn how to build a thermometer with Arduino and the LM35 sensor, as well as how to build an enclosure for your project.

BeginnerFull instructions provided2 hours2,255
How to make a thermometer with Arduino and the LM35 sensor

Things used in this project

Hardware components

Arduino UNO
Arduino UNO
×1
Gravity: Analog LM35 Temperature Sensor For Arduino
DFRobot Gravity: Analog LM35 Temperature Sensor For Arduino
×1
Resistor 330 ohm
Resistor 330 ohm
×10
Resistor 10k ohm
Resistor 10k ohm
×3
Buzzer
Buzzer
×1
PTS 645 Series Switch
C&K Switches PTS 645 Series Switch
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Laser cutter (generic)
Laser cutter (generic)

Story

Read more

Custom parts and enclosures

STL Files Termometer

Schematics

Electronic Schematic

Code

Code of the Project

Arduino
#include <LiquidCrystal.h>//importando a biblioteca das funçoes do LCD
//pinos de interface da biblioteca
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int lm35 = A0;//pino do sensor lm35 conectado ao pino analogico A0 inicializado com o valor 0.
float valor_lm35 = 0;//valor que será lido pelo pino analogico do sensor lm35 inicializado com o valor 0.
float temperatura = 0;//varaivel utilizada para receber e armazenar o valor de tempersrura convertido do valor analogico.
//INICIO - intervalos de temperatura em graus celsius
int temp0=0;
int temp1=5;
int temp2=10;
int temp3=15;
int temp4=20;
int temp5=25;
int temp6=30;
int temp7=35;
int temp8=40;
int temp9=45;
//FIM - intervalos de temperatura em graus celsius
// INICIO - verificadores do buzzer
int aux01;
int aux12;
int aux23;
int aux34;
int aux45;
int aux56;
int aux67;
int aux78;
int aux89;
/*
* Os veriicadores aux forma utilizados para verificar se o buzzer ja foi acionada a cada rodada da função loop. Assim que o
* intervalo de temepratura é selecionado, ´pe verificado se o aculumador aux possui um valor igual a zero. Caso seja igual a zero,
* o buzzer é acionado e o contador é incrementado, e ocm isso, ele se rona diferente de zero, e na oroxima rodada da função
* loop o buzzer nao será acionado. E Caso o intervalo de temperatira mude, o contador será zerado no proxima intervbalo que entrar,
* e o sistema será adotado pelo proximo contador.
*/
//FIM - verificadores do buzzer
//INICIO - leds indicativos
int Led_verde1 = A4;//0
int Led_verde2 = A5;//1
int Led_verde3 = 6;//6
int Led_laranja1 = 7;//7
int Led_laranja2 = 8;//8
int Led_laranja3 = 9;//9
int Led_vermelho1 = 10;//10
int Led_vermelho2 = 13;//13
int Led_vermelho3 = A3;//porta analogica A1
//FIM - leds indicativos
//INICIO - pino do buzzer
int pino_buzzer = A2;// pino correspondente ao buzzer
//FIM - pino do buzzer

void setup() {
//inicio - definindo os pinos do leds como saida
pinMode(Led_verde1,OUTPUT);
pinMode(Led_verde2,OUTPUT);
pinMode(Led_verde3,OUTPUT);
pinMode(Led_laranja1,OUTPUT);
pinMode(Led_laranja2,OUTPUT);
pinMode(Led_laranja3,OUTPUT);
pinMode(Led_vermelho1,OUTPUT);
pinMode(Led_vermelho2,OUTPUT);
pinMode(Led_vermelho3,OUTPUT);
//fim - definindo os pinos do leds como saida

pinMode(pino_buzzer,OUTPUT);//definindo o pino do buzzer como saida
pinMode(lm35,INPUT);

//  Numero de linhas e colunas do LCD utilizado
lcd.begin(16, 2);

// Funcao responsavel por retornar a mensagem no LCD
lcd.setCursor(2,0);//setando o cursor do LCD na coluna 2 linha 0
lcd.print("SILICIOS LAB");//mensagem enviada para o LCD
lcd.setCursor(0,1);//setando o cursor do LCD na coluna 2 linha 1
lcd.print("TERMOM. DIDATICO");//mensagem enviada para o LCD
delay(4000);//aguarda 4 segundos para iniciar
lcd.clear();//apaga os caracteres no LCD
}

void loop() {

lcd.setCursor(0,0);//desloca o cursor para a posição especifica do texto da contagem
lcd.clear();//limpa a contagem anterior
valor_lm35=analogRead(lm35);//ler o valor analogico enviado pelo pino analogico utilizado
temperatura=(((5*valor_lm35)/1023)/0.01);
/*
*

*******INICIO - CACULO DE CONVERSAO DO LM34**********
temperatura_t=temperatura_v/10mV = temperatura_v/0.01;
5v (valor de tensao maxima no pino) -----> 1023 (valor analogico do pino)
xv (valor de tensao maxima no pino) -----> y (valor analogico do pino)
x = [(5*y)/1023]V
resolução do lm34 = 10mV//ºC = 0.01V/ºC
temperatura = x / resolução =  [(5*y)/1023]V / [0.01]V/ºC = {(5*y)/1023] / [0.01]}ºC
********FIM - CACULO DE CONVERSAO DO LM34*************
*
*/

//INICIO -  CONDIÇOES DOS LEDS
if(temp0<temperatura&&temperatura<temp1){
aux12=0;//zerando os contadores dos outros intervalos
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;

//
if(aux01==0)//verificando se o buzzer ja foi acionado nessa rodada da função loop
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}

else{

}
aux01++;//incrementado o acumulador para que o buzzer nao seja acionado mais de uma vez durante o mesmo intervalo de temperatura.
analogWrite(Led_verde1, 0);//Leds indicativos
analogWrite(Led_verde2,1023);
digitalWrite(Led_verde3,HIGH);
digitalWrite(Led_laranja1,HIGH);
digitalWrite(Led_laranja2, HIGH);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);

analogWrite(Led_vermelho3,1023);

lcd.clear();//apaga os caracteres no LCD
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0

// lcd.print(aux);//mostra o valor da variavel "moedas" no LCD

lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}

else 

if(temp1<temperatura&&temperatura<temp2)
{
aux01=0;
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;

if(aux12==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}

else{}

aux12++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,HIGH);
digitalWrite(Led_laranja1,HIGH);
digitalWrite(Led_laranja2, HIGH);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);

lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}

else 

if(temp2<temperatura&&temperatura<temp3)
{
aux01=0;
aux12=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;

if(aux23==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else
{}

aux23++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,HIGH);
digitalWrite(Led_laranja2, HIGH);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);

lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else 

if(temp3<temperatura&&temperatura<temp4)
{
aux01=0;
aux12=0;
aux23=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;

if(aux34==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}

else{}

aux34++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, HIGH);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);

lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}

else 

if(temp4<temperatura&&temperatura<temp5)
{
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux56=0;
aux67=0;
aux78=0;
aux89=0;

if(aux45==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}

else{}

aux45++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, HIGH);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);

lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();

}

else 

if(temp5<temperatura&&temperatura<temp6)
{
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux45=0;
aux67=0;
aux78=0;
aux89=0;

if(aux56==0)
{
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}

else

{
}

aux56++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, LOW);
digitalWrite(Led_vermelho1,HIGH);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);

float aux=temperatura;//variavel utilizada para armazenar a leitura autal do sensor

lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.print(temperatura);//mostra o valor da variavel "moedas" no LCD
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else 

if(temp6<temperatura&&temperatura<temp7)
{
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux78=0;
aux89=0;

if(aux67==0){
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}

else{}

aux67++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, LOW);
digitalWrite(Led_vermelho1,LOW);
digitalWrite(Led_vermelho2,HIGH);
analogWrite(Led_vermelho3,1023);

lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.print(temperatura);//mostra o valor da variavel "moedas" no LCD
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else 

if(temp7<temperatura&&temperatura<temp8)
{
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux89=0;

if(aux78==0){
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}

else{}

aux78++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, LOW);
digitalWrite(Led_vermelho1,LOW);
digitalWrite(Led_vermelho2,LOW);
analogWrite(Led_vermelho3,1023);
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.print(temperatura);//mostra o valor da variavel "moedas" no LCD
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else if(temp8<temperatura&&temperatura<temp9){
aux01=0;
aux12=0;
aux23=0;
aux34=0;
aux45=0;
aux56=0;
aux67=0;
aux78=0;
if(aux89==0){
analogWrite(pino_buzzer,1023);//ativa o pino analogico do buzzer para que ele sinalize a mudança de temperatura
delay(30);//deixa o buzzer ativado por 1 segundo
analogWrite(pino_buzzer,0);//desativa o pino do buzzer
}
else{}
aux89++;
analogWrite(Led_verde1, 0);
analogWrite(Led_verde2, 0);
digitalWrite(Led_verde3,LOW);
digitalWrite(Led_laranja1,LOW);
digitalWrite(Led_laranja2, LOW);
digitalWrite(Led_laranja3, LOW);
digitalWrite(Led_vermelho1,LOW);
digitalWrite(Led_vermelho2,LOW);
analogWrite(Led_vermelho3,0);
lcd.clear();
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
lcd.print("Temperatura:");//mensagem enviada para o LCD
lcd.setCursor(0, 1);// inicia o curso do LCD na coluna 0, linha 0
lcd.print(temperatura);//mostra o valor da variavel "moedas" no LCD
lcd.setCursor(6,1);
lcd.print("graus C.");//mensagem enviada para o LCD
delay(100);
lcd.clear();
}
else  {
// inicia o curso do LCD na coluna 0, linha 1
lcd.setCursor(0, 0);// inicia o curso do LCD na coluna 0, linha 0
// print the number of seconds since reset:
lcd.print("Temp. fora de ");//mensagem enviada para o LCD
lcd.setCursor(0, 1);
lcd.print("escala");//mensagem enviada para o LCD
lcd.clear();//apaga os caracteres no LCD
delay(100);
}
//FIM -  CONDIÇOES DOS LEDS
}

Credits

Robotics Arduino
42 projects • 67 followers

Comments