Comment faire pour convertir les degrés de la direction du vent en coordonnées d'une boussole

par Jacob Davis | Mis à jour le : 01/06/2016 | Commentaires : 2

Les thèmes principaux du Blog


Recherche sur le Blog


Langages du blog

English
Français (French)


Abonnez-vous au Blog

Recevez un courriel lorsqu'un nouvel article est posté. Choisissez les sujets qui vous intéressent le plus.


Entrez votre adresse courriel :



Suggérer un article

Y a-t-il un sujet que vous souhaiteriez nous voir aborder ? Laissez-nous un message.

Leave this field empty

Girouette

Vous sentez-vous perdu lorsque vos données de direction du vent sont répertoriées en degrés ? Par exemple, pouvez-vous imaginer dans votre esprit quelle direction représente 195 degrés ? Serait-il plus facile si votre centrale d'acquisition de données pouvait mettre vos données en fonctions des directions de la boussole ? Dans cet article, je vais partager avec vous une méthode facile pour convertir vos données de direction de vent de degrés en directions de la boussole à l'aide du langage de programmation CRBasic.

Direction de la boussole et degrés

Si vous êtes comme moi, qui considère que les directions d'une boussole (nord, sud, est et ouest) sont plus faciles à comprendre que les degrés. Par exemple, si quelqu'un me demande pour obtenir sa direction, je ne dis pas, "voyage de cinq blocs sur un cap de 270 degrés." Il est plus facile pour moi, si je dis à la place, "Va en direction de l'Ouest pendant cinq blocs. "

De même, quand il vient à décrire la direction du vent, les points cardinaux ont tendance à être plus facile à comprendre que les degrés. Les météorologues utilisent les points cardinaux dans leurs prévisions météorologiques parce qu'il est plus faciles pour les gens de le visualiser et de s'en souvenir. Par exemple, un météorologue peut dire: «La tempête va souffler d'ouest en Est."

En termes de direction du vent, il est à la fois heureux et malheureux que les centrales de mesure ne "pense" pas comme nous les humains.

  • Heureusement, nos centrales d'acquisition de données échantillonnent nos capteurs, convertissent les mesures en signaux électriques, et stockent les données en degrés, qui sont plus précises que les directions de la boussole.
  • Heureusement, nous pouvons donner un sens à partir de données de direction du vent qui sont en degrés.

L'utilisation d'un tableau indexé

Pour donner un sens à des données de direction du vent qui sont en degrés, nous allons commencer par une conversion. Pour convertir des degrés en directions de boussole, je divise d'abord la boussole en 16 secteurs de 22,5 degrés chacune. Les secteurs sont comme des tranches de gâteau, centrées sur les points cardinaux.

Astuce : Si vous souhaitez utiliser huit secteurs au lieu de 16, avec une table de consultation plus courte, diviser par 45 degrés au lieu de 22,5 degrés.

Pour faire la conversion, j'utilise un tableau indexé comme une table de consultation à la place d'une instruction Case. Je préfère le tableau indexé car le code est plus rapide et plus compact que le code d'une instruction Case. En outre, un tableau indexé fonctionne bien pour les données régulièrement espacées, d'un certain nombre de degrés. (Les données sont des catégories de numéros.) En revanche, une instruction Case est un meilleur choix pour les applications où vos données ne sont pas régulièrement espacées, comme la détermination des plages de température qui décrivent l'eau chaude, tiède ou froide. ("Chaud" et les valeurs "froid" seraient de plus grands données, et "très chaud" serait une donnée plus petite.)

Because north on a compass could be described as 0 degrees or 360 degrees, we have to use two data bins for it. This means that, for our 16 compass sectors, we actually need 17 values in our lookup table. The first value and last value are both north. The table below shows the 17 values with the 16 different compass sectors:

Parce que le nord sur une boussole peut être décrit comme 0 degré ou 360 degrés, nous devons utiliser deux bacs de données pour cela. Cela signifie que, pour nos 16 secteurs de la boussole, nous avons réellement besoin de 17 valeurs dans notre table de consultation. La première valeur et la dernière valeur sont à la fois au nord. Le tableau ci-dessous présente les 17 valeurs avec les 16 secteurs de la boussole :

Valeurs Secteurs de la boussole

1

N

2

NNE

3

NE

4

ENE

5

E

6

ESE

7

SE

8

SSE

9

S

10

SSW

11

SW

12

WSW

13

W

14

WNW

15

NW

16

NNW

17

N

Vous pouvez utiliser un tableau dans votre programme de centrale d'acquisition de données comme une table de consultation. Une façon simple de remplir le tableau est d'attribuer des valeurs initiales. Soyez sûr que vous utilisez le type String et placez chaque valeur entre guillemets. La ligne de code est un peu longue, mais elle est assez simple:

Dim Sector(17) As String * 3 = {"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW","N"}

Exécution de la division modulo

Maintenant nous avons besoin de convertir la direction du vent en des valeurs entières, qui correspondent avec les valeurs de l'indice 17 au sein de notre tableau.

Pour limiter la direction du vent à 360 degrés, il faut effectuer une opération de modulo pour trouver le reste de la division du total des degrés par 360.

Par exemple, si nous travaillons avec 405 degrés, on divise cette valeur par 360. Cela nous donne 1 avec un reste (ou module) de 45:

  • 405 / 360 = 1, reste 45
  • Ceci peut être écrit 405 MOD 360 = 45.

Dans cet exemple, le reste de 45 degrés est ce qui doit être converti en une direction de boussole.

Note : Bien que cette étape est inutile avec la plupart des capteurs, il ne pose pas de problème si vous l'incluez dans vos programmes.

Correspondance avec le tableau

Si l'on divise la direction du vent de 22,5 degrés (pour chaque secteur), nous obtenons des chiffres allant de 0 à 16. Parce que les étiquettes stockées dans le tableau sont indexés 1-17, il faut ajouter 1 pour correspondre à la gamme :

Index = WindDir MOD 360
Index = Round(Index/ 22.5,0)+1
CompassDir = Sector(Index)

Dans notre exemple précédent, si l'on prend le reste de 45 degrés et le diviser par 22,5, nous obtenons un résultat de 2:

  • 45 / 22.5 = 2

Si nous ajoutons 1, le résultat est 3 :

  • 2 + 1 = 3

Dans notre tableau la valeur “3” correspond à la direction “NE.”

Donc, notre reste de 45 degrés est converti en une direction de nord-est.

Nous pouvons placer la fonction mathématique entière dans le paramètre index du tableau. Les parenthèses forcent l'ordre d'opération de l'intérieur :

CompassDir = Sector(Round((WindDir MOD 360)/ 22.5,0)+1)

Ecriture du programme

Rassembler les morceaux ensembles, nous obtenons le programme de la centrale de mesure suivant, ajouter simplement vos mesures et des tableaux de données.

'Declare Public Variables
Public WindDir As Float
Units WindDir = degrees
Dim Sector(17) As String * 3 = {"N","NNE","NE","ENE","E","ESE","SE","SSE","S","SSW","SW","WSW","W","WNW","NW","NNW","N"}
Public CompassDir As String * 3
 
'Main Program
BeginProg
	Scan (1,Sec,0,0)
		'Add wind sensor measurement here
		CompassDir = Sector(Round((WindDir MOD 360)/ 22.5,0)+1) 'Rounds the wind direction out into 17 sectors. Sectors 1 and 17 are both N.
	NextScan
EndProg

Idée d'application 

Dans cet article, je l'espère je vous ai aidé à trouver votre chemin afin de mieux comprendre, d'utiliser et de partager vos données de direction du vent à l'aide du code de programmation CRBasic. Si vous avez l'un de nos produits logiciel RTMC, ce logiciel est capable de prendre vos données de direction du vent et directement convertir les degrés en un affichage de la boussole.

Sentez-vous libre de partager des situations où vous voulez représenter la direction du vent à l'aide des points cardinaux. Pouvez-vous penser à des cas similaires avec des données régulièrement espacées où l'on pourrait utiliser cette méthode? Diffusez vos idées ci-dessous.

Traduction du bureau France de Campbell Scientific


Partagez cet article



A propos de l'auteur

jacob davis Jacob Davis est un ingénieur qui s'occupe du support technique à la clientèle et de la mise en œuvre chez Campbell Scientific, Inc. Il fournit un soutien technique aux clients et aide à l'intégration des systèmes. Ses spécialités comprennent les communications séries et la programmation avancée des centrales de meure. Jacob possède une maîtrise en hydrologie et a travaillé sur de grands projets d'irrigation avant de venir chez Campbell Scientific, Inc.

Voir tous les articles de cet auteur.


Commentaires

Thiago | 10/31/2018 at 01:11 PM

Nice post.

How do I write the calculate compass data into a Table?

I need to calculate a 30 minute average data from wind sensor e write the compass data from it in a table. I don´t know how to do it.

JDavis | 10/31/2018 at 01:29 PM

The compass sector, being a string variable, can only be saved to a table with the Sample instruction. The difficulty, in your case is the vector average of the wind must be calculated first. It is possible to read values back out of a data table. However, you can't save that compass sector to the same table.

We have worked around limitations before by making a table with just the Windvector. You then read that value back out, and can save it with other data in your main table. GetRecord is the easiest way to read values back out of a table.

Please log in or register to comment.