Commit 6c202d31 authored by Nelso Jost's avatar Nelso Jost

NEW: ported to platformio firmware building

parent 52daf443
.venv/
.ino
*.pyc
*.swp
*.csv
......
EESchema-LIBRARY Version 2.3 Date: 1/9/2011 10:16:29 PM
#
# ARDUINO_MEGA_SHIELD
#
DEF ARDUINO_MEGA_SHIELD SHIELD 0 40 Y Y 1 F N
F0 "SHIELD" -400 2500 60 H V C CNN
F1 "ARDUINO_MEGA_SHIELD" -100 -2700 60 H V C CNN
DRAW
T 0 0 750 60 0 0 0 Arduino Normal 0 C C
T 0 0 650 60 0 0 0 MEGA Normal 0 C C
S -700 -2600 600 2450 0 1 0 N
P 3 0 1 0 -600 700 500 700 500 700 N
X RX0 0 900 750 300 L 50 50 1 1 B
X TX0 1 900 850 300 L 50 50 1 1 B
X 2 2 900 950 300 L 50 50 1 1 B
X 3 3 900 1050 300 L 50 50 1 1 B
X 4 4 900 1150 300 L 50 50 1 1 B
X 5 5 900 1250 300 L 50 50 1 1 B
X 6 6 900 1350 300 L 50 50 1 1 B
X 7 7 900 1450 300 L 50 50 1 1 B
X 8 8 900 1650 300 L 50 50 1 1 B
X 9 9 900 1750 300 L 50 50 1 1 B
X 10 10 900 1850 300 L 50 50 1 1 B
X SDA 20 900 -50 300 L 50 50 1 1 B
X PC7 30 900 -1500 300 L 50 50 1 1 B
X PG1 40 -1000 -2250 300 R 50 50 1 1 B
X PB3_(MISO) 50 -1000 -1150 300 R 50 50 1 1 B
X 11 11 900 1950 300 L 50 50 1 1 B
X SCL 21 900 -150 300 L 50 50 1 1 B
X PC6 31 900 -1600 300 L 50 50 1 1 B
X PG0 41 -1000 -2150 300 R 50 50 1 1 B
X PB2_(MOSI) 51 -1000 -1050 300 R 50 50 1 1 B
X 12 12 900 2050 300 L 50 50 1 1 B
X PA0 22 900 -650 300 L 50 50 1 1 B
X PC5 32 900 -1700 300 L 50 50 1 1 B
X PL7 42 -1000 -2000 300 R 50 50 1 1 B
X PB1_(SCK) 52 -1000 -950 300 R 50 50 1 1 B
X 13 13 900 2150 300 L 50 50 1 1 B
X PA1 23 900 -750 300 L 50 50 1 1 B
X PC4 33 900 -1800 300 L 50 50 1 1 B
X PL6 43 -1000 -1900 300 R 50 50 1 1 B
X PB0_(SS) 53 -1000 -850 300 R 50 50 1 1 B
X TX3 14 900 550 300 L 50 50 1 1 B
X PA2 24 900 -850 300 L 50 50 1 1 B
X PC3 34 900 -1900 300 L 50 50 1 1 B
X PL5 44 -1000 -1800 300 R 50 50 1 1 B
X RX3 15 900 450 300 L 50 50 1 1 B
X PA3 25 900 -950 300 L 50 50 1 1 B
X PC2 35 900 -2000 300 L 50 50 1 1 B
X PL4 45 -1000 -1700 300 R 50 50 1 1 B
X TX2 16 900 350 300 L 50 50 1 1 B
X PA4 26 900 -1050 300 L 50 50 1 1 B
X PC1 36 900 -2100 300 L 50 50 1 1 B
X PL3 46 -1000 -1600 300 R 50 50 1 1 B
X RX2 17 900 250 300 L 50 50 1 1 B
X PA5 27 900 -1150 300 L 50 50 1 1 B
X PC0 37 900 -2200 300 L 50 50 1 1 B
X PL2 47 -1000 -1500 300 R 50 50 1 1 B
X TX1 18 900 150 300 L 50 50 1 1 B
X PA6 28 900 -1250 300 L 50 50 1 1 B
X PD7 38 -1000 -2450 300 R 50 50 1 1 B
X PL1 48 -1000 -1400 300 R 50 50 1 1 B
X RX1 19 900 50 300 L 50 50 1 1 B
X PA7 29 900 -1350 300 L 50 50 1 1 B
X PG2 39 -1000 -2350 300 R 50 50 1 1 B
X PL0 49 -1000 -1300 300 R 50 50 1 1 B
X 5V 5V -1000 1750 300 R 50 50 1 1 W
X AD0 AD0 -1000 1250 300 R 50 50 1 1 B
X AD1 AD1 -1000 1150 300 R 50 50 1 1 B
X AD2 AD2 -1000 1050 300 R 50 50 1 1 B
X AD3 AD3 -1000 950 300 R 50 50 1 1 B
X 3V3 3V3 -1000 1850 300 R 50 50 1 1 W
X AD4 AD4 -1000 850 300 R 50 50 1 1 B
X AD5 AD5 -1000 750 300 R 50 50 1 1 B
X AD6 AD6 -1000 650 300 R 50 50 1 1 B
X AD7 AD7 -1000 550 300 R 50 50 1 1 B
X AD8 AD8 -1000 350 300 R 50 50 1 1 B
X AD9 AD9 -1000 250 300 R 50 50 1 1 B
X RST RST -1000 1950 300 R 50 50 1 1 I
X AD10 AD10 -1000 150 300 R 50 50 1 1 B
X AD11 AD11 -1000 50 300 R 50 50 1 1 B
X GND1 GND1 -1000 1650 300 R 50 50 1 1 W
X AD12 AD12 -1000 -50 300 R 50 50 1 1 B
X GND2 GND2 -1000 1550 300 R 50 50 1 1 W
X AD13 AD13 -1000 -150 300 R 50 50 1 1 B
X GND3 GND3 900 2250 300 L 50 50 1 1 W
X AD14 AD14 -1000 -250 300 R 50 50 1 1 B
X GND4 GND4 -1000 -600 300 R 50 50 1 1 W
X 5V_4 5V_4 900 -400 300 L 50 50 1 1 W
X AD15 AD15 -1000 -350 300 R 50 50 1 1 B
X GND5 GND5 -1000 -700 300 R 50 50 1 1 W
X 5V_5 5V_5 900 -500 300 L 50 50 1 1 W
X AREF AREF 900 2350 300 L 50 50 1 1 W
X V_IN V_IN -1000 1450 300 R 50 50 1 1 W
ENDDRAW
ENDDEF
#
# ARDUINO_SHIELD
#
DEF ARDUINO_SHIELD SHIELD 0 40 Y Y 1 F N
F0 "SHIELD" -350 950 60 H V C CNN
F1 "ARDUINO_SHIELD" 50 -950 60 H V C CNN
DRAW
S -650 -900 650 900 0 1 0 N
X 0 0 950 -800 300 L 50 50 1 1 B
X 1 1 950 -700 300 L 50 50 1 1 B
X 2 2 950 -600 300 L 50 50 1 1 B
X 3 3 950 -500 300 L 50 50 1 1 B
X 4 4 950 -400 300 L 50 50 1 1 B
X 5 5 950 -300 300 L 50 50 1 1 B
X 6 6 950 -200 300 L 50 50 1 1 B
X 7 7 950 -100 300 L 50 50 1 1 B
X 8 8 950 100 300 L 50 50 1 1 B
X 9 9 950 200 300 L 50 50 1 1 B
X 10 10 950 300 300 L 50 50 1 1 B
X 11 11 950 400 300 L 50 50 1 1 B
X 12 12 950 500 300 L 50 50 1 1 B
X 13 13 950 600 300 L 50 50 1 1 B
X 5V 5V -950 200 300 R 50 50 1 1 W
X AD0 AD0 -950 -300 300 R 50 50 1 1 B
X AD1 AD1 -950 -400 300 R 50 50 1 1 B
X AD2 AD2 -950 -500 300 R 50 50 1 1 B
X AD3 AD3 -950 -600 300 R 50 50 1 1 B
X 3V3 3V3 -950 300 300 R 50 50 1 1 W
X AD4 AD4 -950 -700 300 R 50 50 1 1 B
X AD5 AD5 -950 -800 300 R 50 50 1 1 B
X RST RST -950 400 300 R 50 50 1 1 I
X GND1 GND1 -950 100 300 R 50 50 1 1 W
X GND2 GND2 -950 0 300 R 50 50 1 1 W
X GND3 GND3 950 700 300 L 50 50 1 1 W
X AREF AREF 950 800 300 L 50 50 1 1 W
X V_IN V_IN -950 -100 300 R 50 50 1 1 W
ENDDRAW
ENDDEF
#
#End Library
EESchema Schematic File Version 2 date Seg 04 Mar 2013 21:35:54 BRT
LIBS:power
LIBS:device
LIBS:transistors
LIBS:conn
LIBS:linear
LIBS:regul
LIBS:74xx
LIBS:cmos4000
LIBS:adc-dac
LIBS:memory
LIBS:xilinx
LIBS:special
LIBS:microcontrollers
LIBS:dsp
LIBS:microchip
LIBS:analog_switches
LIBS:motorola
LIBS:texas
LIBS:intel
LIBS:audio
LIBS:interface
LIBS:digital-audio
LIBS:philips
LIBS:display
LIBS:cypress
LIBS:siliconi
LIBS:opto
LIBS:atmel
LIBS:contrib
LIBS:valves
LIBS:arduino_shieldsNCL
EELAYER 24 0
EELAYER END
$Descr A4 11700 8267
Sheet 1 1
Title ""
Date "4 mar 2013"
Rev ""
Comp ""
Comment1 ""
Comment2 ""
Comment3 ""
Comment4 ""
$EndDescr
Text Notes 650 7700 0 60 ~ 0
Centro de Tecnologia Academica - http://cta.if.ufrgs.br
Text Notes 650 7550 0 60 ~ 0
Rafael Pezzi
Text Notes 7500 7550 0 60 ~ 0
Estacao Meteorológica - CTA
Connection ~ 4300 4600
Wire Wire Line
4300 4600 4500 4600
Wire Wire Line
4500 4600 4500 4250
Wire Wire Line
4500 4250 4900 4250
Connection ~ 4300 3650
Wire Wire Line
4300 3950 4300 3650
Wire Wire Line
7750 3150 7150 3150
Wire Wire Line
7150 3150 7150 3250
Wire Wire Line
7150 3250 6800 3250
Wire Wire Line
4900 3550 4800 3550
Wire Wire Line
4800 3550 4800 5400
Wire Wire Line
4800 5400 5500 5400
Wire Wire Line
5500 5700 4700 5700
Wire Wire Line
4700 5700 4700 4650
Wire Wire Line
4700 4650 4900 4650
Wire Wire Line
3900 3850 4050 3850
Wire Wire Line
4050 3850 4400 3850
Wire Wire Line
4400 3850 4400 4950
Wire Wire Line
4400 4950 7250 4950
Wire Wire Line
7250 4950 7250 4250
Wire Wire Line
7250 4250 6800 4250
Wire Wire Line
3900 3650 4300 3650
Wire Wire Line
4300 3650 4900 3650
Wire Wire Line
7750 2950 7400 2950
Wire Wire Line
7400 2950 7400 2700
Wire Wire Line
7400 2700 4500 2700
Wire Wire Line
4500 2700 4500 4150
Wire Wire Line
4500 4150 4900 4150
Wire Wire Line
4900 3750 4150 3750
Wire Wire Line
3900 4150 4150 4150
Wire Wire Line
4250 3150 4050 3150
Wire Wire Line
4050 3150 4050 3850
Connection ~ 4050 3850
Wire Wire Line
4900 4550 4550 4550
Wire Wire Line
4550 4550 4550 5850
Wire Wire Line
4550 5850 5500 5850
Wire Wire Line
4150 5550 5500 5550
Wire Wire Line
4150 3750 4150 4150
Wire Wire Line
4150 4150 4150 5550
Connection ~ 4150 4150
Wire Wire Line
6800 3150 7000 3150
Wire Wire Line
7000 3150 7000 3050
Wire Wire Line
7000 3050 7400 3050
Wire Wire Line
7400 3050 7750 3050
Wire Wire Line
7400 4250 7400 4250
Wire Wire Line
7400 4250 7400 3050
Connection ~ 7400 3050
Wire Wire Line
4300 4450 4300 4600
Wire Wire Line
4300 4600 4300 5100
$Comp
L R R1
U 1 1 5134BB7E
P 4300 4200
F 0 "R1" V 4380 4200 50 0000 C CNN
F 1 "100k" V 4300 4200 50 0000 C CNN
1 4300 4200
-1 0 0 1
$EndComp
Text Notes 5550 5900 0 60 ~ 0
SDA
Text Notes 5550 5750 0 60 ~ 0
SCL
Text Notes 5550 5600 0 60 ~ 0
GND
Text Notes 5550 5450 0 60 ~ 0
Vcc - 3.3 V
Text Notes 4850 5300 0 60 ~ 0
BMP085 - Temperatura e Pressão
$Comp
L PHOTORESISTOR LDR1
U 1 1 5134B800
P 8000 4450
F 0 "LDR1" H 8010 4770 70 0000 C CNN
F 1 "LDR" H 8010 4130 70 0000 C CNN
1 8000 4450
-1 0 0 1
$EndComp
$Comp
L R R2
U 1 1 5134B78D
P 4250 3400
F 0 "R2" V 4330 3400 50 0000 C CNN
F 1 "4k7" V 4250 3400 50 0000 C CNN
1 4250 3400
1 0 0 -1
$EndComp
Text Notes 3350 4150 0 60 ~ 0
4 - GND
Text Notes 3350 4000 0 60 ~ 0
3 - NC
Text Notes 3350 3850 0 60 ~ 0
2 - Data
Text Notes 3350 3700 0 60 ~ 0
1 - Vcc
Text Notes 3450 3550 0 60 ~ 0
DHT11
Text Notes 7800 3000 0 60 ~ 0
sig
Text Notes 7800 3100 0 60 ~ 0
gnd
Text Notes 7800 3200 0 60 ~ 0
vcc
Text Notes 7500 2900 0 60 ~ 0
Sensor Umidade do Solo
$Comp
L ARDUINO_SHIELD Arduino~Uno
U 0 1 512FBC7E
P 5850 3850
F 0 "Arduino Uno" H 5850 4850 60 0000 C CNN
F 1 "ARDUINO1" H 5900 2900 60 0000 C CNN
0 5850 3850
1 0 0 -1
$EndComp
Text Notes 10650 7650 0 60 ~ 0
0.1
Wire Wire Line
7400 4650 7400 5100
Wire Wire Line
7400 5100 4300 5100
Text Notes 3300 3400 0 60 ~ 0
Umidade do Ar
$EndSCHEMATC
# -*- coding:utf-8 -*-
# Programa de visualização de histogramas de dados meteorológicos
# coletados pela estação Meteorolog do Centro de Tecnologia Acadêmica
# Dados no formato DataHora Temperatura Umidade_do_Ar Solo Pressão Luminosidade
# DataHora no formato AAAAMMDDHHmmSS onde
# AAAA = Ano
# MM = Mês
# DD = Dia
# HH = Hora
# mm = Minuto
# ss = Segundo
#
# Mais informações:
# http://cta.if.ufrgs.br/projects/estacao-meteorologica-modular/wiki/Meteorolog
#
# Autor: Rafael Pezzi - Centro de Tecnologia Acadêmica - IF/UFRGS
#
# Este programa é softare livre, disponível sob os termos da
# GNU Affero General Public License V3
# http://www.gnu.org/licenses/agpl-3.0.html
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import random as random
import datetime as datetime
import sys , os
print "Estatísticas Meteorológicas Meteorolog - Centro de Tecnologia Acadêmica"
# Testa se o número de argumentos está correto
if len(sys.argv) < 2:
sys.stderr.write('Uso: python '+ sys.argv[0]+' arquivo_de_log\n' )
sys.exit(1)
# e se o arquivo de log existe
if not os.path.exists(sys.argv[1]):
sys.stderr.write('ERRO: Arquivo '+sys.argv[1]+' não encontrado!\n')
sys.exit(1)
# Ativa/desativa seleção de intervalo
# Caso negativo (False), todos dados do arquivo de log serão computados
seleciona_intervalo = False
#seleciona_intervalo = True
# Defina aqui o intervalo de tempo a se analisado
# TODO: Incluir seleção pela linha de comando de execução
sel_Inicio = datetime.datetime(2013,03,01,00,00,00)
sel_Fim = datetime.datetime(2014,03,10,23,59,59)
# Armazena os dados coletados em matrizes unidimensionais
data, temp, u_ar, u_solo, pressao, lum = np.loadtxt(sys.argv[1], unpack=True,
converters={ 0: mdates.strpdate2num('%Y%m%d%H%M%S')})
## Seria útil incluir um algoritmo de filtragem para remover pontos expurios
## observados em algumas partes por mil medidas de temperatura
# Exibe informações dos dados
print "Dados de "+str(mdates.num2date(data[0]).strftime('%Y-%m-%d %H:%M:%S'))+u" até "+str(mdates.num2date(data[len(data)-1]).strftime('%Y-%m-%d %H:%M:%S'))
print "Série com "+str(len(data))+" amostras\n"
# Seleciona dados em um intervalo de tempo
if (seleciona_intervalo == True):
# Cria listas temporárias para seleção
# Acho que pode ser otimizado, usando iteradores direto em arrays
# crítico para series de dados gigantes
selec_data=[]; selec_temp=[]; selec_u_ar=[]
selec_u_solo=[]; selec_pressao=[]; selec_lum=[]
for j in enumerate(data):
if mdates.date2num(sel_Inicio) <= j[1] <= mdates.date2num(sel_Fim):
selec_data.append(data[j[0]])
selec_temp.append(temp[j[0]])
selec_u_ar.append(u_ar[j[0]])
selec_u_solo.append(u_solo[j[0]])
selec_pressao.append(pressao[j[0]])
selec_lum.append(lum[j[0]])
# Copia dados selecionados para matrizes originais
data=np.asarray(selec_data)
temp=np.asarray(selec_temp)
u_ar=np.asarray(selec_u_ar)
u_solo=np.asarray(selec_u_solo)
pressao=np.asarray(selec_pressao)
lum=np.asarray(selec_lum)
# Exibe informações sobre o periodo selecionado
print "Selecionado período:"
print str(sel_Inicio)+" até "+str(sel_Fim)
print "Série com "+str(len(data))+" amostras\n"
## Análise da temperatura
T_min=temp.min()
T_max=temp.max()
T_med=temp.mean()
T_std=temp.std()
print "Temperatura: \nmin: "+str(T_min)+"°C\tmax: "+str(T_max)+"°C\tmédia: "+str("%.2f" % T_med)+"°C\tDesvio: "+str("%.1f" % T_std)+"°C"
## Análise da umidade relativa do Ar
U_ar_min=u_ar.min()
U_ar_max=u_ar.max()
U_ar_med=u_ar.mean()
U_ar_std=u_ar.std()
print "\nUmidade Relativa do Ar: \nmin: "+str(U_ar_min)+"%\tmax: "+str(U_ar_max)+"%\tmédia: "+str("%.1f" % U_ar_med)+"%\tDesvio: "+str("%.1f" % U_ar_std)+"%"
# Análise da pressão atomsférica
P_min=pressao.min()
P_max=pressao.max()
P_med=pressao.mean()
P_std=pressao.std()
print "\nPressão: \nmin: "+str(int(P_min))+" Pa\tmax: "+str(int(P_max))+" Pa\tmédia: "+ str("%.0f" % P_med)+" Pa\tDesvio: "+str("%.2f" % P_std)+" Pa"
# Análise da luminosidade
L_min=lum.min()
L_max=lum.max()
L_med=lum.mean()
L_std=lum.std()
print "\nLuminosidade: \nmin: "+str(int(L_min))+" u.a.\tmax: "+str(int(L_max))+" u.a.\tmédia: "+ str("%.0f" % L_med)+" u.a.\tDesvio: "+str("%.2f" % L_std)+" u.a."
# Apresentação de histrograma:
# Temperatura
plt.figure() # Cria nova figura
plt.ylabel(u"Número de eventos")
plt.xlabel(u"Temperatura (°C)")
plt.hist(temp,bins=25)
#Inclui título com média e desvio padrão
#plt.text(plt.xlim()[0]+0.5,0.9*plt.ylim()[1],u"Média: "+str("%.2f" % temp.mean())+u"°C\nDesvio Padrão: "+str("%.2f" % temp.std())+u"°C") # Este coloca dentro da figura
plt.title(u"Temperatura média: "+str("%.2f" % T_med)+u"°C | Desvio Padrão: "+str("%.2f" % temp.std())+u"°C")
plt.grid(True)
# Apresentação de histrograma:
# Umidade Rel. do Ar
plt.figure()
plt.ylabel(u"Número de eventos")
plt.xlabel("Umidade Relativa (%)")
plt.hist(u_ar,bins=range(26,100,2))
#plt.text(plt.xlim()[0]+1,0.9*plt.ylim()[1],u"Média: "+str("%.2f" % u_ar.mean())+u" %\nDesvio Padrão: "+str("%.2f" % u_ar.std())+" %")
plt.title(u"UR média: "+str("%.2f" % u_ar.mean())+u" % | Desvio Padrão: "+str("%.2f" % u_ar.std())+" %")
plt.grid(True)
# Apresentação de histrograma:
# Pressão
plt.figure()
plt.ylabel(u"Número de eventos")
plt.xlabel(u"Pressão atmosférica (Pa)")
plt.hist(pressao,bins=25)
#plt.text(1.001*plt.xlim()[0],0.9*plt.ylim()[1],u"Média: "+str("%.2f" % pressao.mean())+u" Pa\nDesvio Padrão: "+str("%.2f" % pressao.std())+" Pa")
plt.title(u"Pressão média: "+str("%.2f" % pressao.mean())+u" Pa | Desvio Padrão: "+str("%.2f" % pressao.std())+" Pa")
plt.grid(True)
# Apresentação de histrograma:
# Luminosidade
plt.figure()
plt.ylabel(u"Número de eventos")
plt.xlabel(u"Luminosidade (u.a.)")
plt.hist(lum,bins=25)
#plt.text(1*plt.xlim()[0]+60,0.9*plt.ylim()[1],u"Média: "+str("%.2f" % lum.mean())+u"\nDesvio Padrão: "+str("%.2f" % lum.std())+" ")
plt.title(u"Luminosidade média: "+str("%.2f" % lum.mean())+u" | Desvio Padrão: "+str("%.2f" % lum.std())+" ")
plt.grid(True)
#Apresenta os gráficos gerados
plt.show()
# -*- coding:utf-8 -*-
# Programa de visualização e estatísticas de dados meteorológicos
# coletados pela estação Meteorolog do Centro de Tecnologia Acadêmica
# Dados no formato DataHora Temperatura Umidade_do_Ar Solo Pressão Luminosidade
# DataHora no formato AAAAMMDDHHmmSS onde
# AAAA = Ano
# MM = Mês
# DD = Dia
# HH = Hora
# mm = Minuto
# ss = Segundo
#
# Mais informações:
# http://cta.if.ufrgs.br/projects/estacao-meteorologica-modular/wiki/Meteorolog
#
# Autor: Rafael Pezzi - Centro de Tecnologia Acadêmica - IF/UFRGS
#
# Este programa é softare livre, disponível sob os termos da
# GNU Affero General Public License V3
# http://www.gnu.org/licenses/agpl-3.0.html
N_Monte_Carlo = 5000 # Numero de médias a serem computadas
Lista_Amostras = [5,10,50] #Listas de Número de amostras a serem coletadas para cálculo da média
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import random as random
import datetime as datetime
import sys , os
print "Amostragem Monte Carlo dos dados Meteorológicos Meteorolog - Centro de Tecnologia Acadêmica"
# Testa se o número de argumentos está correto
if len(sys.argv) < 2:
sys.stderr.write('Uso: python '+ sys.argv[0]+' arquivo_de_log\n' )
sys.exit(1)
# e se o arquivo de log existe
if not os.path.exists(sys.argv[1]):
sys.stderr.write('ERRO: Arquivo '+sys.argv[1]+' não encontrado!\n')
sys.exit(1)
# Ativa/desativa seleção de intervalo
# Caso negativo (False), todos dados do arquivo de log serão computados
seleciona_intervalo = False
#seleciona_intervalo = True
# Defina aqui o intervalo de tempo a se analisado
# TODO: Incluir seleção pela linha de comando de execução
sel_Inicio = datetime.datetime(2013,03,01,00,00,00)
sel_Fim = datetime.datetime(2014,03,10,23,59,59)
# Armazena os dados coletados em matrizes unidimensionais
data, temp, u_ar, u_solo, pressao, lum = np.loadtxt(sys.argv[1], unpack=True,
converters={ 0: mdates.strpdate2num('%Y%m%d%H%M%S')})
## Seria útil incluir um algoritmo de filtragem para remover pontos expurios
## observados em algumas partes por mil medidas de temperatura
# Exibe informações dos dados
print "Dados de "+str(mdates.num2date(data[0]).strftime('%Y-%m-%d %H:%M:%S'))+u" até "+str(mdates.num2date(data[len(data)-1]).strftime('%Y-%m-%d %H:%M:%S'))
print "Série com "+str(len(data))+" amostras\n"
# Seleciona dados em um intervalo de tempo
if (seleciona_intervalo == True):
# Cria listas temporárias para seleção
# Acho que pode ser otimizado, usando iteradores direto em arrays
# crítico para series de dados gigantes
selec_data=[]; selec_temp=[]; selec_u_ar=[]
selec_u_solo=[]; selec_pressao=[]; selec_lum=[]
for j in enumerate(data):
if mdates.date2num(sel_Inicio) <= j[1] <= mdates.date2num(sel_Fim):
selec_data.append(data[j[0]])
selec_temp.append(temp[j[0]])
selec_u_ar.append(u_ar[j[0]])
selec_u_solo.append(u_solo[j[0]])
selec_pressao.append(pressao[j[0]])
selec_lum.append(lum[j[0]])
# Copia dados selecionados para matrizes originais
data=np.asarray(selec_data)
temp=np.asarray(selec_temp)
u_ar=np.asarray(selec_u_ar)
u_solo=np.asarray(selec_u_solo)
pressao=np.asarray(selec_pressao)
lum=np.asarray(selec_lum)
# Exibe informações sobre o periodo selecionado
print "Selecionado período:"
print str(sel_Inicio)+" até "+str(sel_Fim)
print "Série com "+str(len(data))+" amostras\n"
## Análise da temperatura
T_min=temp.min()
T_max=temp.max()
T_med=temp.mean()
T_std=temp.std()
print "Temperatura: \nmin: "+str(T_min)+"°C\tmax: "+str(T_max)+"°C\tmédia: "+str("%.2f" % T_med)+"°C\tDesvio: "+str("%.1f" % T_std)+"°C"
## Análise da umidade relativa do Ar
U_ar_min=u_ar.min()
U_ar_max=u_ar.max()
U_ar_med=u_ar.mean()
U_ar_std=u_ar.std()
print "\nUmidade Relativa do Ar: \nmin: "+str(U_ar_min)+"%\tmax: "+str(U_ar_max)+"%\tmédia: "+str("%.1f" % U_ar_med)+"%\tDesvio: "+str("%.1f" % U_ar_std)+"%"
# Análise da pressão atomsférica
P_min=pressao.min()
P_max=pressao.max()
P_med=pressao.mean()
P_std=pressao.std()
print "\nPressão: \nmin: "+str(int(P_min))+" Pa\tmax: "+str(int(P_max))+" Pa\tmédia: "+ str("%.0f" % P_med)+" Pa\tDesvio: "+str("%.2f" % P_std)+" Pa"
# Análise da luminosidade
L_min=lum.min()
L_max=lum.max()
L_med=lum.mean()
L_std=lum.std()
print "\nLuminosidade: \nmin: "+str(int(L_min))+" u.a.\tmax: "+str(int(L_max))+" u.a.\tmédia: "+ str("%.0f" % L_med)+" u.a.\tDesvio: "+str("%.2f" % L_std)+" u.a.\n"
# Análise Monte Carlo para as médias
# Para fins de ilustração didática do teorema do limite central
print "Numero de médias a serem computadas:"
print N_Monte_Carlo
print "Listas de número de amostras a serem coletadas para cálculo da média:"
print str(Lista_Amostras) + "\n"
# Cria variaveis para calculo das médias
for tentativas in Lista_Amostras:
temp_med = 0.
temp_med_vec=[]
umid_med = 0.
umid_med_vec=[]
pressao_med = 0.
pressao_med_vec=[]
lum_med = 0.
lum_med_vec=[]
for j in range(N_Monte_Carlo):
for n in range(tentativas):
amostra=int(random.random()*len(data))
lum_med+=lum[amostra]
temp_med+=temp[amostra]
umid_med+=u_ar[amostra]
pressao_med+=pressao[amostra]
# print temp_med/tentativas
# print umid_med/tentativas
# print pressao_med/tentativas
# print ("\n")
temp_med_vec.append(temp_med/tentativas)
umid_med_vec.append(umid_med/tentativas)
pressao_med_vec.append(pressao_med/tentativas)
lum_med_vec.append(lum_med/tentativas)
temp_med = 0
lum_med = 0
umid_med = 0
pressao_med = 0
plt.figure()
plt.title(u"Temperatura - MC Média de: "+str(tentativas)+" medidas")
plt.hist(temp_med_vec, bins=50)
plt.xlim([T_min,T_max])
# plt.text(1.001*plt.xlim()[0],0.9*plt.ylim()[1],u"Média: "+str("%.2f" % temp_med_vec.mean())+u" °C\nDesvio Padrão: "+str("%.2f" % temp_med_vec.std())+" °C")
plt.figure()
plt.title(u"Umidade Relativa - MC Média de: "+str(tentativas)+" medidas")
plt.hist(umid_med_vec, bins=50)
plt.xlim([U_ar_min,U_ar_max])
# plt.text(1.001*plt.xlim()[0],0.9*plt.ylim()[1],u"Média: "+str("%.2f" % umid_med_vec.mean())+u" %\nDesvio Padrão: "+str("%.2f" % umid_med_vec.std())+" %")
plt.figure()
plt.title(u"Pressão - MC Média de: "+str(tentativas)+" medidas")
plt.hist(pressao_med_vec, bins=50)
plt.xlim([P_min,P_max])
# plt.text(1.001*plt.xlim()[0],0.9*plt.ylim()[1],u"Média: "+str("%.2f" % pressao_med_vec.mean())+u" Pa\nDesvio Padrão: "+str("%.2f" % pressao_med_vec.std())+" Pa")
plt.figure()
plt.title(u"Luminosidade - MC Média de: "+str(tentativas)+" medidas")
plt.hist(lum_med_vec, bins=50, normed=1)
plt.xlim([L_min,L_max])
# Todo: Ajuste Gaussiano dos histogramas
# x = np.arange(L_min,L_max,0.1)
# print x
# plt.plot(x)
# plt.plot(x,1000*mlab.normpdf(x,L_med,L_std))
#plt.show()
#'''
#Apresenta os gráficos gerados
plt.show()