Programação Arduino Basico Modulo 3 - Sensor Temperatura LM35
Este experimento é muito simples, mas tem um valor agregado muito grande. Iremos aqui fazer a primeira aquisição de dados do mundo externo pra dentro do Arduino. Usaremos para tanto um sensor de temperatura LM35 ligado a uma das entradas analógicas da placa. Iremos utilizar este sensor pois ele tem a capacidade de fornecer temperaturas na escala de oC para o Arduino, ou seja, o valor que lermos será a temperatura ambiente!
Atenção: cuidado para não ligar o sensor invertido! Ele deve ficar com a face reta virada para frente, conforme a imagem acima, e a face arredondada virada para trás.
Como já sabemos, o LM35 lê a temperatura do ambiente em oC. A informação que
ele nos dá na saída (pino do meio do sensor, o qual está ligado na porta
analógica 0 - cabo amarelo) é uma tensão que varia linearmente com a
temperatura. Sua faixa de medição, segundo o datasheet (folha de dados com
todas as informações do componente), vai até +150oC e ele possui um incremento
de 10mV/oC. Isto quer dizer que, cada vez que a temperatura ambiente aumenta
1oC, o sensor aumenta em 10mV a tensão no pino de saída. Por isso diz-se que a
tensão de saída varia linearmente com a temperatura medida. Supondo, por
exemplo, uma temperatura de 25oC, teremos na saída uma tensão de 250mV.
Nossa placa Arduino opera sua lógica em uma tensão de 5V (5000mV), isso quer
dizer que nas portas analógicas podemos inserir uma tensão variável de 0V a 5V
para fazer leituras. Para transformar estas tensões variáveis em dados que o
Arduino entende, ele utiliza internamente um conversor analógico-digital, ou
simplesmente, ADC. Estes conversores são muito utilizados na eletrônica, desde
os primórdios da invenção dos circuitos integrados para transformar um sinal
analógico em digital. Caso você queira conhecer mais sobre estes conversores,
sugerimos fazer uma boa pesquisa no fórum da RoboCore ou mesmo no Google, mas
o que precisamos saber neste momento é que o conversor ADC do Arduino UNO,
Mega, Leonardo e alguns outros modelos, tem uma resolução de 10 bits. Este
valor informa a qualidade da tradução do sinal que era analógica e vai se
tornar digital. Estes 10 bits de resolução nos diz que o valor máximo que
teremos na leitura de 10 uma porta analógica é de 2 = 1024 valores. Isso quer
dizer que, se colocarmos 0V na entrada analógica da placa, leremos no monitor
serial (você já vai saber o que é isso) o valor "0". Se colocarmos 5V na
entrada analógica, leremos o valor "1023" no monitor serial, pois o "0" também
conta. Se colocarmos 2,5V na entrada analógica, leremos o valor 512. E assim
por diante.
Agora, se pensarmos que a temperatura máxima que o sensor lê é 150 oC, e
sabendo que a cada 1 oC a tensão de saída aumenta 10mV, quer dizer que a 150
oC teremos 1500mV, ou seja, uma tensão máxima entrando na porta analógica de
1,5V. Isto é muito pouco comparado com o máximo de 5V que a entrada analógica
do Arduino suporta, e vamos combinar que vai ser um pouco difícil testar o
sensor a 150 oC, certo? Não, não pense em colocar o sensor dentro do forno!
Se usarmos o sensor com a referência padrão da porta analógica de 5V, não
teremos uma boa precisão do mesmo pois não estaremos usando o conversor ADC do
Arduino da melhor forma possível. Para contornar isto, nas placas BlackBoard,
Arduino UNO e Arduino Mega 2560 podemos usar uma artimanha para diminuir a
tensão de referência das portas analógicas (este procedimento não é válido
para o Arduino Leonardo*). Utilizando no setup do programa no Arduino um
comando chamado analogReference(INTERNAL) - no Arduino Mega utilize
analogReference(INTERNAL1V1), alteramos a tensão máxima que pode entrar
nas portas analógicas do Arduino de 5V para 1,1V. Isso é realmente muito útil
quando estamos usando um sensor como o LM35. Se nossa tensão máxima de leitura
é de 1,1V, podemos calibrar nosso sensor para ler no máximo 110 oC (que daria
1100mV na leitura). Portanto saberemos que, quando lermos 1023 no monitor
serial do Arduino, teremos a temperatura de 110 oC. Esta teoria toda parece
ser muito difícil, mas na prática você verá que é bastante simples.
Código
Vamos entender este código. Como já foi dito, no começo do programa colocamos as bibliotecas usadas para fazer o projeto. Novamente, não temos nenhuma biblioteca por enquanto. O próximo conjunto de instruções são as variáveis e a declaração das mesmas:
const int LM35 = 0;
float temperatura = 0;
int ADClido = 0;
Significa que LM35 é uma CONSTANTE INTEIRA – por isso o “CONST INT”. É uma
constante porque, a posição do sensor ligado no Arduino não mudará: ficará
sempre na entrada analógica 0. - float temperatura = 0; // temperatura é uma
variável do tipo FLOAT e começa valendo zero. Este tipo de variável aceita
casas decimais, e nós teremos uma precisão de temperatura de duas casas depois
da vírgula (acredite, será uma ótima precisão).
- int ADClido = 0; // ADClido é a variável que vai armazenar o valor lido
diretamente pelo pino analógico depois da conversão feita pelo ADC, sem
tratamento nenhum. É do tipo inteiro pois este valor vai de 0 a 1023.
Seguindo com o programa vamos à parte do setup:
O comando Serial.begin serve para dizer ao Arduino que você irá coletar ou escrever dados no
Arduino utilizando a porta serial, ou seja, através do cabo USB AB você vai ler ou escrever valores
no mundo externo. O número entre os parênteses trata-se da taxa de dados que a placa vai se
comunicar com o computador, neste caso usaremos 9600kbps. Logo abaixo, damos o comando da
referência das portas analógicas que vimos ateriormente para passar a referência de 5V para 1,1V.
O loop é muito simples. Na primeira linha, o Arduino irá assimilar o valor lido na entrada analógica 0
(que é nossa constante LM35) à variável ADClido. Após isto, multiplicamos o valor por
0,107421875 e salvamos na variável temperatura. Mas por que fazemos esta multiplicação?
Quando lemos o que existe no pino que está o LM35, estamos lendo a conversão do sinal analógico
feito pelo ADC do Arduino. Ou seja, estamos lendo um valor que vai de 0 a 1023. Como mudamos a
referência da porta analógica, se tivermos 1023 na leitura, teremos 1,1V entrando e teremos 110oC
na temperatura (que calor!). Então, temos que fazer uma conta bastante simples para transformar o
valor lido para graus Celsius. Vamos pensar: se 110oC representa um valor de leitura de 1023, logo
o valor da temperatura que o sensor estiver lendo vai ser o valor traduzido pelo ADC. Colocando nos
padrões de uma regra de três:
Dessa forma, para sabermos a temperatura em graus Celsius, basta multiplicar o valor lido pelo
conersor analógico digital por aquele número encontrado!
Depois da multiplicação, colocamos os seguintes comandos:
O primeiro comando significa que iremos escever na porta serial a frase "Temperatura = ". Logo
depois, mostramos na tela o valor da variável temperatura que já está em graus Celsius, e para
finalizar, colocamos um " *C" para indicar a unidade (não usamos o símbolo tradicional de graus o
pois o caracter fica um pouco estranho no monitor serial - você pode testar depois). Veja que nos
dois primeiros comandos seriais, escrevemos Serial.print e no terceiro escrevemos
Serial.println.A diferença entre ".print" e " .println" é que este último pula a linha
depois do que escrever. Então depois de colocar o " *C", pulamos uma linha pra ficar mais fácil de
ler. Depois damos um delay, ou seja, uma espera de 1 segundo para o leitor fazer uma nova
temperatura.
Bastante teoria, não? Mas agora vamos ver tudo funcionando. Faça o upload do código para sua
placa e abra o bendito MONITOR SERIAL, que falamos tanto mas mal sabemos o que ele é e o que
ele faz. O monitor serial é a tela que o Arduino envia os comandos para o computador e também a
tela que podemos enviar comandos em tempo real para o Arduino.
Depois de fazer o upload do código para a placa Arduino abra o monitor serial pressione Ctrl+Shift+M
ou no canto direito da IDE pressione o botão em forma de lupa e você deverá ver algo parecido com:
Obs:No Linux se usa a porta /dev/ttyUSB0, já no windows se usa port COM1 ou outra
Veja que no canto inferior direito temos selecionado 9600 baud. Isto tem de ser selecionado
conforme a configuração do parâmetro Serial.begin do setup de seu programa. Também é bom
ressaltar que, como os componentes eletrônicos não são totalmente iguais e que a temperatura
ambiente em cada ponto do mundo é diferente, você não necessariamente vai ler valores como os
acima. Esta é a temperatura ambiente lida pelo sensor no local onde este material foi desenvolvido.
Para fazer um teste com o sensor de temperatura, podemos utilizar um ferro de solda, ou um ferro
de passar roupas, ou um secador de cabelo (qualquer coisa que esquente rapidamente) bem como
seus dedos, visto que a temperatura deles é diferente do que a ambiente, mas não coloque a fonte
de calor muito perto do sensor pois isto pode eventualmente danficá-lo.
ATENÇÃO: Somente utilize o comando analogReference(INTERNAL) se for utilizar sensores
que enviem no máximo 1,1V para a porta analógica. Se você utilizar este comando e
introduzir uma tensão maior de 1,1V, poderá causar danos permanentes a sua placa Arduino.
Video abaixo do monitor serial do Sensor de Temperatura LM35:
Comentários
Postar um comentário