armazenamento_new.py 2.81 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
 Estação biométrica CTA

 Programa para aquisição dos dados
 Este programa é utilizado com o programa biometrica.ino no qual a taxa de amostragem é definida no microcontrolador

 Protocolo usado está disponível no biométrica.ino

 Centro de Tecnologia Acadêmica - UFRGS
 http://cta.if.ufrgs.br

 Licença: GPL v3
 Ordem de argumentos : [porta],[taxa_transmissão],[arquivo_saída]
 Onde:
	[porta]: porta serial no qual o arduino está conectado
	[taxa_transmissão]: velocidade de comunicação serial
	[arquivo_saída]: nome do arquivo em que os dados serão salvos
	[tempo_de_execução]: tempo total de execução, em segundos

	PADRÃO NOME DO ARQUIVO DE SAÍDA: coleta_[Nome]_[Sobrenome]_[obs].log
		[obs] são observações caso sejam necessárias
'''
25
# Exemplo: python armazenamento_new.py '/dev/ttyACM0' 115200 coleta_Nome_Exemplo_1min.log 30
26
27
28
29
30
31
32
33
34
35
36
37
38
39

import sys, time, serial, datetime
argumento = sys.argv[1:] #renomeando os argumentos

# Iniciando comunicação serial
ser = serial.Serial(argumento[0], argumento[1])
# Limpando buffer para retirar as medidas feitas antes de iniciar o software
ser.setDTR(False)	# Desliga DTR
time.sleep(0.005)
ser.flushInput()	# Limpa buffer de dados
ser.setDTR(True)  # Liga DTR novamente

# Variáveis de controle
frequencia = int(ser.readline().replace('\r\n',''))
40
periodo = 1.0/frequencia
41
42
43
44
45
46
47
48
49
50
51
# Arquivos de log
fisiologfile = open(argumento[2],'w')
now=datetime.datetime.now()
fisiologfile.write(now.strftime("#Frequência\t"+str(frequencia)+"\t(Hz)\n"+"#Estação Biométrica\n"+"#Coleta de dados iniciado em: "+"%Y-%m-%d %H:%M:%S" +"\n"+"#Protocolo usado: a primeira coluna é a medida do primeiro termistor e a segunda do segundo.\n"))
fisiologfile.close()

print "Data e hora da medida \t\tMedida 1\tMedida 2"
time = int(argumento[3])*frequencia
time_counter = 0;
while (time_counter <= time or time == 0):
	time_counter += 1
52
	print time*periodo, time_counter*periodo
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
	try:
		option = ser.read()
		# Respiração
		# 	Para o python '\x' serve para representar uma caracter HEX ASCII
		# 	e o 0x para para valores HEX literais. O comando write do arduino
		#	  envia um caracter, logo deve-se usar a primeira forma
		if option == "\x0A":

			sensor_value1 = ser.readline().replace('\r\n','')
			sensor_value2 = ser.readline().replace('\r\n','')

			# Arquivo de log
			fisiologfile = open(argumento[2],'a')
			fisiologfile.write(str(sensor_value1)+"\t"+str(sensor_value2)+"\n")
			fisiologfile.close()

			# Registra horário atual
			now = datetime.datetime.now()

			# Mostrando dados na tela
			print now.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3],"\t", sensor_value1, "\t\t", sensor_value2

		# Erro 1
		if option == '\x01':
			print 'Frequência muito alta para o microcontrolador: ', frequencia, '. Finalizando processo.\n'

	except KeyboardInterrupt:
				break

ser.close()