Comment mesurer le vent? (partie 2)

Comment mesurer le vent? (partie 2)

La semaine dernière, nous avons construit un anémomètre permettant de mesurer la vitesse du vent par USB. Cette semaine, on vous propose de s'attaquer à l'instrument de mesure complémentaire: une girouette permettant de connaître la direction du vent. Toujours par USB, sinon c'est pas du jeu.





Une girouette est un dispositif orientable, dont la forme est conçue pour qu'il se place spontanément dans le lit du vent. En gros, c'est une espèce de flèche montée sur un axe, qui bouge toute seule. Déterminer la direction du vent consiste donc à déterminer la position absolue de l'axe sur laquelle elle montée.

On va utiliser une méthode optique
On va utiliser une méthode optique


Comme pour l'anémomètre, on a va recourir à une méthode optique, un disque perforé qui tourne entre des LEDs et des photo-transistors. Les photo-transistors sont reliés aux entrées d'un Yocto-Knob. A chaque fois qu'un photo-transistor est éclairé par la LED qui se trouve en face, il devient passant. Cet état passant est détectable par le Yocto-Knob. On associe le bit 1 à l'état passant et le bit 0 à l'état bloquant de chaque photo-transistor. Sachant qu'un Yocto-Knob a cinq entrées, on peut encoder 25 = 32 positions.

Il s'agit donc de disposer des photo-transistors et les trous sur le disque de manière à encoder un maximum de positions dans un minimum de place. Il se trouve q'un certain Bruce Spedding a imaginé une méthode, plus tard améliorée par Alain P. Hiltgen et Kenneth G. Paterson, appelée "Single Track Gray Code". Cette méthode présente deux caractéristiques remarquables: d'une part les codes générés ne diffèrent que d'un bit d'une position à l'autre, c'est le principe des codes de Gray, qui limitent ainsi les risques d'erreur de lecture pour les positions intermédiaires. D'autre part les capteurs sont positionnés sur la même piste circulaire, ce qui permet de construire des encodeurs très compacts. Le prix à payer est que le nombre de positions codables est plus petit que 2n. Par exemple, avec 5 photo-transistors, on ne peut encoder que 30 positions, ce qui donne une précision de 12°, largement suffisant quand il s'agit de déterminer la direction du vent.

Fonctionnement de l'encodage optique utilisé (Single Track Grey Code)
Fonctionnement de l'encodage optique utilisé (Single Track Grey Code)



Câblage
Le câblage est assez semblable à celui de l'anémomètre, si ce n'est qu'il y a maintenant 5 photo-transistors et 5 LEDs. On s'est rendu compte que les LEDs utilisées dans l'anémomètre n'étaient plus fabriquées, du coup on a choisi des L-7104SEC-J3 de Kingbright couplées à des résistances de 200 Ω. Ces LEDs sont toujours alimentées par le 5V USB. Les photo-transistors sont toujours des SFH 310-2/3.

Câblage des LEDs et des photo-transistors
Câblage des LEDs et des photo-transistors


Cette fois, il faut sortir sept fils de l'encodeur. Vous serez peut-être tenté de placer le Yocto-Knob dans la girouette et de ne tirer qu'un câble USB, mais il vaut quand même mieux garder le Yocto-Knob à l'intérieur au chaud et à l'abri de l'humidité.

Construction
Cette fois encore, on a utilisé notre imprimante 3D pour fabriquer les pièces de notre girouette. On a aussi utilisé la même technique d'assemblage à base d'inserts filetés posés au fer à souder.

Les différentes pièces sont munies d'inserts filetés ce qui permet de les visser ensemble
Les différentes pièces sont munies d'inserts filetés ce qui permet de les visser ensemble



La première chose à faire, c'est le câblage des photo-transistors, des résistances et des LEDs. C'est un peu délicat vu la taille de l'ensemble, mais c'est faisable. Une fois que tout est soudé, les connections sont noyées dans la colle chaude pour limiter les problèmes d'humidité (vérifiez quand même que ça marche avant :-)

Connection des LEDs et des photo-transistors
Connection des LEDs et des photo-transistors

Les mêmes, en vrai
Les mêmes, en vrai


Les pièces du corps s'emboîtent les unes dans les autres, on utilise les mêmes roulements à billes inoxydables que pour l'anémomètre.

Assemblage du corps
Assemblage du corps

Test des LEDs
Test des LEDs



L'assemblage de la flèche n'est pas très compliqué, la barre horizontale est constituée de deux parties collées ensembles, emprisonnant ainsi la dérive. La flèche est bloquée sur l'axe grâce à des vis sans tête. Pour éviter que les mesures ne soient faussées dans le cas d'une installation pas parfaitement horizontale de la girouette, la flèche est équilibrée à l'aide de rondelles métalliques.

Assemblage de la flèche, l'équilibrage est fait avec des rondelles métalliques
Assemblage de la flèche, l'équilibrage est fait avec des rondelles métalliques

La flèche complète
La flèche complète

Ok, le hard est terminé, y'a plus qu'à faire le soft
Ok, le hard est terminé, y'a plus qu'à faire le soft


Programmation
La programmation est à peine plus complexe que pour l'anémomètre. A intervalle régulier, on vérifie l'état de chaque entrée du Yocto-Knob à l'aide de la fonction get_isPressed(). En fonction de l'état de chaque entrée, on construit un entier qui sert d'index pour trouver l'orientation dans une table de lookup. Voila un exemple en C#.

// orientation lookup table , 0 and 31srt indexes are invalid
int[] table = { -1,  0, 72, 12,144,132, 84,120,
               216,348,204, 24,156,168,192,180,
               288,300, 60, 48,276,312, 96,108,
               228,336,240, 36,264,324,252, -1};

// retrieves the anButtons functions, this assumes inputs
// are named "bit0" .. "bit4"
YAnButton[] bits = new YAnButton[5];
for (int i = 0; i < 5; i++)
  bits[i] = YAnButton.FindAnButton("bit" + i.ToString());

while (true)
  { int index= 0;
    // checks for device presence
    if (bits[0].isOnline())
      { // builds the index
        for (int i = 0; i < 5; i++)
          if (bits[i].get_isPressed() == YAnButton.ISPRESSED_TRUE)
            index |= (1 << i);
        // displays orientation using table lookup
        Console.WriteLine(table[index].ToString());
       } else Console.WriteLine("offline");
    YAPI.Sleep(1000, ref errmsg); // waits for 1 sec
  }


Assurez vous que les états pressed/released des entrées sont bien détectés correctement, au besoin calibrez les entrées avec le Virtual Hub.

Cette girouette n'a pas de référence absolue pour le nord, vous pouvez soit l'installer en l'orientant de manière à ce qu'elle indique 0° quand la flèche est face au nord, ou alors vous pouvez simplement l'installer au hasard et ajouter un offset dans le calcul de l'orientation pour retrouver des valeurs correctes.

Conclusion
Vous savez maintenant comment vous fabriquer les instruments nécessaires pour mesurer la force et l'orientation du vent avec des modules Yoctopuce. Un petit conseil cependant, le Single Track Gray Code a fait l'objet d'une demande de brevet en 1994. Ce n'est pas un problème pour vous fabriquer votre girouette personnelle, mais si vous comptez utiliser ce système pour fabriquer un objet commercialisable, renseignez-vous avant.

Votre propre girouette USB au fond du jardin, cool, non ?
Votre propre girouette USB au fond du jardin, cool, non ?


Vous pourrez télécharger les fichiers nécessaires à l'impression 3D de cette girouette sur Thingiverse.

Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.