ACESSE www.fisicarduino.com

Este projeto usa um sensor de temperatura LM35 e um mostrador de LCD. O Arduino lê a informação fornecida pelo sensor, periodicamente, e mostra a temperatura em Celsius e Fahrenheit no visor digital. Em conjunto com o hardware há um programa em python que recebe, através da porta serial, as temperaturas captadas pelo Arduino. O código python cria um arquivo, nomeado dados.txt, que armazena as temperaturas e a hora das leituras. A frequência de leitura e configurada no software do Arduino, o número de leituras feitas é configurada no software Python, alterando-se o valor da variável leituras. O arquivo gerado pode ser importado para o Excel, para a planilha do Open Office e assim ser usado como fonte de dados para a visualisação de um gráfico das temperaturas.

Para baixar os códigos fonte clique no link: Sensor_LM35_LCD_FisicArduino

Fotos do projeto:

 

Foto do sensor de temperatura – LM35

Tela do Eclipse com o código python

Tela do arquivo gerado, aberto no bloco de notas

Gráfico gerado no Excel com dados obtidos no dia 10-07-2011 das 18:00 às 06:00 do dia 11-07-2011.As temperaturas foram medidas em intervalos de 5 min e foram feitas 144 medições totalizando 12 horas de coleta de dados. O sensor se encontrava em um quarto fechado dentro da minha casa. Às 18 horas do dia 10, o sensor informava um temperatura de 21.48 °C, a temperatura mais baixa, 18.07 °C, apareceu às 03:04 da madrugada do dia 11.

T = f(t). Onde T é a temperatura (°C ou °F) e t é o tempo.

Código fonte do Pyhton

#!/usr/bin/python
# -*- coding: cp1252 -*-

from datetime import datetime
import locale
import serial

locale.setlocale(locale.LC_ALL, ''); # Configurações do usuário
ser = serial.Serial("COM3", 9600);  # abre a portal serial

f = open('dados.txt', 'w'); # cria arquivo para armazenar as leituras recebidas pela serial port
f.write("Leitura de sensor de temperatura\n"); # escreve esta linha no arquivo
f.write("-------------------------------------------\n"); # escreve esta linha no arquivo
f.write("Hora\t" + "Celsius\t" + "Fahrenheit\n"); # escreve esta linha no arquivo
f.write("-------------------------------------------\n"); # escreve esta linha no arquivo

ser.flushInput(); # limpa o buffer da porta serial

hoje = datetime.today(); # captura a data e horal atual do sistema

print "Hora\t" + "Celsius\t" + "Fahrenheit"; # escreve esta linha na tela
print "-------------------------------------------";
cont = 0; # variável usado no processo de contagem
leituras = 10; # número de leituras a executar
# o intervalo entre as leituras é definido no soft. do Arduino

while (cont < leituras):
    Celsius = ser.read(5); # lê os 5 bytes enviados pelo Arduino. ex: 21.34
    Fahrenheit = ser.read(5); # lê os 5 bytes enviados pelo Arduino. ex: 75.30
    # Obtém um datetime da data e hora atual
    hoje = datetime.today();
    hora = str(hoje.strftime("%X")); # armazena a hora atual na variável hora em formato string
    hora = hora[0:5]; # aproveita somente horas e minutos
    # \t = a um tab. \n = finaliza uma linha
    # escreve no arquivo: hora + tabulação + Celsius + tab. + Fahrenheit + finaliza linha
    f.write(hora + "\t" + Celsius + "\t" + Fahrenheit + "\n");
    # escreve na tela: hora + tabulação + Celsius + tab. + Fahrenheit + finaliza linha
    print(hora + "\t" + Celsius + "\t" + Fahrenheit);
    cont += 1;

print "-------------------------------------------";
print "";
print "Foram feitas %d leituras!" % (cont);

f.close() # fecha o arquivo
ser.close() # fecha a porta serial

Código do programa do Arduino

/*
   Sensor LM35 e LCD
   www.fisicarduino.wordpress.com
   By Marcelo Rocha
 */

#include  // inclui a biblioteca para controle do LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Configura os pinos para a comunicação com o LCD

const int inPin = 0; // entrada analógica para o sensor LM35

void setup()
{
  lcd.begin(16, 2); // Define o tipo de LCD ( 16 colunas e 2 linhas )
  lcd.print("Celsius Fahrenh."); // escreve na primeira linha do LCD
  Serial.begin(9600); // define a velocidade da comunicação serial
}

void loop()
{
  int valor = analogRead(inPin); // coloca na variável valor a leitura do sensor
  float millivolts = (valor / 1024.0) * 5000;
  float celsius = millivolts / 10;  // sensor sai 10mV por grau Celsius
  Serial.print(celsius); // envia para a porta serial a temp. em celsius ex.: 21.34 ( 5 bytes )
  Serial.print( (celsius * 9)/ 5 + 32 );  //  converte de Celsius para Fahrenheit

  lcd.setCursor(0, 1); // posiciona o cursor para a escrita na coluna 0 e linha 1
  lcd.print(celsius);  // imprime o conteudo da variável celsius
  lcd.setCursor(8, 1); // posiciona o cursor para a escrita na coluna 8 e linha 1
  lcd.print( (celsius * 9)/ 5 + 32 ); // imprime a temperatura convertida para Fahrenheit

  delay(60000); // espera por 1 minuto, 1s = 1000, 60s = 60 * 1000 = 60000
}