|
|
# Overview do Projeto
|
|
|
|
|
|
## Prototipagem
|
|
|
O projeto Meteorolog visa proporcionar:
|
|
|
|
|
|
1. Um conjunto de ferramentas para coleta de dados meteorológicos usando a placa Arduino;
|
|
|
2. Armazenamento remoto de dados públicos em um servidor da UFRGS, para análises futuras;
|
|
|
* Site: [dados.cta.if.ufrgs.br/emm](http://dados.cta.if.ufrgs.br/emm)
|
|
|
* Repositório: [meteorolog/cta-emm-web](https://git.cta.if.ufrgs.br/meteorolog/cta-emm-web)
|
|
|
|
|
|
Este repositório contém o código necessário para a execução da primeira etapa acima.
|
|
|
|
|
|
## Adquirindo dados com a placa Arduino
|
|
|
|
|
|
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 pode-se implementar uma estação meteorológica básica, de baixo custo, plenamente capaz de oferecer dados úteis para monitoração climática.
|
|
|
|
|
|
Confira nas próximas seções uma descrição dos sensores, sugestões de montagem na placa, e uso do software disponível neste repositório.
|
|
|
|
|
|
### Prototipagem
|
|
|
|
|
|
![board-proto.svg](http://cta.if.ufrgs.br/attachments/1724/board-proto.svg)
|
|
|
|
|
|
O esquema acima ilustra a montagem dos sensores suportados atualmente pelo Meteorolog. Os pinos utilizados devem coincidir com aqueles utilizados no código-fonte. Caso opte por algum pino diferente, lembre de alterar seu respectivo valor no arquivo mysensors.cpp.
|
|
|
O esquema acima ilustra a montagem (em protoboard) dos sensores atualmente suportados pelo projeto Meteorolog. Os pinos utilizados devem coincidir com aqueles utilizados no código-fonte (arquivo [meteorolog/mysensors.cpp](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](meteorolog/mysensors.cpp), linha 23:
|
|
|
```cpp
|
|
|
#define DHTTYPE DHT11
|
|
|
```
|
|
|
|
|
|
> OBS 2: É importante que o BMP085 (sensor de pressão) seja ligado na tensão 3.3 V para uma correta leitura.
|
|
|
|
|
|
Essa é uma excelente maneira e 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.
|
|
|
|
|
|
### Instalando o firmware
|
|
|
|
|
|
Tendo a placa com os sensores (seja via prototipagem ou com shield pronto), siga os seguintes passos para instalar o software que vai rodar na Arduino, responsável por recolher a medida dos sensores:
|
|
|
|
|
|
1. Clone esse repositório (requer a ferramenta git) ou simplesmente clique em "Download ZIP" na página inicial para baixar o código.
|
|
|
|
|
|
2. Dentro da pasta meteorolog, abra o arquivo [meteorolog.ino](meteorolog/meteorolog.ino) utilizando a IDE do Arduino.
|
|
|
|
|
|
3. Selecione a sua placa correta no menu "Tools" > "Board". Por exemplo: Arduino Uno, ou Arduino Duemilanove, etc.
|
|
|
|
|
|
4. Selecione a porta USB na qual a placa está conectada, no menu "Tools" > "Port". Por exemplo, `/dev/ttyACMx` ou `/dev/ttyUSBx` (onde "x" é um número).
|
|
|
|
|
|
5. Clique no botão (-->) para compilar o código e enviá-lo para a placa.
|
|
|
|
|
|
6. Se tudo deu certo (nenhuma menssagem de erro), abra o Monitor Serial (botão de lupa) para iniciar uma seção de comunicação com a placa. Experimente então enviar alguns dos seguintes comandos para ler a medida do respectivo sensor:
|
|
|
|
|
|
| Comando | Medida | Sensor |
|
|
|
| -------- | ---------------------- | ------- |
|
|
|
| t | tempertura | DHT22 |
|
|
|
| ah | umidade relativa do ar | DHT22 |
|
|
|
| p | pressão | BMP085 |
|
|
|
| l | luminosidade | LDR |
|
|
|
|
|
|
Os comandos podem ser enviados unicamente ou separados por vírgula, como por exemplo:
|
|
|
|
|
|
```
|
|
|
t,p,l
|
|
|
```
|
|
|
|
|
|
para ler temperatura, pressão e luminosidade simultaneamente.
|
|
|
|
|
|
### Executando o logger
|
|
|
|
|
|
Tendo a placa funcionando corretamente com o firmware instalado (seção anterior), você pode partir para aquisição de dados utilizando o logger.
|
|
|
|
|
|
#### 1. Entre na pasta do projeto
|
|
|
|
|
|
Conforme tenha clonado repositório ou simplesmente baixado o ZIP, acesse a pasta raiz do projeto:
|
|
|
```shell
|
|
|
$ cd arduino-meteorolog
|
|
|
```
|
|
|
Assegure-se de que essa pasta contém os arquivos `logger.py` e `Makefile`:
|
|
|
```
|
|
|
$ ls
|
|
|
doc Makefile requirements.pip test_serial.py
|
|
|
logger.py meteorolog settings.yaml
|
|
|
```
|
|
|
|
|
|
#### 2. Caso esteja utilizando Linux Debian, execute:
|
|
|
|
|
|
```
|
|
|
$ make install-deb
|
|
|
```
|
|
|
para assegurar que as seguintes ferramentas estejam instaladas no seu sistema:
|
|
|
* **python3**: Linguagem na qual o logger foi escrito.
|
|
|
* **pip3**: Gerenciador de pacotes do Python (permite instalar bibliotecas facilmente).
|
|
|
* **virtualenv**: Gerenciador de ambientes virtuais de Python.
|
|
|
|
|
|
Usuarios de outras distribuições Linux devem instalar essas ferramentas por si mesmos, através do seu gerenciador de pacotes (por exemplo, `yum` do CentOS, etc).
|
|
|
|
|
|
> OBS: Caso ocora o erro
|
|
|
```
|
|
|
bash: pip3: command not found
|
|
|
```
|
|
|
verifique se o `pip3` do seu sistema está cadastrado com algum outro nome, como `pip3.4`, por exemplo. Caso afirmativo, execute:
|
|
|
```
|
|
|
$ sudo pip3.x install virtualenv
|
|
|
```
|
|
|
onde "x" é o número correto do pip na sua máquina.
|
|
|
|
|
|
#### 3. Prepare o ambiente Python:
|
|
|
|
|
|
```
|
|
|
$ make setup
|
|
|
```
|
|
|
|
|
|
Após a execução desse comando, uma pasta `.venv` deverá ter sido criada neste local. Ela contém uma instalação local de Python e das bibliotecas necessárias pelo logger.
|
|
|
|
|
|
#### 4. Configure o arquivo `settings.yaml`
|
|
|
|
|
|
* **BOARD_ID**: Coloque aqui o número de ID da sua placa conforme cadastrada em [dados.cta.if.ufrgs.br/emm](http://dados.cta.if.ufrgs.br/emm).
|
|
|
* **SENSORS**: Esse campo consiste em uma lista dos sensores cuja leitura será solicitada pelo logger. Caso a sua placa não possua algum dos sensores aqui presentes, fique à vontade para removê-lo da lista (sugestão: coloque `#` no início da linha para fazer com que ela seja ignorada. Assim, caso queira restaurá-lo, basta tirar o `#`).
|
|
|
* **SERIAL_PORT**: Preencha o campo com uma lista de possíveis portas USB onde a Arduino possa a vir estar presente. A lista pode conter uma única porta, ou mais de uma separadas por vírgula.
|
|
|
* **READING_INTERVAL_SECONDS**: Intervalo de tempo (em segundos) entre execuções do logger (uma execução compreende tentativa de leitura dos dados da porta USB e também envio para o servidor).
|
|
|
|
|
|
#### 5. Execute o logger:
|
|
|
|
|
|
```
|
|
|
$ make log
|
|
|
```
|
|
|
|
|
|
Esse comando dará início à execução do logger, que consiste nas seguintes operações:
|
|
|
|
|
|
ATENÇÃO: É importante que o BMP085 (sensor de pressão) seja ligado na tensão 3.3 V para uma correta leitura. |
|
|
\ No newline at end of file |
|
|
1. Envio de solicitação de leitura para a porta USB que possui o Arduino conectada. Caso negativo (placa não presente), continua tentando em outra porta presente em `settings.yaml` até que uma delas funcione;
|
|
|
1. Ao receber a leitura dos sensores, salva no arquivo local `datalog.csv` (ou conforme configurado em `DATA_LOG_FILENAME` no arquivo `settings.yaml`);
|
|
|
1. Além de salvar localmente, tenta enviar para o servidor. Código 200 significa sucesso: a medição atual está salva no servidor remoto. Caso código diferente de 200, salva a leitura atual no arquivo temporário `outgoing.json`. Na próxima iteração do logger, caso o servidor esteja funcionando, o arquivo `outgoing.json` é esvaziado e os dados em espera são enviados juntamente com a leitura atual. |
|
|
\ No newline at end of file |