Estacao Meteorologica: mudanças entre as edições
Linha 36: | Linha 36: | ||
===Materiais de referência=== | ===Materiais de referência=== | ||
*BLAINSKI, E.; POSPISSIL, L. H.; ANTUNES, G. E. N. [http://ciram.epagri.sc.gov.br/recomendacoes_tecnicas_para_instalacao_de_estacoes.pdf Estações hidrometeorológicas automáticas: recomendações técnicas para instalação], Epagri, Florianópolis, 2012. | *BLAINSKI, E.; POSPISSIL, L. H.; ANTUNES, G. E. N. [http://ciram.epagri.sc.gov.br/recomendacoes_tecnicas_para_instalacao_de_estacoes.pdf Estações hidrometeorológicas automáticas: recomendações técnicas para instalação], Epagri, Florianópolis, 2012. | ||
*[http://www.inmet.gov.br/portal/css/content/topo_iframe/pdf/Nota_Tecnica-Rede_estacoes_INMET.pdf Rede de Estações Meteorológicas Automáticas do INMET], Nota Técnica No. 001, Instituto Nacional de Meteorologia, 2011. | *INMET. [http://www.inmet.gov.br/portal/css/content/topo_iframe/pdf/Nota_Tecnica-Rede_estacoes_INMET.pdf Rede de Estações Meteorológicas Automáticas do INMET], Nota Técnica No. 001, Instituto Nacional de Meteorologia, 2011. | ||
===Artigos com trabalhos de aplicação relacionados=== | ===Artigos com trabalhos de aplicação relacionados=== |
Edição das 14h34min de 18 de abril de 2016
Estação hidrometeorológica automatizada com microcontrolador Arduíno
Objetivo
O objetivo deste projeto é construir uma estação hidrometeorológica automatizada no Campus Foz do Iguaçu, com o objetivo de dispor um banco de dados dinâmico de informações para uso em pesquisas e estudos sobre manejo da água, integrando as áreas de conhecimento de Informática, Eletrônica, Física, Hidrologia e Aquicultura.
- Projeto da Estação Hidrometeorológica, aprovado no programa PIBIC/CNPq IFPR 2016.
Equipe
- Professores orientadores
- Evandro Cantú
- Humberto Martins Beneduzzi
- Bolsista PIBIC/IFPR
- Thiago Henrique Ribeiro
- Alunos voluntários
- Jade Mathias da Silva
- José Antonio Kazienko Sallet
- Frederik Nazario Moschkowich
Estudos sobre Hidrometeorologia
- Tópicos para pesquisa
- Escolha do local para instalação de uma estação hidrometeorologia.
- Normas de localização e instalação de sensores.
- Ponto de orvalho.
Materiais de referência
- BLAINSKI, E.; POSPISSIL, L. H.; ANTUNES, G. E. N. Estações hidrometeorológicas automáticas: recomendações técnicas para instalação, Epagri, Florianópolis, 2012.
- INMET. Rede de Estações Meteorológicas Automáticas do INMET, Nota Técnica No. 001, Instituto Nacional de Meteorologia, 2011.
Artigos com trabalhos de aplicação relacionados
- CARVALHO, L. R. M; AMORIM, H. S. Observando as marés atmosféricas: Uma aplicação da placa Arduino com sensores de pressão barométrica e temperatura, Revista Brasileira de Ensino de Física, v. 36, n. 3, 2014.
Estação Meteorológica Sparkfun
Sensor de Direção do Vento
O sensor de direção do vento é fisicamente composto por oito chaves, ligadas a resistores variados. Quando o vento muda de direção um imã fecha um ou dois contatos, permitindo a medição de 16 resistências diferentes.
Na ligação em hardware, um resistor de 10k ohms é utilizado como divisor de tensão, produzindo uma tensão de saída que pode ser medido por um conversor analógico-digital.
No Arduíno a tensão medida nas entradas analógicas (variando de 0V a 5V) é convertida internamente em um número digital de 10 bits (variando de 0 a 1023).
Para o sensor de direção do vento os 16 valores de resistência no divisor de tensão produzem as seguintes entradas no Arduino:
Direção (Graus) | Resistencia (Ohms) | Tensão (Entrada=5V Resistencia=10ohms) | Binário (Saída porta Analógica) | Saída Leitura em Binário de 10 bits (0 - 1023) | |
---|---|---|---|---|---|
Mínimo | Máximo | ||||
0 | 33k | 3,84 | 786 | 744 | 805 |
22,5 | 6,57k | 1,98 | 405 | 346 | 432 |
45 | 8,2k | 2,25 | 460 | 433 | 529 |
67,5 | 891 | 0,41 | 84 | 75 | 87 |
90 | 1k | 0,45 | 92 | 88 | 109 |
112,5 | 688 | 0,32 | 65 | 0 | 74 |
135 | 2,2k | 0,9 | 184 | 156 | 213 |
157,5 | 1,41k | 0,62 | 127 | 110 | 115 |
180 | 3,9k | 1,4 | 286 | 265 | 345 |
202,5 | 3,14k | 1,19 | 243 | 214 | 264 |
225 | 16k | 3,08 | 630 | 615 | 665 |
247,5 | 14,12k | 2,93 | 599 | 530 | 614 |
270 | 120k | 4,62 | 945 | 886 | 961 |
292,5 | 42,12k | 4,04 | 827 | 806 | 885 |
315 | 64,9k | 4,78 | 978 | 962 | 1023 |
337,5 | 21,88k | 3,43 | 702 | 666 | 743 |
--José Sallet 18h52min de 18 de novembro de 2015 (BRST)--
Pluviômetro
O pluviômetro é um tipo de balde de auto esvaziamento. A cada 0.2794 mm de chuva causa um fechamento de contato momentâneo que pode ser gravado com um contador digital ou acionar uma interrupção de microcontrolador (Arduíno).
O interruptor do pluviômetro é conectado com dois condutores centrais anexados em um cabo RJ11.
--Jade Mathias 16h17min de 17 de novembro de 2015 (BRST)
- Pluviômetro no Arduíno
- A cada 0.2794 mm de chuva uma interrupção é gerada. A rotina de interrupção, portanto, apenas deverá soma 0.2794 a uma variável que guarda a chuva acumulada em mm.
- O contador de chuva acumulada em mm foi construído com uma variável circular, de 0 a 999. Isto é, uma vez chegado a 999 mm a contagem da chuva acumulada volta a zero.
- Interrupções no Arduíno
- No Arduíno UNO as interrupções externas são acionadas pelo comando AttachInterrupt e são acionadas pelo pino 2 (interrupção 0) e/ou pino 3 (interrupção 1).
- No Arduíno as interrupções externas podem ser acionadas de diferentes modos:
- LOW: Quando o pino está baixo;
- CHANGE: Quando o valor do pino muda;
- RISING: Quando o valor do pino sobe de baixo para alto;
- FALLING: Quando o valor do pino desce de alto para baixo;
- HIGH: Quando o pino está alto.
- A cada fechamento de contados ocasionado pelos sensores uma rotina de tratamento de interrupção será acionada.
- Conforme ilustrado no tópico abaixo sobre o hardware para a chave do pluviômetro, será utilizado a borda de subida do pino (RISING) para acionar a interrupção e contar a chuva acumulada.
--Evandro.cantu (discussão) 22h16min de 17 de abril de 2016 (BRT)
Anemômetro
O anemômetro mede a velocidade do vento, fechando um contato com a ajuda de um ímã. Para uma velocidade do vento de 2.4 km/h o interruptor fecha uma vez por segundo.
O interruptor anemômetro está ligado a dois condutores internos do cabo RJ11 compartilhada pelo anemômetro e cata-vento (pinos 2 e 3).
--Jade Mathias 18h28min de 18 de novembro de 2015 (BRST)
- Anemômetro no Arduíno
- A largura dos pulsos gerados pelo anemômetro serão medidos pelo Arduíno através da função pulseln(). O tempo da largura de pulso retornado pela função pulseln() é medido em microsegundos, portando a velocidade do vento será determinada pela expressão:
velocidadeVento = 2,4 * 106 / larguraPulso
- Conforme o hardware do anemômetro mostrado abaixo, a largura dos pulsos do anemômetro será medida durante o tempo que estiver em nível lógico baixo (LOW), entre dois fechamentos de contato.
--Evandro.cantu (discussão) 22h16min de 17 de abril de 2016 (BRT)
Hardware para chaves do pluviômetro e anemômetro
Circuito para conectar as chaves do pluviômetro e anemômetro nas entradas de Interrupção do Arduíno:
--Evandro.cantu (discussão) 22h17min de 17 de abril de 2016 (BRT)
Sensor de Pressão Barométrica BMP180
Sensor de Pressão Barométrica BMP180
Código para Arduíno
//incluindo biblioteca do sensor de temperatura e pressão
#include <SFE_BMP180.h>
#include <Wire.h>
SFE_BMP180 pressure;
#define ALTITUDE 180.0 // Altitude de Foz do Iguaçu, Parana, Brasil
#define BASETEMPO 10 // define o tempo de repeticao
int Tensao;
float mmChuva = 0;
int contVento = 0;
float velVento;
//rotina da interrupcao 1: pluviometro
void choveu(){
mmChuva = mmChuva + 0.2794;
if(mmChuva > 999)
{mmChuva = mmChuva - 999;}
}
//rotina da interrupcao 0: anemometro
void vento(){
contVento++;
}
void setup()
{
Serial.begin(9600); //define a frequencia
attachInterrupt(1, choveu, RISING); // interrupcao do pluviometro
attachInterrupt(0, vento, RISING); // interrupcao do anemometro
if (pressure.begin())
Serial.println("BMP180 iniciado com sucesso...");
else
{
Serial.println("BMP180 FALHOU...\n\n");
while(1); // nao executa programa.
}
}
//funcao que define e imprime a direcao do vento
String biruta(int Tensao)
{
String direcao;
if(Tensao >= 744 && Tensao <= 805){
Serial.println("Direcao do Vento: Leste");
direcao = "L";}
else if(Tensao >= 346 && Tensao <= 432){
Serial.println("Direcao do Vento: Leste-Norderste");
direcao = "LNE";}
else if(Tensao >= 433 && Tensao <= 529){
Serial.println("Direcao do Vento: Nordeste");
direcao = "NE";}
else if(Tensao >= 75 && Tensao <= 87){
Serial.println("Direcao do Vento: Norte-Nordeste");
direcao = "NNE";}
else if(Tensao >= 88 && Tensao <= 109){
Serial.println("Direcao do Vento: Norte");
direcao = "N";}
else if(Tensao >= 0 && Tensao <= 74){
Serial.println("Direcao do Vento: Norte-Noroeste");
direcao = "NNO";}
else if(Tensao >= 156 && Tensao <= 213){
Serial.println("Direcao do Vento: Noroeste");
direcao = "NO";}
else if(Tensao >= 110 && Tensao <= 155){
Serial.println("Direcao do Vento: Oeste-Noroeste");
direcao = "ONO";}
else if(Tensao >= 265 && Tensao <= 345){
Serial.println("Direcao do Vento: Oeste");
direcao = "O";}
else if(Tensao >= 214 && Tensao <= 264){
Serial.println("Direcao do Vento: Oeste-Sudoeste");
direcao = "OSO";}
else if(Tensao >= 615 && Tensao <= 665){
Serial.println("Direcao do Vento: Sudoeste");
direcao = "SO";}
else if(Tensao >= 530 && Tensao <= 614){
Serial.println("Direcao do Vento: Sul-Sudoeste");
direcao = "SSO";}
else if(Tensao >= 886 && Tensao <= 961){
Serial.println("Direcao do Vento: Sul");
direcao = "S";}
else if(Tensao >= 806 && Tensao <= 885){
Serial.println("Direcao do Vento: Sul-Sudeste");
direcao = "SSE";}
else if(Tensao >= 962 && Tensao <= 1023){
Serial.println("Direcao do Vento: Sudeste");
direcao = "SE";}
else if(Tensao >= 666 && Tensao <= 743){
Serial.println("Direcao do Vento: Leste-Sudeste");
direcao = "LSE";}
else
Serial.println("[ Fora de Leitura!!! ]");
return direcao;
}
//funcao que define altitude, pressao e temperatura
void altitudeEPressao()
{
char status;
double T,P,p0,a;
Serial.println();
Serial.print("Altitude: ");
Serial.print(ALTITUDE,0);
Serial.println(" metros, ");
status = pressure.startTemperature();
if (status != 0)
{
delay(status);
status = pressure.getTemperature(T);
if (status != 0)
{
Serial.print("Temperatura: ");
Serial.print(T,2);
Serial.println(" °C, ");
status = pressure.startPressure(3);
if (status != 0)
{
delay(status);
status = pressure.getPressure(P,T);
if (status != 0)
{
Serial.print("Pressao Absoluta: ");
Serial.print(P,2);
Serial.println(" mbar: ");
p0 = pressure.sealevel(P,ALTITUDE); // altitude em 180m - Foz do Iguaçu
Serial.print("Pressao Relativa(Nivel do Mar): ");
Serial.print(p0,2);
Serial.println(" mbar: ");
a = pressure.altitude(P,p0);
Serial.print("Altitude Computada: ");
Serial.print(a,0);
Serial.println(" metros: ");
}
else Serial.println("erro na recuperacao da medida da pressao \n");
}
else Serial.println("erro na inicilizacao da medida da pressao\n");
}
else Serial.println("erro na recuperacao da medida da temperatura\n");
}
else Serial.println("erro na inicilizacao da medida da temperatura\n");
}
//repeticao que imprime as informacoes do programa ao usuario
void loop()
{
velVento = (contVento / BASETEMPO) * 2.4;
Tensao = analogRead(A0); //variavel tensao recebe valor digital do dispositivo de direcao de vento
Serial.print("Chuva acumalada (mm): ");
Serial.println(mmChuv1000a);
Serial.print("Velocidade do Vento (km/h): ");
Serial.println(velVento);
biruta(Tensao);
altitudeEPressao();
contVento = 0;
Serial.println("");
// PARA MODIFICAR O DELAY MODIFICAR A VARIAVEL "BASETEMPO"
// NO CABECARIO DO PROGRAMA
delay(BASETEMPO*1000); //Tempo entre as leituras em ms
}
--Jade Mathias 17h47min de 2 de dezembro de 2015 (BRST) 1000
Formato CSV dos dados
Os dados lidos pelos sensores da estação hidrometeorológica serão concatenados em uma string em formato CSV e transmitidos de forma serial para o servidor que armazenará os dados, utilizando os módulos Xbee.
Id da estação; direçao do vento; chuva acumulada; velocidade do vento; temperatura; pressao atmosferica 1;N;0.5;13.3;32.8;990 1;S;0.7;17.2;30;1020 1;NO;0.4;12;19.7;980 1;NE;0.54;13.6;42.3;900
--Jade Mathias 17h59min de 9 de dezembro de 2015 (BRST)
Material técnico de referência
Materiais na Wiki
Tutoriais no Site Oficial do Arduíno
- Bibliotecas e exemplos
- Ethernet e Cartão SD:
- Pressão Barométrica Web Server
- Guardar dados de sensores no cartão SD
- Ler e escrever dados em arquivos no cartão SD
- Criar e remover arquivos no cartão SD
Referências
- ↑ Weather Meters https://www.sparkfun.com/products/8942
- ↑ Manual Weather Sensor Assembly https://www.sparkfun.com/datasheets/Sensors/Weather/Weather%20Sensor%20Assembly..pdf