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
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