Anemômetro

Licença do Software, GPL V3 quando cabível. Diagramas, Imagens e explicações Creative Commons - BY-SA. Amostras de dados coletados dedicados ao domínio público.
Autores do trabalho: Béuren F. Bechlin, Lorenzo Chaves, Jeferson Gerard e Renan Bohrer.

Com a finalidade de integrar a Estação Meteorológica Modular, o anemômetro realiza a medição da velocidade do vento e do sentido do vento com o Arduíno,uma placa de prototipagem eletrônica livre. Esse equipamento utiliza-se eletronicamente de um sistema de interruptor chamado switch reed, que contém duas plaquinhas de ferro separadas que quando encostadas mandam um sinal para o arduino, conseguindo assim a fácil utilização com as placas arduino.

O anemômetro é composto por duas partes, o sensor de velocidade do vento que utiliza um reed switch e o sensor de direção do vento que utiliza um divisor de tensão para indicar sua direção.


Esta imagem mostra o sensor de velocidade do vento com suas três pás.


A imagem acima mostra o sensor de direção do vento.

O código usado para funcionamento é a escrita em C. Pode ser encontrado aqui e foi baseado no código encontrado no site AIR

  1 /*
  2 **********************************************************
  3 *        ANEMÔMETRO E PLUVIÔMETRO - CTA                  *
  4 **********************************************************
  5  AUTOR: Béuren F. Bechlin
  6 
  7  O algoritmo desenvolvido para a operação de produto com-
  8 prado na Sparkfun.
  9 
 10 https://www.sparkfun.com/products/8942
 11 
 12 A eletrônica necessária para o projeto está documentada em
 13 um arquivo que deve estar juntamente a esse arquivo.
 14 
 15 Esse algoritmo leva base o algoritmo que pode ser encontra-
 16 do no seguinte site:
 17 
 18 http://air.imag.fr/mediawiki/index.php/SEN-08942
 19 
 20        +-------------------------------------------+
 21        |   Centro de Tecnologia Acadêmica - UFRGS  |
 22        |         http://cta.if.ufrgs.br            |
 23        +-------------------------------------------+
 24 
 25  Este arquivo fonte faz parte do Pluviometro e Anemômetro
 26 e está sobre as seguinte/s licença/s:
 27 * GPL v3
 28 */
 29 
 30 // CONSTANTES DE CALIBRAÇÃO
 31 // 1 rev/segundo = 1.492 mph = 2.40114125 kph
 32 #define CTE_CAL_ANEMOMETRO 2.4011
 33 // 1 batida = 0.2794 mm
 34 #define CTE_CAL_PLUVIOMETRO 0.2794
 35 
 36 // Período entre as medidas em milisegundo
 37 #define PERIODO_ANEMOMETRO  5000
 38 #define PERIODO_DIR_VENTO   5000
 39 #define PERIODO_PLUVIOMETRO  5000
 40 
 41 // Pinos para conexão com Arduino
 42 #define ANEMOMETRO_PIN   2     // Digital 2
 43 #define PLUVIOMETRO_PIN  3     // Digital 3
 44 #define DIR_VENTO_PIN    5     // Analog 5
 45 
 46 // Variáveis para incrementação
 47 volatile int numRevsAnemometro = 0;
 48 volatile int numBatidasBascula = 0;
 49 
 50 // Variáveis para realização do polling
 51 unsigned long proximaMedidaAnemometro = 0;
 52 unsigned long proximaMedidaPluviometro = 0;
 53 unsigned long proximaMedidaDirVento = 0;
 54 unsigned long tempo = 0;
 55 
 56 // Direção do vento, valores de leitura para diferenciar cada direção:
 57 // int adc[8] = {26, 45, 77, 118, 161, 196, 220, 256};
 58 int adc[8] = {104, 180, 308, 472, 644, 784, 880, 1024};
 59 // Relação entre os valores analógicos lidos e o que eles representam
 60 // Para facilitar pode-se usar a biblioteca String
 61 char *direcoes[8] = {"W","NW","N","SW","NE","S","SE","E"};
 62 int direcaoInicial = 0;
 63 
 64 void setup() {
 65    Serial.begin(9600);
 66    pinMode(ANEMOMETRO_PIN, INPUT);
 67    pinMode(PLUVIOMETRO_PIN, INPUT);
 68    digitalWrite(ANEMOMETRO_PIN, HIGH);
 69    digitalWrite(PLUVIOMETRO_PIN, HIGH);
 70    attachInterrupt(0, contadorAnemometro, FALLING);
 71    attachInterrupt(1, contadorPluviometro, FALLING);
 72 }
 73 
 74 void loop() {
 75     // Realizando o polling
 76    tempo = millis();
 77 
 78    if (tempo >= proximaMedidaAnemometro) {
 79       Serial.print("Vento (km/h): ");Serial.println(calcVelocidadeVento(), 2);
 80       proximaMedidaAnemometro = tempo + PERIODO_ANEMOMETRO;
 81    }
 82    if (tempo >= proximaMedidaDirVento) {
 83       Serial.print("Direcao: ");Serial.println(calcDirecaoVento());
 84       proximaMedidaDirVento = tempo + PERIODO_DIR_VENTO;
 85    }
 86    if (tempo >= proximaMedidaPluviometro) {
 87       Serial.print("Chuva (mm): ");Serial.println(calcQuantidadeChuva(), 3);
 88       proximaMedidaPluviometro = tempo + PERIODO_PLUVIOMETRO;
 89    }
 90 }
 91 
 92 /*
 93     Funções de callback de interrupção
 94 */
 95 void contadorAnemometro() {
 96    numRevsAnemometro++;
 97 }
 98 
 99 void contadorPluviometro() {
100    numBatidasBascula++;
101 }
102 
103 double calcVelocidadeVento(){
104    double velocidadeMedia;
105 
106    velocidadeMedia = numRevsAnemometro;
107    velocidadeMedia *= 1000.0*CTE_CAL_ANEMOMETRO;
108    velocidadeMedia /= PERIODO_ANEMOMETRO;
109 
110    // Resetando contador de pulsos do anemometro
111    numRevsAnemometro = 0;
112    return velocidadeMedia;
113 }
114 
115 char* calcDirecaoVento() {
116    int valor, x;
117    valor = analogRead(DIR_VENTO_PIN);
118 
119    for (x = 0; x < 8; x++) {
120       if (adc[x] >= valor)
121          break;
122    }
123 
124    // Ajustando direção inicial
125    x = (x + direcaoInicial) % 8;
126    return direcoes[x];
127 }
128 
129 double calcQuantidadeChuva(){
130     double volumeMedio;
131 
132     volumeMedio = numBatidasBascula;
133     volumeMedio *= 1000.0*CTE_CAL_PLUVIOMETRO;
134     volumeMedio /= PERIODO_PLUVIOMETRO;
135 
136     numBatidasBascula = 0;
137     return volumeMedio;
138 }
139 

O sensor de direção do vento conta com 8 switchs, sendo 4 apontando para os pontos cardeais e 4 apontando para os pontos colaterais da rosa dos ventos. Cada um dos 8 switchs conta com um resistor de valor exato para cada direção e o Arduíno lê valores de 0 a 1024 no pino analógico, ou seja, cada direção tem um valor de 0 a 1024 sem se repetir.

Direcão Resistência Angulo °
Norte 33k 0
Sul 3,9k 180
Leste 1k 270
Oeste 120k 90
Noroeste 64,9k 45
Nordeste 8,2k 315
Sudeste 2,2k 225
Sudoeste 16k 135

A imagem mostra os 8 switchs apontando para as suas respectivas posições e com seus respectivos resistores.

A seguir temos a montagem do anemômetro como também o pluviômetro ao Arduíno com a protoboard.

C_digo_Anemometro_ino.ino (2.8 kB) Jeferson Silveira, 15/10/2014 16:18

switch-direção.do.vento.jpg (1 MB) Jeferson Silveira, 16/10/2014 14:50

Anemômetro.fz.png (46.6 kB) Jeferson Silveira, 16/10/2014 16:57

Direção.do.vento_switch.png (77.4 kB) Jeferson Silveira, 16/10/2014 17:12

cata-vento.png (49.5 kB) Jeferson Silveira, 30/10/2014 15:34

Anemometro.png (64.3 kB) Jeferson Silveira, 30/10/2014 15:34

pluv_ane.ino (3.8 kB) Béuren Bechlin, 21/01/2016 17:28

pluv_ane.png (235.1 kB) Béuren Bechlin, 21/01/2016 17:28

pluv_ane.redimensionado.png - Imagem com uma resolução menor para se adaptar melhor a wiki (145.5 kB) Béuren Bechlin, 21/01/2016 17:47