O LM35 tem 3 pinos, onde:
V+ alimentamos com 5V vindo do Arduino;
GND ligamos ao gnd correspondente do Arduino;
OUT saíde de tensão correspondente a temperatura(ºC).
Figura1 - Pinos LM35
O fator de escala é 0,01 V 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 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.
/* ---------------------------------------------
* Temp_logger V1.0 Rev0.0
* Monitor de temperatura para sala de servidores
* Arduino-ce
* Comunidade Cearense de Hardware Livre
* http://groups.google.com/group/arduino-ce?hl=pt-br
* http://arduino-ce.blogspot.com
* janeiro de 2011
---------------------------------------------*/
#define SAMPLES 500 //Número de amostras de temperaturas
#define sensortemp 0 //Pino analógico em que estará conectado o sensor LM35
#define TEMPO_LEITURA 1000 //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()
{
Serial.begin(9600); //Iniciando Serial
}
void loop()
{
for (int i=0; i <= SAMPLES; i++) // Incrementa i ate i = SAMPLES
{
valAnalog = analogRead(sensortemp); // Faz a leitura do pino analógico do sensor e armazena em valAnalog
tempvector[i] =( 5.0 * valAnalog * 100.0)/1024.0; //Armazena as temperaturas num vetor de tamanho = SAMPLES
tempSensor = tempSensor +tempvector[i]; // Soma as temperaturas e armazena em tempSensor
}
tempSensor = tempSensor/SAMPLES; // Calcula a média das temperaturas e as armazena em tempSensor
Serial.println(tempSensor); //Envia a temperatura para porta COMX
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 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 tempvector de tamanho igual a SAMPLES, logo esse valor é somado com o posterior e armazenado em 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 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 <> True
temperatura = com.ReadLine
objFile.Write(now())
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 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&produto_id=100&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.
Por enquanto é só! Até o próximo tutorial!
Olá amigo, excelente projeto. Muito bom mesmo. Posso utilizá-lo como base para um mais ousado, onde a leitura será realizada dentro de uma "estufa" ou forno elétrico?
ResponderExcluirobrigado
Sim, mas dependendo da temperatura máxima do local, deverá ser trocado o sensor de temperatura! O LM35 pode medir até 150°C.
ResponderExcluirtenho dúvidas na programação VBS...
ResponderExcluirQuais?
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirQual a distancia maxima (extensão do fio) entre o sensor e o microcontrolador ? (eu pretendo fazer esse projeto porem vou precisar colocar 3 sensores e gostaria que cada um fique em media de 1,2m do modulo arduino. Outra coisa é você teria como expor um tutorial com o uso de um LCD de 2 linhas expondo as temperaturas ?
ResponderExcluirOlá Wesley, não recomendo distâncias maiores que 1m. Se for usar grandes distancias utilize RF ou até uma pequena rede RS-485, mas o custo aumenta um pouco. Obrigado pela sugestão vou ver uma aplicação com LCD's!
ExcluirMuito Obrigado Arduino-ce, fiquei muito feliz com sua resposta, acredito que 1m vai atender meu projeto
ExcluirTeria alguma forma do próprio arduino salvar as leituras e eu lê-las posteriormente no computador ?
ResponderExcluirSim, mas terá que fazer um script para ler da porta Serial e salvar em um banco. Sugestão: Python + MySql
ExcluirExiste uma forma de eu entrar com um valor de comparação para a leitura?? um setpoint que comparada a leitura da temperatura realize alguma instrução tipo acionar uma saida digital.
ResponderExcluirabraço
Sim, perfeitamente...
ExcluirOlá,
ResponderExcluirEu utilizei esse seu script para gravar informações em log, deu tudo certo. Porém, eu gostaria de saber qual o comando que executo para interromper o uso da por COM? Por exemplo, eu tenho outros sketchs para carregar mas a porta está ocupada e o arduino não deixa carregar, toda vez eu tenho que reiniciar o micro.
No Windows use ctrl+alt+del e no gerenciador de processos, na aba Processos procure por WScript.exe, selecione-o e clique em Finalizar processo! Pronto!
ExcluirEste comentário foi removido pelo autor.
ResponderExcluirEstou com instabilidade em meu circuito. Verifiquei que na port 5V do arduino esta saindo picos de 500 mA. Como posso resolver isso colocando uma fonte alternativa de 5V?
ResponderExcluirSim, com o GND conectado ao Arduino!
ExcluirOla. Tentei seu programa. Executei, porem nao consegui encontrar o arquivo TempLogger.txt, na pasta C:\ .... como faço?
ResponderExcluirVerifique as permissões de criação de pasta. Revise o script...
ExcluirBom dia!!!
ResponderExcluireu executei o seu codigo funcionou tudo certo,porem nao consigo carregar outro no arduino, qual o script para parar o serviço.
No Windows use ctrl+alt+del e no gerenciador de processos, na aba Processos procure por WScript.exe, selecione-o e clique em Finalizar processo! Pronto!
ExcluirPara compensar o uso de um cabo maior... no projeto o cabo eh bem pequeno, pois ficará abrigado dentro da própria caixa.
ResponderExcluirQuando executo o Script da erro: Permissão negada
ResponderExcluirEste comentário foi removido pelo autor.
Excluiro meu também estava dando erro, é que o windows não permite mais criar um txt direto no Diretório C, então eu criei uma pasta com o nome TempLogger, e alterei o codigo dae funcionou.
ExcluirConst 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\TempLogger.txt", ForWriting, True)
MsgBox("Iniciado TempLogger")
Do While com.AtEndOfStream <> True
temperatura = com.ReadLine
objFile.Write(now())
objFile.Write(" ")
objFile.WriteLine(temperatura)
WScript.Sleep(500)
Loop
objFile.Close
com.Close()
Desculpe a ignorância, mas como execute o scripty no Windows?
ResponderExcluirOK já encontrei como executar o .VBS, agora precisa saber como parar o script sem desligar o Arduino.
ResponderExcluirAlguém, por favor, pode me ajudar?
No Windows use ctrl+alt+del e no gerenciador de processos, na aba Processos procure por WScript.exe, selecione-o e clique em Finalizar processo! Pronto!
Excluir