Um ano atrás, eu
descrito estação meteorológica com a velocidade e direção do calibre de vento. Com base na experiência de duas temporadas operacionais, foram feitas algumas alterações e melhorias, as quais são parcialmente descritas lá em acréscimos ao texto principal.
Uma dessas mudanças diz respeito ao cálculo da direção média do vento. Para minha surpresa, não encontrei nada sensato sobre esse tópico na Web, apenas em um dos fóruns as pessoas quase pensaram no método de cálculo da média de vetores (mas apenas quase não resolveram o problema em termos gerais). Portanto, achei útil colocar este tópico em uma publicação separada - de repente alguém mais será útil. O método pode ser usado para calcular a média de qualquer quantidade vetorial, não apenas vento ou corrente.
Observe que o método canônico para realizar medições meteorológicas do vento é o seguinte: calcule a média do vetor (ou seja, velocidade e direção) durante 10 minutos (na Rússia e na maioria dos países do mundo é aceito dessa maneira, dizem eles nos EUA e em outros países de maneira diferente). Nesse caso, as medições são realizadas a uma altura de 10 m da superfície da Terra. Para garantir tudo isso sob condições de joelho é bastante difícil: não se pode alcançar uma altura de 10 m em espaço aberto (não construa uma torre especial, longe de casas e árvores que distorcem o fluxo do vento), e a temperatura com umidade deve, pelo contrário, ser medida à sombra e próxima da superfície. O sensor portátil é transformado de um dispositivo compacto em um sistema de medição inteiro (veja a foto do território de uma estação meteorológica na cidade de Kirov).

E o resultado - em média 10 minutos - será pouco informativo. Perto da superfície, o vento é muito mais tempestuoso do que em altitude, em 10 minutos pode mudar de velocidade e direção vinte vezes, e as informações sobre essas rajadas são muito mais informativas para a pessoa média do que o valor médio. Deixe-me lembrá-lo de que o sensor de velocidade aqui mostra o valor máximo de quatro medições por ciclo de 8 segundos, e essa foi a escolha certa (na verdade, temos um sensor de ondulação em vez do sensor de velocidade médio).
Mas o cata-vento acabou sendo mais sombrio que o sensor de velocidade. De acordo com o algoritmo inicial da minha estação meteorológica (que foi selecionada com base na economia de energia máxima possível), a direção foi medida uma vez por ciclo, ou seja, mesmo as pulsações não funcionavam: havia amostras aleatórias do processo contínuo de suspensão do cata-vento com uma frequência muito maior que uma vez a cada 8 e mais de 16 segundos.
Portanto, decidiu-se calcular a média da direção do vetor de velocidade por ciclo, fazendo medições a cada dois segundos e calculando a média. E o problema não é que ele possa ser resolvido com um meio chute - os valores de direção não formam uma matriz uniforme de números que podem ser adicionados e divididos diretamente (uma palavra é um vetor, não um escalar besteira). Normalmente, um exemplo é dado com valores de 1 grau e 359 graus: é fácil descobrir que, em média, será exatamente 360 (ou 0, sem diferença), mas a aritmética comum fornecerá o número 180 graus.
Não há necessidade de inventar nada - tudo já foi inventado antes de você. O problema é resolvido pelo método de média vetorial, bem conhecido por aqueles que lidavam com medições de ventos ou correntes. O método é essencialmente muito simples: como não podemos calcular a média direta dos ângulos, vamos calcular a média das projeções do vetor no eixo de coordenadas, que, por definição, é um valor escalar, ou seja, pode ser submetido à aritmética comum sem questionar.
As projeções do vetor de vento atual W '(o apóstrofo desempenha o papel de um sobrescrito) no eixo X e Y são wx = Wa • cos (α) e wy = Wa • sin (α), onde Wa é o módulo do vetor (valor da velocidade) e α - o valor do ângulo entre o vetor e o eixo de coordenadas zero. Se calcularmos a média desses valores das projeções e depois convertermos as médias em um vetor, obteremos o valor real da velocidade e direção médias do vento.
Nota para particularmente corrosivoPara uma média completamente correta dessa maneira, é necessário que o valor de Wa (valor da velocidade) seja medido estritamente simultaneamente com o valor do ângulo. Na prática, isso deve ser monitorado apenas se os períodos de flutuações significativas na amplitude do fluxo forem menores ou comparáveis ao tempo das medições. Para o vento (e para quase todos os casos do fluxo natural da água), geralmente não é necessário monitorar, uma vez que o tempo de medição para nós é de no máximo uma fração de segundo e pulsações significativas de vento, é claro, duram mais. Podemos negligenciar as homogeneidades de alta frequência do fluxo, porque elas não afetam nada: a inércia de corpos físicos reais (incluindo sensores) é muito maior do que essas inomogeneidades, e simplesmente não as sentimos - um pedaço de papel tremerá, mas nada mais. Em casos extremos, eles aparecerão como um pequeno ruído aleatório que não afeta significativamente a qualidade das medições.
Esse método maravilhoso (vamos chamá-lo de média do vetor completo) tem uma desvantagem cardinal do ponto de vista prático: na ausência de um sujeito de medição (ou seja, quando há uma calma completa, o que é um caso bastante comum), ele fornece um resultado matematicamente incorreto: como a velocidade do vento é zero, então e ambas as projeções são iguais a zero, o que não pode ser (uma vez que pecado e cos são funções complementares). Mais precisamente, pode ser, mas é fundamentalmente impossível extrair informações dessa situação. O que você deseja mostrar no visor? Para ser sincero, ainda não sei a maneira correta de contornar essa situação (nos medidores de vazão que projetei uma vez, os ciclos médios eram horas e acreditava-se que pelo menos alguma agitação ocorreria).
Mas, no nosso caso, felizmente a tarefa é mais fácil - não precisamos calcular a velocidade média e podemos fazer projeções únicas do vetor, sem levar em conta a magnitude de seu módulo. Em outras palavras, pode-se operar com senos puros e cossenos, que nunca levam zero a ambos de uma vez: mesmo quando não há vento, um cata-vento congelado no setor imobiliário mostra alguma direção. Chamamos esse método de média simplificada de vetor de uma direção (talvez ele tenha algum nome oficial, mas não estou ciente).
Agora havia apenas uma dificuldade: transformar os valores médios calculados de projeção novamente no valor do ângulo. Para isso, a função α = arctan (sin (α) / cos (α)) é geralmente usada, mas se calcularmos através das funções trigonométricas inversas, é mais simples usar simplesmente arcos (cos (α)) (ou arcsin (sin (α)), de qualquer maneira) e para complementar esse resultado para obter um círculo completo (ou seja, de 0 a 359 graus), analisando os sinais das projeções, você ainda precisa: em todas as situações: todas as funções inversas fornecem o resultado dentro de um semicírculo (de 0 a 180 ou de -90 a +90). (Veja UPD sobre isso no final do artigo.)
Formalizamos tudo isso em um algoritmo real (com referência ao Arduino). Para começar, leremos as indicações de direção, não a cada ciclo, mas a cada medição (após o valor da frequência do anemômetro). Converteremos o resultado no código Gray (em nosso país, foi designado como wind_Gray do tipo byte, consulte
a publicação ) em um código binário regular e, como a frequência do anemômetro, o colocaremos em uma matriz global, que declararemos como wDirAvr [4], onde 4 é o número de medições no ciclo. Não pintaremos a conversão do código Gray de quatro dígitos em código binário - isso pode ser feito de várias maneiras, a critério do programador e é descrito em qualquer referência.
Esse código binário assumirá valores de 0 a 15, e concordamos que contaremos os ângulos, não como geógrafos / topógrafos / navegadores deslocados, mas como pessoas normais que estudaram trigonometria na escola - no sentido anti-horário. Ou seja, se o norte corresponde ao valor zero, então 90 graus não é o leste, como nos "deslocados", mas o oeste. Como temos 16 gradações de direção, precisamos multiplicar o valor do código por 22,5 (360/16) para obter a direção em graus comuns do arco.
Agora, o algoritmo real da média simplificada de vetores da direção a partir de 4 valores de código:
. . . . . float wSin=0; // sin float wCos=0; // cos float wind_Rad; // for (byte i=0; i<4; i++){ wind_Rad= ((float(wDirAvr[i])*22.5)*M_PI/180); // wSin=wSin+sin(wind_Rad);// sin wCos=wCos+cos(wind_Rad);// cos } // wSin=wSin/4;// sin – , wCos=wCos/4; // cos wind_Rad = acos(wCos); // arccos if (wSin<0) wind_Rad=2*M_PI-wind_Rad; // sin int wind_G = round ((wind_Rad*180/M_PI)/22.5); // 0-15 . . . . .
A última linha que convertemos a média, expressa em radianos, para a média, expressa em nosso código de 0 a 15. Você pode convertê-lo novamente em código Gray, e nem precisa alterar o programa no módulo principal para exibir a direção.
Aqui, de fato, está todo o algoritmo. Eu estava com medo de que o cálculo de cossenos-arcosinos desacelerasse o fraco (nos tempos de 32 bits de hoje) do controlador Arduino, mas nada aconteceu: ele engoliu o código sem sequer piscar ... um LED, provavelmente.
UPD : Para o autor, o algoritmo funciona neste formulário por vários meses sem falhas. No entanto, os comentaristas me levaram a um erro possível, embora extremamente improvável na prática: se os dados contiverem dois grupos de medições que estão aproximadamente a 180 graus um do outro, próximos ao valor zero do cosseno (ou seja, cerca de 90 e 270 graus), o algoritmo produzirá um erro valor. Para evitá-lo, em vez de acos (), use a função atan2 (wSin, wCos), que imediatamente produz o resultado correto, levando em consideração os sinais seno e cosseno (obrigado
aamonster pela ajuda). A linha na qual o valor médio do wSin é calculado não deve ser comentada e a linha ajustada para o sinal wSin não é necessária. Em vez disso, você precisa inserir a conversão para valores positivos do ângulo (já que atan2 fornece valores de pi a -pi):
if (wind_Rad<0) wind_Rad=2*M_PI+wind_Rad;