Projeto 11 - Sensor de temperatura com alarme

Básico - Projeto 11

Sensor de temperatura LM35 com alarme

Objetivo

Criar um alarme para um sensor de temperatura. Quando a temperatura de onde o sensor estiver localizado for maior ou menor que um valor definido, o alarme será acionado.

Aplicação

Para fins didáticos. Simula processos industriais onde as temperaturas devem ser controladas.

Componentes necessários

Referência

Componente

Quantidade

Imagem

Observação

 Protoboard  Protoboard 830 pontos 1 Resultado de imagem para protoboard 830v No mínimo utilizar protoboard com 830 pontos
Jumpers Kit cabos ligação macho / macho 1  
Led Difuso 5mm Led 5mm vermelho 1

1 LED alto brilho ou difuso (qualquer cor)

Você poderá utilizar também LEDs de 3 mm na cor que desejar.

Resistor  Resistor 300 Ω  1 Se precisar usar outros valores, calcule o resistor apropriado para o led utilizado - Cálcular Resistor
  Sensor de Temperatura LM35  Sensor de Temperatura LM35  1   Utilizamos um sensor, segundo o datasheet do fabricante, com faixa de temperatura de -55ºC  até +150ºC e incremento de
10mV/ºC, ou seja, cada vez que a temperatura ambiente aumenta 1ºC, o sensor aumenta em 10mV a tensão no pino de saída.
Buzzer  Buzzer 5V  1  
Arduino UNO R3 Arduino UNO  1  

Montagem do Circuito

Conecte os componentes no Protoboard como mostra a figura abaixo. Verifique cuidadosamente os cabos de ligação antes de ligar seu Arduino. Lembre-se que o Arduino deve estar totalmente desconectado da força enquanto você monta o circuito. Veja a simulação no link --> Projeto 11 - simulação online.

Atenção

1. Lembre-se que o LED tem polaridade: O terminal maior tem polaridade positiva e o lado do chanfro tem polaridade negativa.

1.1. Portanto, faça a conexão da porta digital do Arduino no terminal positivo (anodo) e o GND no terminal negativo (catodo) do led.

1.2. Para evitar danos ao led é necessário a inclusão de um resistor no circuito. Como o resistor é um limitador da corrente elétrica, ele poderá estar conectado no anodo (terminal maior) ou no catodo (terminal menor) do led, tanto faz.

2. Determinamos o valor do resistor através da tabela prática: Tabela prática de utilização de leds 3mm e 5mm. Entretanto, o mais correto é sempre verificar o datasheet do fabricante do LED para você ter os exatos valores de tensão e corrente do mesmo - leia Como calcular o resistor adequado para o led e Leds ligados em série e em paralelo.

Obs.: Resistores iguais ou superiores a 250 Ω poderão ser utilizados em LEDs de todas as cores para um circuito com tensão igual ou inferior a 5V.

Valores utilizados para nossos projetos: LEDs difusos ou de alto brilho: Vermelho, Laranja e Amarelo: 150 Ω | Led Verde e Azul: 100 Ω

3. Cuidado para não ligar o sensor de temperatura invertido. Ele deve ficar com a face reta virada para frente, conforme a imagem abaixo, e a face arredondada virada para trás, de forma que o positivo fique ao lado esquerdo do sensor e o negativo ao lado esquerdo do sensor.

4. O buzzer tem polaridade: se retirar o adesivo superior do buzzer poderá ver um sinal de positivo (+). Este sinal mostra onde está o pino positivo do componente. 

Código do Projeto (com leitura de dados e delay)

Digite o código abaixo no ambiente de desenvolvimento do Arduino. Faça a verificação e o upload.

Observação: Se desejar, altere o valor da linha 31 onde definimos como "> 32", ou seja, aciona o alarme quando a temperatura for maior que 32ºC.

/*******************************************************************************
*
*    Projeto 11 – Sensor de temperatura com alarme
*
*******************************************************************************/
 
const int LM35 = 0; // entrada sensor no Arduino: A0 - Analógica
float temperatura = 0; // variável tipo float - inícia no 0
int ADClido = 0;
const int Buzzer = 12; // entrada buzzer: 12 - digital
const int Led10 = 10; // entrada led: 10 - digital
 
//****************************************************************************
 
void setup(){
Serial.begin(9600); // taxa comunicação da placa com o computador
analogReference(INTERNAL); //No Mega, use INTERNAL1V1, no Leonardo remova essa linha
pinMode(Buzzer, OUTPUT);
pinMode(Led10, OUTPUT);
}
 
//****************************************************************************
 
void loop(){
ADClido = analogRead(LM35);
temperatura = ADClido * 0.1075268817204301; //no Leonardo use 0.4887585532
Serial.print("Temperatura = "); //mostra valor na tela
Serial.print(temperatura);
Serial.println(" *C");
   
if(temperatura > 32){ // setado como 32ºC
digitalWrite(Buzzer, HIGH); //aciona o buzer
digitalWrite(Led10, HIGH);  //aciona o led
}
else{
digitalWrite(Buzzer, LOW);
digitalWrite(Led10, LOW);
}
delay(500);
}

Vídeo

  

Como o projeto deve funcionar

1. Quando você rodar o programa, o software irá a medir a temperatura ambiente onde está localizado o sensor de temperatura LM35, no intervalo de 0,5 segundos.

2. Para visualizar a leitura das temperaturas, clique no ícone monitor serial, como mostra a figura abaixo:

3. Observe que o sensor LM35 faz a leitura da temperatura ambiente, que no nosso exemplo estava em torno de 26ºC.

4. Para verificarmos o funcionamento do alarme, precisamos aumentar a temperatura acima do valor de controle, que no nosso caso é 32ºC. Para isso, encoste o dedo no sensor. Observe que a temperatura começa a aumentar imediatamente.

5. Quando a temperatura do sensor ultrapassar o valor de controle, o led é aceso e o buzzer acionado.

6. Tire o dedo do sensor, e quando a temperatura voltar a ficar abaixo do valor de controle, o buzeer e o led serão desligados.

Obs.: Se você está em um lugar mais quente ou mais frio, ajuste a temperatura de controle para possa testar o alarme corretamente.

Código do Projeto (para uso em automação - sem leitura de dados e delay)

Em projetos de automação é necessário que o alarme funcione da forma mais rápida possível, ou seja, o alarme deve ser acionado no momento exato que a temperatura atingir o valor de controle. Para isto, vamos eliminar a leitura no monitor serial e o delay de 0,5 segundos, ficando o código da seguinte forma:

Digite o código abaixo. Faça a verificação e o upload.

/*******************************************************************************
*
*    Projeto 11 – Sensor de temperatura com alarme
*
*******************************************************************************/
 
const int LM35 = 0; // saída sensor no Arduino: A0 - Analógica
float temperatura = 0; // variável tipo float - inícia no 0
int ADClido = 0;
const int Buzzer = 12; // entrada buzzer: 12 - digital
const int Led10 = 10; // entrada led: 10 - digital
 
//****************************************************************************
 
void setup(){
analogReference(INTERNAL); //No Mega, use INTERNAL1V1, no Leonardo remova essa linha
pinMode(Buzzer, OUTPUT);
pinMode(Led10, OUTPUT);
}
 
//****************************************************************************
 
void loop(){
ADClido = analogRead(LM35);
temperatura = ADClido * 0.1075268817204301; //no Leonardo use 0.4887585532
   
if(temperatura > 32){ // setado como 32ºC
digitalWrite(Buzzer, HIGH); //aciona o buzer
digitalWrite(Led10, HIGH);  //aciona o led
}
else{
digitalWrite(Buzzer, LOW);
digitalWrite(Led10, LOW);
}
}

Explicando o Código do Projeto (sem delay e leitura)

1. Primeiro definimos as constantes (LM35, Buzzer e Led10) e as variáveis (temperatura  e ADClido).

const int LM35 = 0; // entrada sensor no Arduino: A0 - Analógica
float temperatura = 0; // variável tipo float - inícia no 0
int ADClido = 0;
const int Buzzer = 12; // entrada buzzer: 12 - digital
const int Led10 = 10; // entrada led: 10 - digital

1.1. Observe que utilizamos a variável tipo "fload" para temperatura. Veja na tabela abaixo as diferenças nos tipos de constantes e variáveis:

 Tipo   Valores Válidos para Variáveis e Constantes
char letras e símbolos:   'a',  'b', 'H', '^', '*','1','0'
int de -32767 até 32767 (apenas números inteiros)
float de -3.4 x 1038 até +3.4 x 10+38com até 6 dígitos de precisão (2 casas depois da vírgula)
double de -1.7 x 10308 até +1.7 x 10+308com até 10 dígitos de precisão

1.2. A constante LM35 se refere ao sensor de temperatura LM35 que deverá estar conectado no pino analógico A0. A constante Buzzer se refere ao componente buzzer 5V que deverá estar conectado no pino digital 12 e a constante Led10 se refere ao led 5mm vermelho conectado ao pino digital 10.

2. Através da strutura void setup(), definimos:

analogReference(INTERNAL); //No Mega, use INTERNAL1V1, no Leonardo remova essa linha
pinMode(Buzzer, OUTPUT);
pinMode(Led10, OUTPUT);

2.2. O comando analogReference(INTERNAL): Resulta em um intervalo maior de valores no ADC (Analog to Digital Converter, conversor analógico para digital) do Arduino. Desta forma, vamos alterar a tensão máxima que pode entrar nas portas analógicas do Arduino de 5V para 1,1V. Portanto, se a tensão máxima de leitura ficar definida como 1,1V, poderemos calibrar o nosso sensor para ler no máximo 110ºC, ou seja, 1100mV (sabemos que o incremento é de 10mV/ºC, conforme informações do fabricante do sensor que utilizamos - veja em observação na tabela de componentes).

Observação: Utilize INTERNAL para Arduino UNO, INTERNAL1 para Ardino Mega. Não utilize o comando analogReference() para o Arduino Leonardo.

2.3. O Buzzer e o Led10 definidos como saída do controlador Arduino (OUTPUT).

3. Através da estrutura void loop(), obtemos:

ADClido = analogRead(LM35);
temperatura = ADClido * 0.1075268817204301; //no Leonardo use 0.4887585532
 
if(temperatura > 32){ // setado como 32ºC
digitalWrite(Buzzer, HIGH); //aciona o buzer
digitalWrite(Led10, HIGH);  //aciona o led
}
else{
digitalWrite(Buzzer, LOW);
digitalWrite(Led10, LOW);

3.1. Valores lidos diretamente pelo pino analógico através da variável ADClido: Esta leitura é feita pelo ADC (Analog to Digital Converter). A variável definida como tipo inteiro, vai de 0 a 1023, ou seja, possui 210 = 1024 valores inteiros (referente à resolução de 10 bits do ADC para controladores Arduino UNO, Mega e Leonardo).

3.2. Valores da variável temperatura calculados como: ADClido * índice de conversão. Para obtermos o índice de conversão, devemos entender a sequência:   110º C (valor máximo para 1,1V na porta analógica) equivale a 1023 (valor máximo de leitura do ADClido), logo pela regra de três, o valor da temperatura = ADClido * (110/1023). Portanto,  temperatura = ADClido * 0.1075268817204301.

Observação: Para Arduino Leonardo, utilize o valor 0.4887585532 como índice de conversão. Como a variável temperatura é uma variável tipo float, podemos visualizar este valor no monitor serial com 2 casas decimais. Para entender melhor como funciona o Sensor de temperatura LM35, acesse: Sensor de Temperatura LM35.

3.3. A estrutura condicional IF verifica se o valor da variável temperatura é maior que 32ºC (utilizado no nosso exemplo). Se sim, aciona o buzzer e o led através dos comandos digitalWrite(Buzzer,HIGH); e digitalWrite(Led10,HIGH);

3.4. Caso o valor da variável temperatura for menor ou igual a 32º, o buzzer e o led são desligados ou não são acionados.

O anúncio abaixo ajuda a manter o Squids Arduino funcionando

Comentários

×

Infomações do site / SEO








×

Adicionar Marcadores