Lendo valores de um sensor de temperatura e gerando logs.

Escrevi esse código baseado no tutorial que falei sobre o modulo PySerial. O objetivo deste é ler valores de um sensor de temperatura e armazena-lo em um log que nesse caso será um arquivo texto. Essa dica é útil para quem precisa monitorar a temperatura de um ambiente onde precisam ser guardados os valores de temperatura para uma possível conferencia ou até mesmo fazer cálculos de media entre outros.

O algoritmo é muito simples e sua lógica se expressa por:

Pergunta-se ao usuário se ele quer fazer a leitura dos dados. Caso ele responda sim, o algoritmo irá pedir um tempo  que será o intervalo entre cada leitura (tempo em segundos). Esses dados são gravados em um arquivo do tipo texto juntamente com a data e a hora em que foram lidos: Veja o fluxograma:

Nesse caso o algoritmo ficará em loop infinito. O usuário poderá para-lo através de uma interrupção com o teclado digitando as teclas Ctrl + c.

# Autor: Fernando Krein Pinheiro
# Data: 09/09/2011
# Linguagem: Python

# ========= IMPORTANTE ===========
# O codigo esta livre para usar,
# citar e compartilhar desde que
# mantida sua fonte e seu autor.
# Obrigado.

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

from datetime import datetime
import serial
import time

#Define a porta e o baudrate usado
#No Windows a porta e alguma das COMs
porta = '/dev/ttyUSB0'
baud_rate = 9600

opcao = raw_input("Verificar Temperatura? s / n")

if opcao == 's':

    #Tempo de intervalo entre cada leitura
    tempo = int (raw_input("Informe o intervalo entre cada leitura: "))

    #Cria o objeto_porta, limpa o buffer da serial,
    objeto_porta = serial.Serial(porta, baud_rate)
    objeto_porta.flushInput();

    #Abre o arquivo para escrever os dados
    arquivo = open("LOG.txt", "a+")

    #Fica em LOOP Infinito, para sair pressione
    #Ctrl + c
    while True:

        #Cria o objeto_hoje, pega os valores de
        #dia, mes, ano e horario, converte para string
        objeto_hoje = datetime.today()
        dia = str(objeto_hoje.day)
        mes = str(objeto_hoje.month)
        ano = str(objeto_hoje.year)
        horario = str(objeto_hoje.strftime("%X"))

        # Le os valores passados pelo arduino
        temperatura = objeto_porta.readline()

        #Escreve os dados de HORA, DATA e TEMPERATURA no arquivo
        arquivo.write("Leitura de sensor de temperatura\n")
        arquivo.write("DATA: ")
        arquivo.write(dia)
        arquivo.write(" / ")
        arquivo.write(mes)
        arquivo.write(" / ")
        arquivo.write(ano)
        arquivo.write("\n")
        arquivo.write("HORA: ")
        arquivo.write(horario)
        arquivo.write("\nTEMPERATURA: ")
        arquivo.write(temperatura)
        arquivo.write("\n-------------------------------\n")

        # Imprime os dados na tela (Terminal)
        print "DATA :",  dia , "/" , mes , "/" , ano , "/"
        print "HORA : ", horario
        print "TEMPERATURA :", temperatura

        #Faz uma pausa de X (tempo informado) segundos para fazer o loop novamente
        time.sleep(tempo)

    #Fecha o arquivo e a porta serial
    arquivo.close()
    objeto_porta.close()

else:

        print "Saindo..."

Você pode usar esse código juntamente com o Arduino ou qualquer outra placa que esteja conectada pela porta serial e que envie os dados do sensor para a mesma. Repare que este código não irá funcionar se você executa-lo sem ter algum dispositivo conectado na serial.

Você pode unir esse algoritmo com o projeto que está AQUI, assim será possível ver como ele funciona!!! Para fazer isso monte o projeto inicie a leitura dos dados pelo Arduino e executo algoritmo.

Até a próxima…

Anúncios
por ferpinheiro Postado em Python

3 comentários em “Lendo valores de um sensor de temperatura e gerando logs.

  1. Cara!
    Nesse post tem a resposta para um empasse no meu projeto. Testou tentando construir um gráfico Volt Vs Tempo no python, porém empaquei na hora de atribuir o tempo no eixo X, e a solução que achei foi construir um log e a parti dele construir um gráfico. Tem como dá uma força?

    O log que pretendo construir seria muito mais simples em relação ao teu! O primordial nele é pegar os valores vindo do porta serial e acrescentar o tempo para cada valor gravado no log na forma de duas colunas! Como em (X,Y) X= tempo e Y voltagem(mV).
    Ainda sou noob e estou me confundindo quando leio a documentação do python!

    Estou errando na hora de acrescentar o tempo! Sem acrescentar tempo o python compreende o que escrevi!

    from datetime import date
    import serial
    import time

    time = 0
    ser = serial.Serial(‘COM3’, 115200)

    while ser != None:
    hoje = date.today()
    log = open(‘nome.log’, ‘a’) #Estou perdido quando tento acrescentar dia,
    #data e hora somente no nome do arquivo!
    leitura = ser.readline()
    time1 = time + 0.1 # aqui incrementa o tempo em 0.1 segundos
    log.write(—- ) # Eu travo aqui! Não estou conseguindo ir adiante!
    log.write(leitura)
    log.close()

  2. Achei a resposta para esse problema mas agora surgiu outro!
    Foi tão simples que chega até ser vergonhoso!

    tempo = 0

    ser = serial.Serial(‘COM3’,115200)

    while ser != None:
    hoje = date.today()
    log = open(‘dados.csv’, ‘a’) #Ainda não resolvi isso
    texto = ser.readline()
    tempo = tempo + 0.1
    tempostr = str(tempo)
    log.write(tempostr + ‘,’ + texto)
    print (tempostr + ‘,’ + texto)
    log.close()

    O problema agora é:

    Como montar uma lista com os valores de “tempostr” e “texto”?
    Tipo serial algo assim:

    x = [tempostr]
    y = [texto]

    Será que posso usar o print()? A questão é como identificar os valores (X,Y) que saem do print como listas?

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s