pontifÍcia universidade catÓlica do paranÁlaplima/ensino/tcc/concluidos/2013/...presente, ainda...
TRANSCRIPT
-
PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ
ESCOLA POLITÉCNICA
CURSO DE ENGENHARIA DE COMPUTAÇÃO
WELLINGTON RODRIGO MONTEIRO
SENTINEL – RELATÓRIO FINAL
CURITIBA
2013
-
WELLINGTON RODRIGO MONTEIRO
SENTINEL – RELATÓRIO FINAL
Relatório Final do Trabalho de Conclusão de Curso apresentado ao Curso de Graduação em Engenharia de Computação da Pontifícia Universidade Católica do Paraná. Orientador: Prof. Dr. Julio Cesar Nievola.
CURITIBA
2013
-
RESUMO
O Sentinel trata-se de uma rede de estações meteorológicas de baixo custo e robustas. Uma ou mais estações são capazes de enviar informações por radiofrequência ao longo do dia e da noite para uma central a qual processa esses dados e as mostra para o usuário. Além disso, ela pode armazenar localmente todos os dados ou ainda distribuir pela internet para diferentes serviços online para possibilitar a consulta em qualquer ponto do planeta. A central também possui um algoritmo de inteligência artificial o qual é capaz de prever as condições climáticas futuras baseando-se nos dados já coletados. Um exemplar de cada módulo do Sentinel foi desenvolvido e testado com sucesso.
Palavras-chave: Sentinel. Meteorologia. Inteligência Artificial. Radiofrequência.
-
ABSTRACT
Sentinel is a network of low-cost, robust weather stations. One or more stations are capable of sending data day and night to a central hub, which processes it and shows to the user. Furthermore, it is also capable to store locally the collected data or broadcast it through the internet to various online services, enabling queries from anywhere around the world. The hub also has an artificial intelligence algorithm in order to forecast the weather based on the data already collected by the Sentinel stations. One model of each Sentinel module was developed and tested successfully.
Key-words: Sentinel. Meteorology. Aritificial Intelligence. Radiofrequency.
-
LISTA DE ILUSTRAÇÕES
Figura 1 – Interação dos módulos do Sentinel .......................................................... 11
Figura 2 – Diagrama do shield do módulo Estação ................................................... 13
Figura 3 – Diagrama da placa do escudo de radiação solar ..................................... 14
Figura 4 – DFD do módulo Estação .......................................................................... 15
Figura 5 – Pseudocódigo da função setup ................................................................ 17
Figura 6 – Pseudocódigo da função loop .................................................................. 17
Figura 7 – Pseudocódigo da função calcularVelocidadeVento ................................. 17
Figura 8 – Pseudocódigo da função calcularChuva .................................................. 18
Figura 9 – Pseudocódigo da função obterCondicaoCeu ........................................... 18
Figura 10 – DFD do módulo Hub ............................................................................... 19
Figura 11 – Diagrama de atividades do módulo Aplicação ....................................... 21
Figura 12 – Tela de seleção de porta serial do Sentinel ........................................... 23
Figura 13 – Tela de log do Sentinel ........................................................................... 24
Figura 14 – Tela de armazenamento do Sentinel ...................................................... 25
Figura 15 – Tela de previsão do tempo do Sentinel .................................................. 26
Figura 16 – Pseudocódigo da retropropagação ........................................................ 29
Figura 17 – Teste de previsão do tempo .................... Erro! Indicador não definido.8
-
SUMÁRIO
1 INTRODUÇÃO ............................................................................................... 8
2 DETALHAMENTO DO PROJETO ............................................................... 10
2.1 MÓDULO ESTAÇÃO .................................................................................... 11
2.1.1 Hardware ..................................................................................................... 12
2.1.2 Software ...................................................................................................... 14
2.2 MÓDULO HUB ............................................................................................. 18
2.3 MÓDULO APLICAÇÃO ................................................................................ 19
2.3.1 DESENVOLVIMENTO E IMPLEMENTAÇÃO .............................................. 21
2.3.2 SENTINEL.UI ............................................................................................... 22
2.3.2.1 Tratamento de dados .................................................................................... 22
2.3.2.2 Tela inicial ..................................................................................................... 22
2.3.2.3 Tela principal ................................................................................................ 23
2.3.3 SENTINEL.SERIAL ...................................................................................... 26
2.3.4 SENTINEL.SENTINEL ................................................................................. 26
2.3.5 SENTINEL.FORECAST ............................................................................... 28
2.3.5.1 Funcionamento do algoritmo ........................................................................ 28
2.3.5.2 Implementação da rede neural ..................................................................... 29
2.4 HARDWARE UTILIZADO ............................................................................. 31
2.5 LIMITAÇÕES ................................................................................................ 31
3 TESTES E RESULTADOS ........................................................................... 33
3.1 TESTES DE CAIXA BRANCA ...................................................................... 33
3.1.1 Comunicação por radiofrequência entre estação e hub ......................... 33
3.1.2 Leitura com sucesso de todos os sensores por 95% do dia .................. 33
3.1.3 Receber e interpretar com sucesso 3 mensagens consecutivas
enviadas por uma estação...................................................................................... 34
3.1.4 Armazenar localmente os dados gerados por uma estação .................. 35
3.1.5 Armazenar pela internet os dados gerados por uma estação ................ 35
3.2 TESTES DE CAIXA PRETA ......................................................................... 36
3.2.1 Funcionamento ininterrupto da estação por 24h ..................................... 36
3.2.2 Funcionamento normal da estação durante chuva ................................. 36
3.2.3 Assegurar o armazenamento de chaves utilizadas pelos serviços online
mesmo após o fechamento do programa ............................................................. 37
-
3.2.4 Prever uma condição de tempo em base dos dados fornecidos por uma
estação ..................................................................................................................... 37
4 CONCLUSÃO............................................................................................... 39
REFERÊNCIAS ......................................................................................................... 40
APÊNDICE A – PROJETO DA ESTAÇAO............................................................... 41
-
8
1 INTRODUÇÃO
Enquanto que por um lado é de comum conhecimento de que a meteorologia
possui um papel principal em vários setores da sociedade, por outro existem certas
dificuldades ao acesso das suas informações em uma escala mais localizada. Ter o
conhecimento das condições climáticas e das tendências das mesmas pode levar a
prejuízos ou lucros que muitas vezes não podem ser quantificados. Uma geada que
ocorre sem avisos pode arruinar plantações de vegetais e o cultivo de flores. Uma
tempestade rápida pode destruir casas, inundar ruas e levar bens materiais e vidas.
Assim, por mais que seja difícil mensurar a importância de se ter o
conhecimento das condições meteorológicas, é certamente mais fácil reconhecer a
dificuldade em se ter o domínio de tal informação. No Brasil os serviços
meteorológicos – principalmente os estatais – fornecem grande parte dos dados para
a população. Porém, tais informações são geralmente dadas em uma escala regional,
variando de uma grande cidade a uma microrregião completa. Dessa forma, dados
pertencentes a uma microescala – isto é, a um raio de 1km ou menos – são
completamente ignorados apesar de poder haver grandes diferenças meteorológicas
em um curto espaço de tempo em dois locais próximos. Em casos de automação
residencial e predial ou até mesmo em certas fazendas de menor escala isto se torna
um problema uma vez que não há um controle confiável do que ocorre naquela
pequena região. Além do controle dos dados sobre o tempo no passado até o
presente, ainda há a questão de se prever o tempo: é interessante saber o andamento
do tempo no microclima aferido, porém mais interessante ainda é a previsão do tempo
naquele local: nas próximas horas, o que poderia iria ocorrer?
Vale salientar que atualmente existem de fato soluções voltadas para esses
casos. Conhecidas como Personal Weather Stations (Estações Meteorológicas
Pessoais – PWS) elas possuem um custo menor e disponibilizam variadas
informações ao(s) usuário(s). Entretanto, elas são mais acessíveis no exterior,
possuindo no Brasil um custo exorbitante pela importação e com um suporte limitado
pelo fabricante, não sendo dessa forma tão vantajosas como poderiam ser.
Assim sendo, tem-se alguns pontos que podem ser explorados. É possível ter
uma estação meteorológica de baixo custo para funcionamento e manutenção no
Brasil? É possível ter uma estação que seja fácil de transportar e que ao mesmo tempo
seja resistente, sendo assim confiável ao mesmo tempo em que oferece um bom
-
9
custo-benefício para as condições econômicas de usuários domésticos e donos de
fazendas de pequeno porte? Pode-se ter uma rede dessas estações que use diversos
pontos de uma pequena região e se conecte a uma única central, a qual pode
aproveitar um computador já existente, independente do seu desempenho ou algum
outro computador de baixo custo, como um ARM?
Considerando ainda o curso de Graduação em Engenharia de Computação, é
possível ter um projeto final o qual possa efetivamente demonstrar vários dos
conhecimentos obtidos ao longo dos seus anos? É ainda, é possível desafiar alguns
dos problemas gerais de Engenharia e da Eletrônica – como, por exemplo, ter um
produto que atenda às expectativas ao mesmo tempo em que busca ser de baixo
custo e que possa estar exposto à ação do vento, do sol, da chuva, do frio e de
quaisquer outras condições climáticas sem perder a sua robustez?
Buscando portanto solucionar esses pontos levantados surgiu a ideia do
Sentinel, composto por três módulos: o módulo Estação, o qual configura-se em uma
estação meteorológica em pleno funcionamento; o módulo Hub, o qual é um receptor
dos dados emitidos por uma ou mais estações e o módulo Aplicação, em execução
em um computador com o módulo Hub conectado. Fruto do desenvolvimento deste
projeto, foi entregue para avaliação um exemplar de cada módulo em funcionamento.
Os detalhes sobre cada módulo incluindo o que eles contemplam ou não estão
dispostos ao longo do documento, o qual é composto por 4 (sete) partes, a partir desta
introdução do documento, que é a primeira parte. A segunda parte – Detalhamento do
Projeto – detalha o que é o Sentinel e os módulos que o compõe; a terceira parte –
Testes e Resultados – mostram quais foram os testes executados para a validação
do projeto e quais foram os seus resultados obtidos. A quarta e última parte,
Conclusão, finaliza a documentação descrevendo os resultados obtidos deste projeto,
incluindo os desafios encontrados. Há ainda um apêndice com algumas imagens
geradas por computação gráfica mostrando como seria uma estação meteorológica
Sentinel.
-
10
2 DETALHAMENTO DO PROJETO
O Sentinel é composto por três módulos principais, os quais serão abordados
individualmente nas próximas páginas. Os módulos são os seguintes:
a) Módulo Estação: A estação meteorológica. Contém diversos sensores,
utilizados para avaliar as variadas condições climáticas naquele local. Também possui
sua própria alimentação, um microcontrolador para gerenciar todos os sensores e um
transceiver, utilizado para enviar todas as informações via radiofrequência ao hub.
b) Módulo Hub: Um microcontrolador o qual possui um transceiver para receber
as informações de uma ou mais estações que possam estar ligadas no momento. O
microcontrolador verifica se as informações recebidas são de fato válidas (isto é,
recebidas sem ruído e de uma estação legítima) e as repassa para o computador via
transmissão serial.
c) Módulo Aplicação: Uma aplicação sendo executada em um computador
ligado ao hub. Esta aplicação interpreta os dados recebidos via serial e as mostra na
tela para o usuário. Caso o usuário tenha interesse, são disponibilizadas informações
de armazenamento local e envio pela internet desses mesmos dados para consulta
posterior. Este módulo também possui um algoritmo de previsão do tempo.
Na figura 1 pode-se visualizar o diagrama de blocos dos módulos e das
interações entre eles.
-
11
Figura 1 – Interação dos módulos do Sentinel
2.1 MÓDULO ESTAÇÃO
A estação é composta por sensores e microcontrolador. Conforme as imagens
disponíveis no Apêndice A, a estação possui uma haste central de tubulação de PVC
de 40mm, a qual sustenta os sensores de direção do vento, velocidade do vento,
chuva, caixa de circuitos, alimentação da estação e escudo de radiação solar. Possui
Módulo Estação
Sensor de temperatura
Sensor de umidade
Sensor de temperatura
(IR)
Sensor de velocidade do
vento
Sensor de direção do
vento
Sensor de pressão
atmosférica
Sensor de chuva
Transceiver RF
Alimentação (solar +
baterias)
Módulo Hub
Transceiver RF
Arduino
Arduino
Comunicação Serial
Módulo Aplicação
Listener Serial
Previsão do Tempo
Armazenamento local
Armazenamento via internet
-
12
também uma base com quatro pernas com altura estimada de 1m, feita de tubulação
de PVC de 100mm. A altura estimada da estação é entre 2,5m a 3m.
Este módulo utiliza o microcontrolador Arduino em conjunto de duas placas:
uma shield (placa montada sobre o microcontrolador, trabalhando em conjunto do
mesmo) contendo todo o circuito de alimentação e interação dos e entre os módulos
e uma segunda placa, conectada via cabo de rede (RJ45) para a conexão e
alimentação dos sensores de temperatura, pressão atmosférica e umidade. Esta placa
localiza-se junto dos outros componentes dentro do escudo de radiação solar, o qual
possui como serventia proteger os sensores da incidência solar direta, a qual poderia
alterar os valores dando assim leituras com erro para o usuário.
2.1.1 Hardware
Conforme explanado anteriormente, o módulo Estação possui duas placas.
Ambas foram desenvolvidas utilizando o software Cadsoft EAGLE.
Na figura 2, abaixo, encontra-se o diagrama do circuito do shield, montado em
cima de um microcontrolador Arduino, encaixado sobre o mesmo. Este shield possui
três conectores fêmea: dois RJ11, para serem conectados aos sensores de chuva e
vento e um terceiro, RJ45, para a integração com a placa localizada dentro do escudo
de radiação solar, a qual recebe todos os dados referente à umidade relativa, pressão
atmosférica e temperatura. Possui também um jumper para forçar a reinicialização do
módulo uma vez que o Arduino possui um overflow da contagem de milissegundos a
qual o mesmo se encontra ligado a cada 50 dias aproximadamente [1]. Como o
software do módulo faz uso dessa contagem, para evitar problemas de overflow a
cada trinta dias o Arduino se auto-reinicializa por meio deste jumper, enviando um
sinal ON por um dos seus pinos. Esta configuração é feita e prevista pelo código do
módulo.
Além disso, possui também o circuito de alimentação de todo o módulo a partir
de pilhas recarregáveis e placas solares, pelo processo trickle, um processo lento,
simples e seguro, que evita sobrecarga. Por ser um circuito simples, enquanto que
por um lado evita o uso de muitos componentes, por outro não oferece uma forma de
mensurar o nível de carga das pilhas em uso. O circuito para a conexão com o módulo
de radiofrequência também está no shield. Vale lembrar que no módulo Hub o mesmo
-
13
shield é utilizado, com a diferença de que apenas o componente do transceiver de
radiofrequência seria usado e soldado.
Figura 2 – Diagrama do shield do módulo Estação
Na figura 3 está o diagrama do circuito previsto para a placa a ser utilizada no
escudo de radiação solar. O circuito inclui a alimentação necessária dos sensores de
pressão atmosférica, temperatura e umidade, além de pinos para a conexão dos
mesmos. Para a interface entre esta placa e o microcontrolador existe uma entrada
fêmea RJ45 para que se conecte um cabo de rede comum entre os dois.
O escudo conta – de forma independente a qualquer circuito – também com
uma placa solar conectada diretamente a um cooler simples, de plástico. Este cooler
fica dentro do escudo, na parte superior. Seu objetivo é movimentar o ar quente dentro
do escudo durante momentos onde há incidência solar, mas de uma forma a não
comprometer as medições – ou seja, do ar movimentado ser forte a ponto de ser
observado pelos sensores, dando medições abaixo da realidade.
-
14
Figura 3 – Diagrama da placa do escudo de radiação solar
2.1.2 Software
Na figura 4, abaixo, encontra-se o diagrama de fluxo de dados do módulo
Estação.
-
15
Figura 4 – DFD do módulo Estação
O software a ser desenvolvido para o módulo Estação é feito única e
exclusivamente no Arduino utilizando a linguagem de programação Wiring e o
ambiente de programação do próprio microcontrolador. Obtendo os dados de cada
um dos sensores, o microcontrolador irá interpretar os dados lidos quando necessário,
conforme o seguinte:
Condição do céu: comparação entre a temperatura do céu e a temperatura
ambiente [3].
Velocidade e direção do vento; chuva: os sensores mantêm um contador da
quantidade de vezes que as pás completaram uma volta (velocidade do vento)
-
16
ou que houve uma descida/subida da gangorra coletora de chuva (chuva) ou
da tensão associada ao indicador de direção do vento, a qual varia dependendo
da direção a qual está a pá que se movimenta de acordo com a direção do
vento.
Após isso, uma string é criada com as informações obtidas e então são
enviadas por radiofrequência por um transceiver RFM12B-S2. Como o processo
ocorre em loop a cada 1200 segundos, as informações fornecidas para o módulo Hub
são as seguintes:
Média da velocidade do vento dos últimos vinte minutos
Média da chuva dos últimos vinte minutos
Direção do vento, temperatura, condição do céu, pressão atmosférica, umidade
relativa do último segundo.
A construção da string a ser enviada envolve a concatenação de todos os
valores lidos e interpretados pela estação, separados por ponto-e-vírgula. Assim, o
modelo a ser seguido é o seguinte:
𝐼𝐷𝐸𝑠𝑡𝑎𝑐𝑎𝑜; 𝑆𝑖𝑛𝑎𝑙𝑇𝑒𝑚𝑝𝑒𝑟𝑎𝑡𝑢𝑟𝑎; 𝑇𝑒𝑚𝑝𝑒𝑟𝑎𝑡𝑢𝑟𝑎; 𝑈𝑚𝑖𝑑𝑎𝑑𝑒; 𝑃𝑟𝑒𝑠𝑠𝑎𝑜; 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑𝑒𝑉𝑒𝑛𝑡𝑜
𝐷𝑖𝑟𝑒𝑐𝑎𝑜𝑉𝑒𝑛𝑡𝑜𝐸𝑚𝐺𝑟𝑎𝑢𝑠; 𝐶ℎ𝑢𝑣𝑎; 𝑃𝑜𝑟𝑐𝑒𝑛𝑡𝑎𝑔𝑒𝑚𝑁𝑢𝑣𝑒𝑛𝑠𝐶𝑒𝑢
Um exemplo seria o seguinte:
1;+; 23.45; 75.43; 92.14; 3.57; 180; 0; 80
O funcionamento do software do módulo Estação, em forma de pseudocódigo,
seria tal qual explanado pelas figuras 5 a 9, sendo que a função inicial é a setup, a
qual configura o dispositivo inicialmente e então fica em execução sempre a função
loop. Todas as funções cujo nome se iniciam com inicializar[...] e ler[...] tratam
respectivamente da inicialização e leitura de diferentes tipos de sensores e a
calibragem dos mesmos. São funções especificamente utilizadas para este fim e que
podem envolver ajustes nos valores dos registradores dos sensores, por exemplo,
sendo neste caso fornecidas pelos fabricantes. Por serem complexas e por não terem
uma implementação própria elas não serão ilustradas nas figuras seguintes, dando
maior atenção às funções feitas exclusivamente para a execução do projeto.
-
17
Figura 5 – Pseudocódigo da função setup
Figura 6 – Pseudocódigo da função loop
Figura 7 – Pseudocódigo da função calcularVelocidadeVento
FUNÇÃO Setup:
VARIÁVEIS:
UNSIGNED LONG checkpointVelocidadeVentoEChuva
INÍCIO
EXECUTAR inicializarRF
EXECUTAR inicializarSensorPressao
EXECUTAR inicializarSensorVelocidadeVento
EXECUTAR inicializarSensorDirecaoVento
EXECUTAR inicializarSensorChuva
EXECUTAR inicializarSensorTemperaturaIR
checkpointVelocidadeVentoEChuva = checkpointVelocidadeVentoEChuva //se passaram 20 min da última
vez em que foram enviados dados, obter dados mais recentes e enviá-los
EXECUTAR calcularVelocidadeVento
EXECUTAR calcularChuva
checkpointVelocidadeVentoEChuva
-
18
Figura 8 – Pseudocódigo da função calcularChuva
Figura 9 – Pseudocódigo da função obterCondicaoCeu
2.2 MÓDULO HUB
O módulo Hub é composto pelo mesmo shield do módulo Estação conforme
explicado anteriormente (vide seção 3.1.1 e figura 2, acima), porém apenas utilizando
o transceiver de radiofrequência, não tendo a necessidade de se soldar qualquer um
dos outros componentes. O shield é montado sobre um outro microcontrolador
Arduino, conectado e alimentado por um computador qualquer por uma porta USB. O
hub lerá as informações provenientes das estações e as encaminhará para o
computador por meio de um software programado para o Arduino.
A topologia utilizada para o desenvolvimento do projeto é a estrela, por ser mais
simples e por ter um tempo de implementação reduzido – tempo este que pode ser
utilizado em outros aspectos e fases do projeto.
FUNÇÃO calcularChuva:
VARIÁVEIS:
REAL contadorEmMilimetros
-
19
Como o módulo de radiofrequência (RFM12B-S2) possui tratamento de erros e
ruído, o hub recebe apenas a string e a redireciona para o computador, uma vez que
é o próprio módulo de radiofrequência que estaria fazendo o tratamento de erros.
Na figura 10 pode-se ver de uma forma mais clara como é o funcionamento do
software deste módulo.
Figura 10 – DFD do módulo Hub
2.3 MÓDULO APLICAÇÃO
O módulo Aplicação é composto exclusivamente por software, em
funcionamento em um computador com o módulo Hub conectado a si por uma porta
USB. O software é multiplataforma, utilizando um sistema operacional Windows, Linux
ou Mac OS. Esta aplicação tem como objetivo gerenciar todos os dados recebidos
pela estação efetivamente – isto é, armazená-las ou publicá-las. Ao abrir a aplicação
pela primeira vez, ela pede para que o usuário selecione a porta serial a qual o hub
está conectado. Uma vez selecionada, ela estará escutando aquela porta
ininterruptamente aguardando novas informações.
Uma vez que uma nova entrada é recebida pela aplicação, ela mostra na tela
as medições recebidas e armazena e/ou publica-as caso o usuário tenha optado por
quaisquer uma das opções oferecidas. Ou seja, se o usuário escolheu armazenar em
dois formatos de arquivos locais diferentes, logo que uma nova informação é recebida
a aplicação irá adicioná-la aos formatos de arquivo que o usuário escolheu. Se ele
optou também por publicar as informações em um serviço online (ThingSpeak, por
exemplo), as informações também serão enviadas pela internet ao(s) serviço(s)
escolhido(s) se há conexão de internet ativa e se as informações de autenticação
-
20
foram corretamente incluídas. Informações como ponto de orvalho também podem ser
calculadas pela estação.
Adicionalmente, a aplicação possui também um módulo voltado à inteligência
artificial, podendo assim prever o tempo baseando-se nas informações fornecidas por
uma estação. Dessa forma, após um determinado tempo coletando as informações
para o algoritmo (um mês, por exemplo) e escolhendo a opção da previsão do tempo
a aplicação determinará qual será a condição do tempo a curto prazo (a condição do
céu, por exemplo).
A aplicação possuirá suporte aos diferentes formatos de arquivo e serviços
online:
a) Arquivo de texto (.txt);
b) Arquivo de dados tabelados (.csv);
c) Arquivo de relação de atributos, utilizado pelo software de inteligência
artificial Weka e pelo módulo de inteligência artificial do Sentinel (.arff);
d) ThingSpeak (serviço online que oferece gráficos atualizados em tempo real);
e) WUnderground (serviço online mundial de estações meteorológicas,
oferecendo suporte a estações feitas por usuários domésticos).
Na figura 11, abaixo, pode-se verificar o diagrama de atividades previsto para
este módulo.
-
21
Figura 11 – Diagrama de atividades do módulo Aplicação
2.3.1 DESENVOLVIMENTO E IMPLEMENTAÇÃO
Este módulo é previsto para ter um funcionamento tal qual ilustrado pela figura
11, acima. Além disso, um dos pontos a serem buscados é o baixo consumo de
memória RAM e poder ser multiplataforma. Portanto, foram escolhidos para a
implementação do módulo o Java com JavaFX, utilizando o Java Development Kit
versão 8 com o JavaFX 8 em conjunto com o NetBeans IDE como ambiente de
desenvolvimento.
Quatro pacotes são previstos, sendo eles:
Sentinel.ui: encarregado apenas da interface com o usuário;
Sentinel.serial: encarregado pela interface entre o módulo Hub e o módulo
Aplicação, recebendo os dados do módulo Hub;
Sentinel.sentinel: encarregado por todas as funções de manuseio dos dados e
armazenamento;
Sentinel.forecast: encarregado apenas pela previsão do tempo.
-
22
2.3.2 SENTINEL.UI
Este pacote cuida especificamente da interação entre o Sentinel e o usuário.
Assim sendo, mostra ao usuário as opções que ele pode escolher/definir para o
Sentinel e a partir das suas escolhas, interage com os outros pacotes. Além disso, o
monitoramento da porta serial por novos dados é também tratado por este pacote.
2.3.2.1 Tratamento de dados
Caso algum dado tenha chegado do módulo Hub, o pacote Sentinel.ui receberá
e tratará desse dado o transformando em uma string e levantando uma flag. O pacote
Sentinel.ui terá uma thread rodando com um timer a fim de verificar constantemente
se novos dados foram recebidos do módulo Hub. Caso tenha sido, um handler serial
converterá essa string a qual foi recebida para um objeto da classe
Sentinel.sentinel.WeatherData, a qual contém todas as informações a serem usadas
ao longo do módulo, incluindo a data e hora. Após isso, todas as opções marcadas
serão verificadas, armazenando nos tipos de dados escolhidos pelo usuário além de
mostrar na tela e armazenar em um arquivo com extensão *.sff (Sentinel Forecast
File), utilizado especificamente para a previsão do tempo. Esta operação sempre
acontece toda vez que chegarem novos dados pela porta serial escolhida enquanto o
programa estiver em execução.
2.3.2.2 Tela inicial
A tela inicial mostra apenas uma opção. O usuário pode escolher qual porta
serial o Hub está conectado, sendo mostradas como alternativas apenas as portas
seriais abertas no momento. Ao clicar em OK, o módulo Aplicação estabelecerá uma
conexão com o módulo Hub e estará escutando esta porta ininterruptamente até o
encerramento do programa, pelo botão Exit. Este botão de saída é sempre presente
no programa.
Nesta tela, a interação maior é com o pacote Sentinel.serial para a descoberta
e conexão com as portas. Após se conectar com sucesso, a tela principal do Sentinel
se abre. Caso haja algum erro, uma mensagem de erro aparecerá e depois o
programa será encerrado. Na figura 12, abaixo, pode-se ver a tela inicial do módulo
Aplicação.
-
23
Figura 12 – Tela de seleção de porta serial do Sentinel
2.3.2.3 Tela principal
A tela principal é composta por três abas, sendo a primeira para o registro em
tela. Esta aba possui três partes, todas com as dimensões ajustáveis entre si. A
primeira, Polling info for all stations, mostra em árvore todos os últimos dados
recebidos de todas as estações. Assim, pode-se expandir ou reduzir a visualização
de todas as estações que enviaram dados para o módulo Hub desde que o módulo
Aplicação foi inicializado. A segunda, Last info received, mostra em maiores detalhes
quais foram os dados recebidos por último (ou seja, os dados de apenas uma
estação). A terceira, Log, mostra um registro de todas as informações que o módulo
Aplicação fez, o que inclui:
Recebimento de dados do módulo Hub;
Mensagens de erro/sucesso de armazenamento local/via internet dos dados;
Realização de previsão do tempo pelo módulo Aplicação.
Na figura 13, abaixo, pode-se ver a primeira aba da tela principal.
-
24
Figura 13 – Tela de log do Sentinel
A segunda aba cuida especificamente das opções e configurações de
armazenamento. O usuário pode optar por uma ou mais opções de armazenamento
de todos os dados que são recebidos no futuro e essas opções podem ser alteradas
dinamicamente. Caso nenhuma opção tenha sido escolhida, os dados serão apenas
mostrados na tela e armazenados em um arquivo *.sff para uso futuro para a previsão
do tempo. Também possui seções para configurações de armazenamento online,
como, por exemplo, a ID da estação e a chave de autenticação da estação para
armazenar no serviço online ThingSpeak, requerido pelo mesmo. Na figura 14, abaixo,
é possível visualizar como seria esta aba.
Toda vez que um arquivo chega ocorre a leitura das opções marcadas,
armazenando então nas opções escolhidas. O armazenamento é sempre individual
por estação, e no caso dos arquivos de texto, divididos também de forma mensal.
-
25
Figura 14 – Tela de armazenamento do Sentinel
Já a terceira aba é especializada apenas na parte de previsão do tempo. Como
pode ser visto na figura 15, possui dois campos principais: escolhe-se primeiro qual
será a estação da qual os dados serão obtidos para a previsão do tempo, e
posteriormente mostra-se abaixo qual é a previsão do tempo após apertar o botão
Start. Mensagens de erro serão exibidas caso não se tenha dados o suficiente ou haja
algum erro na abertura/leitura do arquivo contendo os dados.
-
26
Figura 15 – Tela de previsão do tempo do Sentinel
2.3.3 SENTINEL.SERIAL
Este pacote cuida exclusivamente da conexão serial com o módulo Hub. Uma
vez conectado com sucesso a uma porta, uma thread será aberta monitorando aquela
porta ininterruptamente. Caso dados tenham sido enviados daquela porta – isto é,
caso o Hub tenha enviado algum tipo de dado para o computador, significando desta
forma que alguma estação enviou algum dado, uma flag será erguida – a qual é
constantemente monitorada pelo pacote Sentinel.ui – e os dados serão colocados em
uma string, a qual será capturada por este mesmo pacote. Toda a manipulação dos
dados provenientes da porta serial e tratamento de erros desta porta é tratado
especificamente por este pacote.
2.3.4 SENTINEL.SENTINEL
O pacote sentinel é o principal pacote do módulo Aplicação. Ele, em suma,
cuida de todas as operações relacionadas com o manuseio dos dados e o seu
armazenamento, além da conexão com os serviços na internet.
Neste pacote localiza-se a classe WeatherData. Esta classe é primordial no
módulo Aplicação uma vez que seus objetos correspondem a entradas de dados
recebidos por uma estação – ou seja, toda vez que forem recebidos dados do módulo
-
27
Hub, a string com os mesmos serão convertidos para um objeto do tipo WeatherData,
já realizando um processamento e análise de dados, incluindo a data e hora a qual os
dados foram recebidos e incluindo dados como o ponto de neblina para aquela
condição do tempo. Depois disso, as outras classes que cuidam do armazenamento
ou conexão com serviços online serão chamadas dependendo das opções marcadas
na tela da aplicação e executadas para assim armazenar os dados em diferentes
locais, além da tela da aplicação.
Esta classe possui os seguintes elementos:
ID da estação;
Temperatura;
Umidade relativa do ar;
Pressão atmosférica;
Índice de chuva;
Velocidade do vento;
Direção do vento;
Condição do céu;
Ponto de neblina.
Além disso, possui listas envolvendo os cabeçalhos com as descrições dos
dados que são usados no armazenamento de dados nos diferentes tipos de arquivo e
na tela. Adicionalmente à classe WeatherData, existem outras cinco classes, sendo
elas:
LocalDataManipulation: inclui métodos para a criação, abertura e inclusão de
dados a arquivos locais (extensões .csv, .txt, .sff e .arff);
StringManipulation: métodos para a conversão da string recebida do módulo
Hub para um objeto da classe WeatherData.
ThingSpeak: métodos para se conectar ao serviço ThingSpeak e enviar os
dados recebidos de uma estação meteorológica (por meio de um objeto do tipo
WeatherData) para o serviço, via HTTP POST.
WUnderground: métodos para se conectar ao serviço Weather Underground
(WUnderground) e enviar os dados recebidos de uma estação meteorológica
(por meio de um objeto do tipo WeatherData) para o serviço, via HTTP POST
configurado como Rapid Fire (para atualizações em tempo real).
-
28
2.3.5 SENTINEL.FORECAST
Este pacote contém toda a lógica necessária para a previsão do tempo. A
aproximação escolhida – sob sugestão do professor orientador – para a previsão do
tempo é utilizando redes neurais MLP (multilayer perceptron, ou perceptron
multicamadas) com algoritmo de retropropagação.
O framework escolhido é o Encog. Dessa forma, as suas bibliotecas são
integradas ao Sentinel. A rede é treinada e configurada externamente e depois os
seus arquivos de configuração – já prontos – são passadas à rede dentro deste
pacote. A taxa de erro utilizada é de 9% a princípio, valor o qual pode ser ajustado
uma vez que bases de dados maiores são carregadas.
2.3.5.1 Funcionamento do algoritmo
Como o próprio nome diz, uma rede MLP é antes de mais nada, uma rede
neural. Uma rede neural trata-se de um sistema computacional feito de um número de
elementos de processamento interconectados e inspirados no funcionamento do
cérebro dos mamíferos [4]. Cada elemento possui como saída uma função do cálculo
das entradas, sendo que cada uma delas tem um peso acrescido de um valor.
A rede MLP é uma estrutura disposta em camadas, sendo que cada camada
recebe dados da camada imediatamente inferior e submetendo para a camada
seguinte. Além disso, os elementos da mesma camada não são conectados entre si.
O número de camadas é definido de acordo com a aplicação.
Com o algoritmo de retropropagação, a entrada é apresentada e então
propagada para frente pela rede, calculando as ativações para cada unidade de saída.
Todas essas unidades de saída são comparadas com o valor desejado, resultando
desta forma em um valor de erro. Finalmente, esses erros são processados pela rede
e então são feitas alterações nos pesos de cada entrada.
Na figura 16, abaixo, pode-se ver qual é o algoritmo utilizado para a
retropropagação.
-
29
Figura 16 – Pseudocódigo da retropropagação
2.3.5.2 Implementação da rede neural
No Sentinel, conforme explanado anteriormente, toda a lógica relacionada à
previsão do tempo adotará a rede neural MLP e será implementada completamente
neste pacote utilizando o framework Encog. As configurações iniciais dependem dos
dados fornecidos pelo Sentinel para que seja feito o treinamento da rede neural e sob
a sugestão do professor orientador. Planeja-se inicialmente que o algoritmo seja
capaz de prever as condições do tempo na faixa de algumas horas (entre cinco a dez
horas no futuro), podendo ser alterada para mais ou para menos dependendo dos
resultados fornecidos no treinamento, uma vez que o Sentinel entrar em
funcionamento e os dados forem coletados.
Planeja-se que a previsão do tempo rode em uma thread em separado do resto
do Sentinel, interpretando um arquivo com extensão *.sff com um nome padrão
fornecido pelo próprio Sentinel. Caso o algoritmo não encontre o arquivo ou não
consiga abrí-lo, ele fará mais duas tentativas. Caso ainda não consiga, uma
mensagem de erro será exibida e a thread será encerrada, mas não o programa – o
que possibilita ao usuário tentar novamente a previsão do tempo.
A previsão do tempo é rodada a cada vez que uma nova informação chega de
uma estação, atualizando a previsão do tempo que é feita por estação. Assim sendo,
para que se preveja o tempo para uma estação deve-se ter dados dela armazenados.
Há pouca interação deste pacote com os outros, sendo elas:
INÍCIO
Escolher um pequeno valor positivo para o tamanho do passo ρ
Assinalar pesos iniciais pequenos aleatoriamente selecionados para todas
as células
ENQUANTO as alterações dos pesos e no erro médio não forem suficientemente
pequenas
Escolher o próximo exemplo de treinamento E e sua saída correta C
Fazer uma passagem da entrada para a saída através da rede
Calcular as somas ponderadas Si
Calcular as ativações ui = f(Si)
Iniciando com as saídas, fazer uma passagem de cima pra baixo
pelas células de saída e intermediárias
Atualizar os pesos
FIM-ENQUANTO
FIM
-
30
Sentinel.ui: iniciar/parar a previsão do tempo, atualizando os dados na tela
quando necessário;
Sentinel.sentinel: os dados a serem verificados para a previsão do tempo
teriam sido armazenados por este pacote.
-
31
2.4 HARDWARE UTILIZADO
A lista de materiais utilizada para o Sentinel é a seguinte (a lista não inclui
componentes estruturais):
Módulo Estação
o Microcontrolador: Arduino Pro (3.3V)
o Transceiver RF: Hope RF RFM12B-S2
o Sensor de temperatura: Maxim DS18B20
o Sensor de umidade: Honeywell HIH-4030
o Sensor de pressão: Bosch BMP085
o Sensor de condição do céu: Melexis MLX90614
o Sensores de chuva e vento: Argent Weather Sensor Assembly 80422
o 3 diodos Schottky 1N5817
o 1 capacitor 100nF
o 1 resistor 4,7KΩ
o 4 resistor 10KΩ
o 2 batterias NiMH 2,4V @ 1,5Ah
o 3 placas solares ~5V @ 100mAh
o 1 cooler plástico
Módulo Hub
o Microcontrolador: Arduino Pro (3.3V)
o Transceiver RF: Hope RF RFM12B-S2
Módulo Aplicação
o Sem hardware
2.5 LIMITAÇÕES
O Sentinel, enquanto visto como possível aplicação de fim comercial, foi
limitado em determinados aspectos para a sua execução a nível conceitual. São eles:
Módulo Estação
o Autonomia: baterias e placas solares menores. A nível comercial,
uma estação localizada em um lugar afastado necessitaria de uma
-
32
placa solar com uma área maior e uma bateria também maior e mais
pesada.
o Comunicação: o transceiver utilizado tem um alcance de 200m. Um
modelo diferente precisaria ser utilizado caso fosse desejada uma
distância maior. Além disso, a topologia utilizada é a estrela. Isto na
prática significa que uma estação não pode enviar as suas
informações a outra estação que estaria retransmitindo os dados até
chegar ao hub.
Módulo Aplicação
o Previsão do tempo: uma base de dados maior seria necessária para
oferecer resultados mais precisos. Em outras palavras, seria
necessário coletar os dados por um prazo de tempo maior para que
melhores resultados fossem fornecidos pela aplicação.
-
33
3 TESTES E RESULTADOS
São necessários certos testes de modo a se assegurar de que o projeto
funciona tal qual desejado – isto é, de acordo com o que ele foi projetado. Dessa
forma, são apresentados abaixo os testes determinados para o Sentinel, divididos em
duas partes, a saber:
a) Testes de caixa branca, nos quais espera-se que o desenvolvedor do projeto
os realize por necessitar um conhecimento do funcionamento interno do sistema (por
exemplo: lógica de programação, funcionamento dos sensores, funcionamento dos
protocolos de comunicação).
b) Testes de caixa preta, nos quais podem ser testados pelo usuário final uma
vez que não necessitam um conhecimento aprofundado do sistema.
3.1 TESTES DE CAIXA BRANCA
3.1.1 Comunicação por radiofrequência entre estação e hub
Gênero: Hardware/Software
Escopo: Estação Meteorológica; Hub
O objetivo deste teste é verificar se a comunicação entre a estação e o hub
funciona efetivamente. Isto significa que do ponto onde a estação está situada até o
local do hub deve-se testar se das 10 primeiras strings a serem enviadas todas são
recebidas com sucesso (por exemplo: se dados forem enviados a cada vinte minutos,
então em duzentos minutos esperam-se dez strings). Deve-se lembrar que já existem
em código mecanismos de prevenção de erros e ruídos. A distância entre estação e
hub devem respeitar os limites previstos para o módulo de radiofrequência utilizado.
O teste se dará por concluído com sucesso caso receba-se corretamente no hub as
10 primeiras strings enviadas da estação meteorológica quando a mesma é ligada.
Resultado: teste realizado com sucesso. A comunicação ocorreu sem
problemas a uma distância superior a 20 metros com uma diferença de altura (a
estação se localizava em um declive) e com paredes com móveis no caminho.
3.1.2 Leitura com sucesso de todos os sensores por 95% do dia
Gênero: Hardware
-
34
Escopo: Estação Meteorológica; Hub; Aplicação Sentinel
O objetivo deste teste é verificar a confiabilidade dos sensores e circuito
utilizados. Assim sendo, obtendo os dados de 24 horas de funcionamento da estação
e analisando esses dados armazenados pelo hub em um arquivo local ou qualquer
outra forma que mostre todos os dados obtidos neste período deve-se constatar que
pelo menos 95% dos dados foram coletados com sucesso (erros seriam por exemplo
uma medida de temperatura de exatos 0º C entre outras duas temperaturas na faixa
de 20ºC em um intervalo de alguns minutos). Se isto ocorrer, considerar-se-á que o
teste foi concluído com sucesso.
Resultado: teste realizado com sucesso. Comparando os resultados medidos
com as condições reais do ambiente foi possível verificar a congruência dos valores.
Os valores do Simepar também ajudaram a confirmar os resultados. Porém,
discrepâncias entre os valores obtidos pela estação e pelo Simepar são esperados
uma vez que são localizados em pontos distintos da região.
3.1.3 Receber e interpretar com sucesso 3 mensagens consecutivas enviadas
por uma estação
Gênero: Software
Escopo: Aplicação Sentinel
Neste teste, o objetivo é verificar se a aplicação consegue interpretar com
sucesso três mensagens consecutivas enviadas por uma estação. Isto é, se uma
estação envia mensagens a cada vinte minutos, então a aplicação deve interpretar
em sessenta minutos três mensagens oriundas desta estação. Assim, estaria sendo
testada a comunicação entre a estação e o hub por extensão, mas principalmente se
a aplicação consegue compreender com sucesso o que significa de fato a mensagem
enviada pelo hub até a aplicação. Portanto, o projeto passaria com sucesso por este
teste caso a aplicação seja capaz de interpretar com sucesso três mensagens
consecutivas enviadas por uma estação.
Resultado: teste realizado com sucesso. O módulo Aplicação foi capaz de
detectar as mensagens consecutivamente e mostrar os resultados obtidos da estação
na tela.
-
35
3.1.4 Armazenar localmente os dados gerados por uma estação
Gênero: Software
Escopo: Aplicação Sentinel
A finalidade deste teste é verificar se os algoritmos de armazenamento de
dados recebidos pela estação funcionam conforme esperado. Dessa forma,
escolhendo todas as opções de armazenamento local e aguardando alguns minutos
(tempo suficiente para que algumas mensagens transmitidas pela(s) estação(ões)
cheguem ao hub) deve-se verificar após o fechamento do programa se todos os dados
foram armazenados corretamente em todos os formatos de arquivo escolhidos.
Posteriormente, repetem-se as mesmas ações a fim de garantir que no fechamento
do programa as novas informações não sobrescrevem as antigas, apenas sendo
adicionadas ao final do arquivo. Caso isto de fato ocorra, o teste estaria concluído com
sucesso.
Resultado: teste realizado com sucesso. Selecionando as devidas opções a
estação foi capaz de armazenar nos respectivos formatos de arquivo todas as
entradas recebidas, formando listas com as entradas recebidas e organizadas de
forma cronológica.
3.1.5 Armazenar pela internet os dados gerados por uma estação
Gênero: Software
Escopo: Aplicação Sentinel
O objetivo deste teste é verificar a comunicação da aplicação com diversos
serviços online dos quais o Sentinel se conecta. Para tal, uma conexão com a internet
é requerida com o computador no qual a aplicação está sendo executada. Informando
todos os dados necessários para a conexão com os serviços online (exemplo: usuário
e senha) e selecionando todos os serviços online disponíveis no Sentinel, deve-se
aguardar alguns minutos para que algumas mensagens chegem da(s) estação(ões)
para que a aplicação possa recebê-las e direcioná-las aos serviços online. Verificando
esses serviços e confirmando que as informações foram transmitidas com sucesso
para os mesmos constituem no sucesso deste teste.
-
36
Resultado: teste realizado com sucesso. Marcando as devidas opções na
aplicação foi possível enviar para os serviços online as informações enviadas pela
estação em tempo real.
3.2 TESTES DE CAIXA PRETA
3.2.1 Funcionamento ininterrupto da estação por 24h
Gênero: Hardware
Escopo: Estação Meteorológica
Neste teste o objetivo é testar a autonomia do sistema de alimentação da
estação meteorológica. O período de 24 horas significa que será testado tanto a placa
solar (período diurno) como a bateria (período noturno). Caso a estação transmita
dados (o que subentende-se que ela conseguiria se manter ligada) por este prazo, o
teste estará concluído com sucesso.
Resultado: teste realizado com sucesso. Porém, após este prazo a autonomia
da estação foi diminuída, operando das 07h até às 20h em média pela placa solar
utilizada, mesmo em dias nublados. Usando uma placa solar de maior capacidade
resolveria o problema.
3.2.2 Funcionamento normal da estação durante chuva
Gênero: Hardware
Escopo: Estação Meteorológica
Neste teste o objetivo é testar problemas de infiltração e ruídos na transmissão
por radiofrequência em caso de chuva. Pela complexidade da estação, deve-se testar
se a chuva não causará nenhum problema tanto na transmissão de dados como
também nos circuitos dentro da estação. Caso os dados sejam transmitidos sem
problemas e se a estação não sofrer nenhum tipo de avaria o teste estará concluído
com sucesso.
Resultado: teste realizado com sucesso. Os dados recebidos não tiveram
nenhuma interferência e o circuito manteve-se livre de infiltrações.
-
37
3.2.3 Assegurar o armazenamento de chaves utilizadas pelos serviços online
mesmo após o fechamento do programa
Gênero: Software
Escopo: Aplicação Sentinel
Neste teste tem-se a finalidade de verificar se as informações utilizadas pelos
serviços online são armazenados com sucesso pela aplicação e recuperados
automaticamente pela mesma quando a aplicação é reaberta, evitando assim que o
usuário tenha que repetir várias vezes a mesma informação, poupando-lhe tempo. Ao
digitar as informações necessárias para o serviço e clicando no botão destinado para
adicioná-las as mesmas seriam transferidas para um arquivo texto destinado ao seu
armazenamento. Assim, caso um dos serviços online estejam selecionados o Sentinel
irá automaticamente buscar as informações de login e assim atualizará os serviços
automaticamente e individualmente, uma vez que cada estação possui a sua própria
autenticação em cada um dos serviços utilizados. Uma vez assegurado de que este
método funciona, o projeto passará com sucesso por este teste.
Resultado: teste realizado com sucesso. Marcando as opções de uso de
serviços online e mesmo sem informar as chaves de acesso a esses serviços o
programa foi capaz de encontrá-los e utilizá-los.
3.2.4 Prever uma condição de tempo em base dos dados fornecidos por uma
estação
Gênero: Software
Escopo: Aplicação Sentinel
Este teste possui como objetivo testar o algoritmo de previsão do tempo. Para
tal, é necessário acumular registros de uma estação por um tempo considerável (um
ou dois meses, por exemplo). Após o treino do algoritmo com essas informações,
deve-se averiguar após o tempo para o qual a informação foi prevista se ela de fato
ocorreu (por exemplo: se foi prevista chuva para daqui a duas horas, daqui a duas
horas deve-se conferir se estaria de fato chovendo ou não). Se a taxa de acerto deste
teste for compatível com a taxa de acerto planejada para o algoritmo, o projeto passou
com sucesso por este teste.
-
38
Resultado: teste realizado com sucesso. Porém, o volume de dados disponível
para teste foi baixíssimo, correspondente a um pouco menos de 48h de operação.
Dessa forma, a rede neural não foi capaz de ser treinada o suficiente para fornecer
um resultado mais fiel. Na figura abaixo, todavia, é possível notar que apesar disso
ele é capaz de verificar o comportamento de aumento e baixa da temperatura com o
passar do tempo. Caso uma base de dados maior seja alimentada à rede neural é
possível então obter resultados mais precisos.
Figura 17 – Teste da previsão do tempo
0
5
10
15
20
25
30
35
Temperatura
Temperatura Previsão
-
39
4 CONCLUSÃO
O Sentinel – antes de qualquer definição – é um projeto de conclusão do curso
de Graduação em Engenharia de Computação o qual possui como objetivo colocar à
prova e integrar vários dos conhecimentos obtidos durante todo o seu andamento.
Além disso, também busca propor uma solução para um problema existente – o da
aplicação da meteorologia em regiões menores com um custo baixo porém mantendo
um bom padrão de confiabilidade.
Todos os objetivos do projeto foram cumpridos com sucesso. A maior
dificuldade foi a integração em uníssono dos diferentes módulos, principalmente a
nível de hardware. O controle do tempo – outro fator importante uma vez que o projeto
foi executado de forma individual – foi também crucial uma vez que as horas
disponíveis eram poucas.
Certas limitações foram tomadas uma vez que o Sentinel a este ponto é um
produto conceitual e não comercial. A autonomia e o alcance, por exemplo, foram
limitados para facilitar a execução das outras partes. A base de dados gerada – com
a entrada de poucos dias – também foi outro fator limitante da rede neural a qual é
encarregada da previsão do tempo. A pequena base de treinamento habilitou a
previsão do comportamento da temperatura, para mais ou para menos. Porém, a
previsão da temperatura em si seria possível ser detectada após um novo treinamento
da mesma rede, porém com uma base maior.
Assim sendo, o Sentinel foi aplicado para testes reais durante dias, exposto às
intempéries vinte e quatro horas por dia em um terreno íngreme, provando a sua
capacidade e a sua viabilidade como uma solução meteorológica barata e confiável.
-
40
REFERÊNCIAS
[1] ARDUINO – REFERENCE. Millis. Disponível em: . Acesso em 9 jun. 2013.
[2] PONTIFÍCIA UNIVERSIDADE CATÓLICA DO PARANÁ – PPGIA. Perceptron Multicamadas (MLP). Disponível em: . Acesso em 11 jun. 2013.
[3] SAN JOSÉ STATE UNIVERSITY. Clouds, Cloudiness, Surface Temperature, the Greenhouse Effect and Global Climate Change. Disponível em: . Acesso em 10 jun. 2013.
[4] UNIVERSITY OF WISCONSIN-MADISON – DEPARTMENT OF COMPUTER SCIENCES. A Basic Introduction To Neural Networks. Disponível em: . Acesso em 11 jun. 2013.
-
41
APÊNDICE A – PROJETO DA ESTAÇAO
1) Indicador da posição do vento
2) Anemômetro
3) Medidor (sensor) de chuva
-
42
4) Caixa de circuitos e placa solar
5) Escudo de radiação solar
6) Suporte da caixa de circuitos/torre do sensor de condição do céu
-
43