Monitor de Temperatura com Log
Autor: Arduino-ce | Publicado: 2011-01-16T08:27:00-08:00

Esse é um projeto bem simples, porém bastante útil para quem precisa monitorar ambientes ou cargas em que a temperatura representa um risco, sejam cargas perecíveis ou mesmo uma sala com computadores (servidores). O sensor &nbsp;utilizado é o LM35 (http://www.national.com/ds/LM/LM35.pdf), barato, preciso e fácil de encontrar nas lojas de eletrônica, ele é um sensor de circuito integrado que mede a temperatura(ºC) com uma saída elétrica proporcional a mesma, por ter um invólucro de plástico(TO-92) ele é resistente a oxidação, podendo ficar exposto a intempéries do ambiente monitorado!


O LM35 tem 3 pinos, onde:

V+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alimentamos com 5V vindo do Arduino;
GND &nbsp;ligamos ao gnd correspondente do Arduino;
OUT &nbsp;saíde de tensão correspondente a temperatura(ºC).

Figura1 - Pinos LM35
O fator de escala é 0,01 V &nbsp;por grau Celcius, ou seja, a cada 0,01V no pino OUT corresponde a 1ºC. Se tivermos 0,5v teremos uma temperatura de 50ºC, se tivermos 1V, teremos uma temperatura de 100ºC e assim por diante...

Como a saída (OUT) do LM35 é analógica, devemos, portanto, conectá-la a um pino de entrada analógica&nbsp; do Arduino- no projeto o pino escolhido foi o 0 (zero)- As ligações ao Arduino ficarão como mostra a Figura2.


Figura2 - Conexão ao Arduino
O Programa abaixo lê a temperatura periodicamente em um intervalo definido(1s) e envia a informação via serial para o computador.


/*&nbsp;---------------------------------------------
&nbsp;*&nbsp;Temp_logger&nbsp;V1.0&nbsp;Rev0.0
&nbsp;*&nbsp;Monitor&nbsp;de&nbsp;temperatura&nbsp;para&nbsp;sala&nbsp;de&nbsp;servidores
&nbsp;*&nbsp;Arduino-ce
&nbsp;*&nbsp;Comunidade&nbsp;Cearense&nbsp;de&nbsp;Hardware&nbsp;Livre
&nbsp;*&nbsp;http://groups.google.com/group/arduino-ce?hl=pt-br&nbsp;
&nbsp;*&nbsp;http://arduino-ce.blogspot.com&nbsp;
&nbsp;*&nbsp;janeiro&nbsp;de&nbsp;2011
&nbsp;---------------------------------------------*/

#define&nbsp;SAMPLES&nbsp;500&nbsp;//Número de amostras de temperaturas
#define&nbsp;sensortemp&nbsp;0&nbsp;//Pino analógico em que estará conectado o sensor LM35
#define&nbsp;TEMPO_LEITURA&nbsp;1000&nbsp;//Intervalo entre cada leitura do sensor LM35 em milisegundos! OBS: 1000ms = 1s

int tempvector[SAMPLES]; //Vetor que armazenará as temperaturas
double tempSensor = 0.0; //Variável auxiliar
int  valAnalog = 0; // Variável para aramazenar a leitura do sensor LM35

void setup() 
{&nbsp;
&nbsp;&nbsp;Serial.begin(9600); //Iniciando Serial
}

void loop() 
{&nbsp;&nbsp;
&nbsp;&nbsp;for (int i=0; i &lt;= SAMPLES; i++) // Incrementa i ate i = SAMPLES
&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;valAnalog&nbsp;=&nbsp;analogRead(sensortemp); // Faz a leitura do pino analógico do sensor e armazena em valAnalog
&nbsp;&nbsp;&nbsp;&nbsp;tempvector[i]&nbsp;=(&nbsp;5.0&nbsp;*&nbsp;valAnalog&nbsp;*&nbsp;100.0)/1024.0;&nbsp;//Armazena as temperaturas num vetor de tamanho = SAMPLES
&nbsp;&nbsp;&nbsp;&nbsp;tempSensor&nbsp;=&nbsp;tempSensor&nbsp;+tempvector[i];&nbsp;// Soma as temperaturas e armazena em tempSensor
&nbsp;&nbsp;}&nbsp;
&nbsp;&nbsp;tempSensor&nbsp;=&nbsp;tempSensor/SAMPLES;&nbsp;&nbsp;// Calcula a média das temperaturas e as armazena em tempSensor
&nbsp;&nbsp;Serial.println(tempSensor); //Envia a temperatura para porta COMX
&nbsp;&nbsp;delay(TEMPO_LEITURA);// Espera um tempo determinado em TEMPO_LEITURA (milisegundos)
}




O valos analógico do sensor LM35 é lido e armazenado em valAnalog que por sua vez é multiplicado pela tensão de referência (5V) depois multiplicado por 100.0 depois dividido por 1024.0. Isso ocorre porque no pino analógico temos uma escala de leitura que vai de 0(zero) a 1024, portanto, nossa escala de tensão correspondente tem que estar no limiar de 0 até 1024, onde 0 &nbsp;corresponde a temperatura mínima e 1024 corresponde a temperatura máxima. Após esse cálculo obtemos a temperatura em ºC e armazenamos no vetor&nbsp;tempvector de tamanho igual a SAMPLES, logo esse valor é somado com o posterior e armazenado em &nbsp;tempSensor. Após somadas todas as temperaturas dividimos pelo total de amostras (SAMPLES) para termos uma média, isso torna o processo de captação de temperatura mais preciso!

Por fim, imprimimos, com uma quebra de linha, a temperatura&nbsp;Serial.println(tempSensor); no nosso projeto ele está na na porta COM3 (Verifique a porta que o seu Arduino está utilizando!). Para conferir o funcionamento basta clicar no botão "Serial Monitor" na IDE do Arduino, conforme figura abaixo.

Figura3 - Serial Monitor
Após conferido o funcionamento iremos criar um script para o computador, que capture as temperaturas recebidas pela porta COM3 e as escreva em um arquivo de texto - que pode ser exportado para uma planilha posteriormente. Abra o bloco de notas do Windows, cole o script abaixo altere a porta, a extensão e salve-o como TempLogger.VBS:


Const ForReading = 1
Const ForWriting = 2


Set fso = CreateObject("Scripting.FileSystemObject")
Set com = fso.OpenTextFile("COM3:9600,N,8,1", ForReading)


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\TempLogger.txt", ForWriting, True)


MsgBox("Iniciado TempLogger")


Do While com.AtEndOfStream &lt;&gt; True
 temperatura = com.ReadLine
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;objFile.Write(now())
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;objFile.Write(" ")
 objFile.WriteLine(temperatura)
 WScript.Sleep(100)
Loop


objFile.Close
com.Close()



Certifique-se que que a IDE do Arduino esteja fechada e que nenhum outro programa esteja usando a mesma porta! Execute o script e, se tudo ocorrer bem, a janela abaixo será exibida:


As temperaturas já estão sendo colhidas. Vá ao direório C:\ e abra o arquivo TempLogger.txt, o arquivo estará armazenando a temperatura do sensor a cada 1s conforme figura abaixo. Altere o tempo para sua necessidade, bastando modificar&nbsp;SAMPLES no firmware e enviá-lo ao Arduino. Lembrando que 1000ms corresponde a 1s!





Deixando o projeto mais profissional

Para finalizar, acondicionaremos o Arduino em uma caixa pra tornar o projeto mais profissional. Utilizei uma caixa Caixa Patola PB-86 (http://www.patola.com.br/index.php?pagina=info_produto.php&amp;produto_id=100&amp;titulo=PB-086) mas você pode usar uma similiar! Além disso foi utilizado um ferro de solda, para soldar os fios no sensor; cola de silicone, para prender o sensor fora da caixa; um alicate de corte, para cortar um pequeno quadrado deixando o espaço para o conector USB do Arduino, também foi utilizado e um parafuso de 6mm com porca para fixar o Arduino na tampa da caixa. Vejam as fotos de como ficou.











&nbsp; 
Por enquanto é só! Até o próximo tutorial!