O projeto Meteorolog visa proporcionar:
- Um conjunto de ferramentas para coleta de dados meteorológicos usando a placa Arduino;
- Armazenamento remoto de dados públicos em um servidor da UFRGS, para análises futuras;
- Site: dados.cta.if.ufrgs.br/emm
- Repositório: meteorolog/cta-emm-web
Este repositório contém o código necessário para a execução da primeira etapa acima. Instruções de uso estão presentes nesta página.
ATENÇÃO! Este projeto ainda está sob constante desenvolvimento e pode apresentar bugs que devem ser reportados ao mantenedor do projeto!
Meteorolog v0.2.2
Esta documentação refere-se ao uso da versão seguinte: https://git.cta.if.ufrgs.br/meteorolog/meteorolog/tree/v0.2.2
Vídeo instrucional
Para desenvolvedores
Interessado em contribuir no código ou apenas entender como ele funciona? Confira nossa documentação oficial em:
http://arduino-meteorolog.readthedocs.org/en/latest/
Mantenedor
Bugs, dúvidas e feedbacks devem ser enviados para:
Conteúdo
Apresentação
A placa Arduino consiste em um projeto de hardware open-source: não apenas o código-fonte do firmware é divulgado, como também os esquemáticos da placa (que infelizmente ainda não incluem o design do microprocessador). Seu sucesso vem provavelmente da versatilidade que oferece na prototipagem (testes) de eletrônica digital.
Existem hoje no mercado diversos sensores de baixo custo que podem ser utilizados para aquisição de dados meteorológicos (temperatura, pressão, umidade relativa do ar) com um bom grau de confiança. Assim, tendo-se uma placa Arduino é possível implementar uma estação meteorológica básica, de baixo custo, plenamente capaz de oferecer dados climáticos comparáveis àqueles de estações profissionais.
Confira nas próximas seções a descrição dos sensores suportados nesse projeto, sugestões de montagem na placa e instalação/uso do software disponível neste repositório.
Sensores
LDR (Light Dependent Resistor) -- Luminosidade ambiente
(Fonte da imagem: http://p.globalsources.com)
Trata-se de um resistor especial cuja resistência é afetada pela presença de luz. Ligando ele num pino analógico do Arduino, em série com um resistor comum (cerca de 2k2), é possível obter variações na voltagem do pino (entre 0 V e 5 V) conforme a intensidade de luz incidente: muita luz --> aumenta resistência --> diminui voltagem, e vice-versa.
DHT22 -- Temperatura e umidade relativa do ar
(Fonte da imagem: http://moretosprojects.blogspot.com.br)
A medida de temperatura é obtida através de um termistor, que combinada com a leitura de uma superfície capacitiva obtém-se também a medida de umidade relativa do ar. O funcionamento é controlado por um microchip, que opera em um pino digital da Arduino através do protocolo One Wire.
A leitura dos valores é facilitada com o uso da biblioteca DHT.h.
BMP085 -- Pressão e temperatura
(Fonte da imagem: http://www.hobbytronics.co.uk)
O funcionamento interno é controlado por um microchip onde a leitura é solicitada através de um barramento I2C. Essa é uma forma de comunicação digital que permite a conexão de vários componentes em um único barramento (utilizando os mesmos pinos do Arduino). Uma vantagem imediata é a possibilidade de detectar se o sensor está presente antes de solicitar uma leitura que produziria valores incorretos.
A leitura dos valores é facilitada com o uso da biblioteca Adafruit_BMP085.h.
Prototipagem
O esquema acima ilustra a montagem (em protoboard) dos sensores atualmente suportados pelo projeto Meteorolog. Os pinos utilizados devem coincidir com aqueles declarados no código-fonte (arquivo firmware/meteorolog/mysensors.cpp). Logo, caso faça uma montagem diferente, assegure-se de declarar adequadamente esses pinos no código-fonte.
OBS 1: Oficialmente encorajamos o uso do sensor DHT22 para medição de temperatura e umidade relativa do ar. No entanto, o código suporta o uso do DHT11 (modelo mais antigo) desde que seja feita a seguinte alteração no arquivo meteorolog/mysensors.cpp, linha 23:
#define DHTTYPE DHT11
OBS 2: É importante que o BMP085 (sensor de pressão) seja ligado na tensão 3.3 V para uma leitura correta.
Essa é uma excelente maneira de aprender eletrônica, mesmo para aqueles não familiarizados no assunto. Considerando o baixo custo dos sensores acima, juntamente com a versatilidade da Arduino, esperamos que qualquer pessoa seja capaz de montar essa estação meteorológica básica para então colaborar com a aquisição de dados na nossa rede pública.
Utilizando o software
O software desse repositório inclue:
- Firmware para placas Arduino;
- Data logger para coleta de dados e envio para o servidor;
OBS: Assumimos aqui o uso de um sistema operacional Linux baseado em Debian (ex: Mint, Ubuntu, Debian, etc). Ao digitar os comandos, não inclua o
$
do início da linha.
1. Obtenha o código v0.2.2
-
Baixe o código da versão correta referente a este tutorial:
-
Descompacte e entre dentro da pasta raiz, a qual possui um arquivo
Makefile
.
ATENÇÃO: Daqui em diante será assumido que você está dentro da pasta raiz para executar os comandos make
(que utiliza o arquivo Makefile
).
2. Instale as dependências
2.1 Dependências de sistema (requer senha de administrador)
Comando | Descrição | Debian Package |
---|---|---|
python3 | Interpretador da linguagem Python, versão 3.x. | python3 |
pip3 | Instalador de bibliotecas (PyPI) do Python 3 | python3-pip |
virtualenv | Criação de ambientes virtuais de Python | python-virtualenv |
supervisor | Gerenciador de daemons | supervisor |
Usuários do Debian (e derivados) podem utilizar o gerenciador de pacotes apt-get
para instalar as dependências como segue:
make install-deb-deps
OBS: Pode ser necessário reiniciar o terminal ou até mesmo a seção de usuário.
Usuários de outras distribuições deverão verificar a disponibilidade dessas ferramentas no seu gerenciador de pacotes (aptitude
, yum
, etc) e proceder a instalação antes de realizar os próximos passos. Em caso de dúvidas, entre em contato com o administrador do seu sistema.
2.2 Dependências locais (não requer senha de administrador)
make setup
O logger foi programado na linguagem Python e utiliza diversas bibliotecas de terceiros. O comando acima criará um ambiente virtual (na pasta .venv
) contendo uma instalação isolada de Python e que possui as bibliotecas necessárias ao logger.
3. Instale o firmware
Dentro da pasta firmware/meteorolog está o código C++ do programa (firmware) que rodará na placa Arduino, responsável por efetuar a leitura dos sensores. Existem duas opções para efetuar sua instalação na placa:
-
1ª Opção) Utilizar a IDE do Arduino:
- Abra o arquivo firmware/meteorolog/meteorolog.ino;
- Selecione o modelo correto da placa em "Tools" > "Board";
- Por exemplo:
Arduino Uno
, ouArduino Duemilanove
, etc.
- Por exemplo:
- Selecione a porta USB na qual a placa está conectada em "Tools" > "Port";
- Por exemplo,
/dev/ttyACMx
ou/dev/ttyUSBx
(onde "x" é um número).
- Por exemplo,
- Clique no botão
para compilar o código e enviá-lo para a placa.
-
2ª Opção) Via linha de comando (executado na pasta raiz, que contém o
Makefile
):make firmware
ATENÇÃO: Certifique-se de que a única placa conectada na USB é aquela em que você deseja instalar o firmware!
OBS: Requer que a IDE do Arduino esteja instalada (idealmente, versão 1.0.x), assim como a ferramenta Ino Tool (instale com
make install-ino
).
3.1 Teste o firmware
Afim de verificar que o firmware está realmente instalado na placa Arduino e funcionando corretamente, recomendamos que você teste a leitura dos sensores (e configuração do relógio RTC, caso presente) de acordo com a wiki:
settings.ini
4. Configure Presente na pasta raiz do projeto, o arquivo settings.ini
contém todas as configurações necessárias para uso do logger (software para coleta de dados).
Revise pelo menos os seguintes intens:
Valor | Descrição breve |
---|---|
server/BOARD_HASH |
Código de autenticação conforme seus dados em http://dados.cta.if.ufrgs.br/emm/board/manage/<board_id> |
reading/SLEEP_MINUTES |
Tempo que logger aguardará para fazer outra leitura. |
4.1 Teste o logger
Objetivando verificar se a configuração atual é válida, execute o logger em primeiro plano com:
make run
5. Instale o logger
make deploy
ATENÇÃO: A instalação pode levar alguns minutos. Alguns programas serão instalados no sistema (requer senha de administrador). Confira os detalhes na wiki prepare-venv.
Se tudo deu certo, a última menssagem recebida deverá ser algo como:
meteorologger RUNNING pid 6242, uptime 0:00:02
O que significa que o logger está rodando, com sucesso, em background. Assim, você pode desligar a máquina, ou até mesmo desconectar a placa, que o logger continuará sendo executado.
Monitore a execução com:
make tail-log
- Os dados coletados são validados e armazenados na pasta
data/
(presente na raiz do projeto).- Valores inválidos são salvos como
NaN
, o que pode significar que ocorreu algum erro numérico na leitura ou que o sensor desta medição não está presente na placa.
- Valores inválidos são salvos como
- Serão feitas tentativas de envio dos dados para o servidor. Código 200 significa sucesso.
- Em caso de falha, os dados não enviados serão guardados na pasta
data/outgoing
para serem enviados em uma tentativa posterior.
- Em caso de falha, os dados não enviados serão guardados na pasta
Por fim, o logger pode ser desativado com:
make undeploy
6. Monitore os dados
- Monitore a execução do logger em background com:
make tail-log
-
Toda vez que o daemon reinicia (por exemplo, ao reiniciar a máquina), um novo log de execução é criado na pasta
logger/logs
, contendo a time stamp do início da execução; -
O comando acima monitora apenas o
.log
mais recente; -
Monitore a coleta de dados (salvos na pasta
arduino-meteorolog/data/
) com:
make tail-data
-
Toda vez que o daemon reinicia (por exemplo, ao reiniciar a máquina), um novo arquivo
datalog
, contendo as leituras em formato CSV (versettings.yaml
), é criado; -
O comando acima monitora apenas o
datalog
mais recente; -
Monitore o progresso do
datalog
mais recente em um gráfico (requerGnuplot
) com:
make plot-data col=<C>
onde <C>
deve ser o número da coluna que será plotada no eixo y.