Construction d'un anémomètre à base d'un PIC 16F88


Anémomètre

Version: 1.0
Date de création: 23/12/09
Dernière modification: 23/12/09 Téléchargé 3842 fois

Télécharger

Dans le commerce, on trouve rarement des stations météos avec un anémomètre dont le pas de mesure est petit ou alors il faut être prêt à y mettre le prix. C'est pourquoi je me suis lancé dans la réalisation d'un anémomètre à microcontrôleur. Ma formation actuelle d'ingénieur en électronique et informatique industrielle me permet de mener à bien ce genre de petit projet et bien-sûr d'en envisager des beaucoup plus gros pour l'avenir, telle la réalisation complète d'une station météo.
Note: Il s'agit ici d'un des premiers projets que je fais sur microcontrôleur, je mets à disposition gratuitement le code et les ressources nécessaires à cette réalisation. Si vous êtes un professionnel dans le domaine, soyez indulgent. Le code n'est peut-être pas parfaitement commenté ou il ne respecte peut-être pas les standards instaurés en entreprise. De même que le schéma électronique peut aussi être amélioré.

Mon premier projet consiste donc à mesurer la vitesse du vent via un PIC 16F88 et un écran LCD alphanumérique 20*4. A noter que je ne commence pas par le plus facile étant donné que j'ai décidé, pour calculer la vitesse du vent, de mesurer le temps écoulé entre 2 impulsions, ce qui demande une grande précision sur la durée, de l'ordre de la dizaine de microsecondes. Je n'ai pas fabriqué la partie mécanique de l'anémomètre, j'utilise un anémomètre de ma station qui est tombé en panne. L'électronique est morte mais la partie mécanique est intacte, ce qui est parfait puisque moi je n'ai juste besoin que de l'ILS à l'intérieur.
En plus de la vitesse, sera affichée sur l'écran LCD la moyenne sur 10 minutes glissantes avec sa variation, la rafale maximale ainsi que l'heure de cette rafale. Pour le "fun" j'ai aussi ajouté une barre indiquant la vitesse du vent en Beaufort avec sa valeur.
Pour mesurer le calcul de la vitesse du vent, j'utilise bien évidemment la relation suivante: V=D/T.
La dynamique des fluides nous dit que la vitesse du vent est égale à la vitesse du centre des coupelles. En réalité, il faudrait passer sur un banc de test pour obtenir la courbe d'étalonnage donnant la relation entre la vitesse réelle et la fréquence des impulsions obtenues. La vitesse au centre des coupelles s'obtient par la relation suivante: V= 2*Pi*R/T où R est la distance entre l'axe est le centre des coupelles et T le temps écoulé pour effectuer un tour.
Pour la moyenne, j'ai décidé de prendre une valeur toute les 2s, de faire la moyenne sur 1 min et de stocker cette moyenne dans un tableau à 10 cases. La moyenne sur 1 min en cours vient écraser la moyenne la plus ancienne puis le PIC fait la moyenne des 10 moyennes. Pour l'indicateur de variation de la moyenne, les 4 dernières moyennes sur 1 min sont regardées et suivant le nombre de fois que la moyenne monte et inversement le nombre de fois que la moyenne baisse, l'indicateur le plus approprié est affiché.
Pour le maximum, peu de chose à dire, si ce n'est qu'on peut le remettre à zéro en appuyant sur le bouton poussoir.
Une horloge est présente pour indiquer l'heure courante l'heure de la rafale. Elle n'est à régler qu'à la première utilisation (un cavalier à déplacer pour ne plus la régler) et un gros condensateur s'occupe de continuer à la faire fonctionner lorsque le module est éteint.

Je n'ai pas choisi d'afficher la direction malgré le fait que c'est une partie simple à faire. Il suffit juste avec le Convertisseur Analogique Numérique de mesurer la tension du potentiomètre de direction et d'en déduire l'angle.
Si vraiment c'est important pour certains, je pourrais publier un montage avec ce paramètre.

Maintenant voyons plus en détails la réalisation.
Le montage fonctionne sous 5V. La question de l'alimentation n'est pas abordé ici, un simple 7805 sur le montage final et c'est réglé..
Le cœur du montage est donc un microcontrôleur PIC 16F88 de chez microchip. Les PIC sont les microcontrôleurs les plus répandus et leur programmation est assez aisée. On trouve sur ebay des clones de programmateur qui fonctionne très bien et ne coûtent pas plus de 15€.
J'avais commencé par utilisé un PIC 16F84 mais je me suis vite vu à cours de place: 1Ko de code possible pour le 16F84 contre 4Ko pour le 16F88. Il faut dire aussi que je programme en langage C avec CC5X (je vois déjà les adeptes de l'assembleur me crier dessus). En attendant, ce langage me permet aisément de manipuler des nombres à virgule, d'effectuer des divisions, des multiplications...etc
Le PIC fonctionne à une fréquence de 20 MHz. J'ai calculé qu'au maximum (pour un vent de 200km/h !)  il y aura environ 5ms entre chaque impulsion. A 20Mhz, le PIC est capable d'effectuer toutes les instructions dans cet intervalle de temps.
L'heure est obtenue par le circuit DS1302 qui communique avec le PIC via un protocole I2C "fait maison". La capacité de 1F est chargée lorsque le circuit est alimenté et continue de faire fonctionner l'horloge quand le circuit est coupé. Pas la peine de régler l'heure à chaque démarrage.

Voici l'allure du schéma sous proteus:

Schéma ISIS

Les LEDs sont là pour le débeugage, elles ne sont plus présente sur le prototype finale. Le générateur d'impulsion simule les impulsions de l'ILS de l'anémomètre.
A noter qu'il faudra penser à rajouter un systéme anti-rebonds sur la maquette finale. En effet, le boutton poussoir comme l'ILS n'ont pas un contact net et précis. Le signal oscile avant de se stabiliser.
Or une oscilation (qui est de l'odre de la milliseconde) sur le signal de l'ILS est catastrophique. On verrait s'afficher des vitesse impensable. Le principe consiste donc à placer une résistance en paralèlle à un condensateur sur l'entrée à filtrer. On maintient ainsi la tension durant une durée T qui vaut à peu près R*C.

Filtre anti-rebond

Les valeurs des composants sont ici arbitraire. Pour l'ILS une résitance de 1k et un condensateur de 1µF devrait faire l'affaire. Pour le BP, de plus grosse valeurs peuvent être utilisées.

Voici la liste des composant nécessaire à la réalisation de ce module:
-1 PIC 16F88
-1 DS1302
-2 Quartz: 20Mhz et 32.768Khz
-1 Ecran LCD 4*20 (H44780)
-1 Boutton poussoir
-3 Résistances 10K 10K 1K
-3 Condensateurs 1F 1µF 1µF
-1 anémomètre, bien-sûr
 Le code source est téléchargeable plus haut. Notez qu'il faut MPLAB + CC5X pour le compiler. Sinon vous pouvez juste prendre le fichier .hex et l'envoyer dans le PIC ou bien analyser le code. De plus le code n'est pas forcément bien indenté.

Vidéos et photos:

Captures d'écran de la simulation ISIS

Pupitre d'essai

Prototype final

Dernière mise à jour: 23/12/09