Anémomètre et girouette connectés DIY à base d'ESP8266 • Domotique et objets connectés à faire soi-même

j4bznnbihshggzjfrmi5-7099822
dgavhxxjkpbmilxscnkq-5129992

Dans ce tutoriel je vous propose un projet pour réaliser un anémomètre connecté équipé d’une girouette. Si vous êtes équipé d’une imprimante 3D, vous n’aurez qu’à imprimer les fichiers des composants mécaniques qui se trouvent sur GitHub (ici) ou les plateformes d’échanges de fichiers STL.

Pour réaliser l’anémomètre, nous utiliserons un capteur de champ magnétique à effet Hall qui va permettre de compter le nombre de rotations réalisées par l’hélice de l’anémomètre.

Pour déterminer la direction du vent, nous allons fabriquer un encodeur optique de position  à l’aide de Leds et de phototransistors.

Pour la partie Arduino, j’ai opté pour le module ESP8266 Wemos D1 mini. Ce module est très compact et très économique (environ 5€, article de présentation).

Matériel nécessaire

Pour réaliser ce projet vous aurez besoin du matériel suivant :

Le budget de réalisation de ce projet est d’environ 30€.

Comment réaliser l’anémomètre

Il existe deux grands principes pour réaliser un anémomètre. Le plus facile et de compter le nombre de tour réalisé par une hélice entrainée par le vent. C’est le principe retenu pour ce projet. Le second grand principe est la mesure par ultrason retenu par Netatmo pour son anémomètre connecté NWA01. Ce sera pour un prochain projet…

Pour réaliser l’anémomètre, je vous propose donc de réaliser un compte tour à l’aide d’un capteur de champ magnétique qui va changer d’état en présence d’un aimant (pour en savoir plus sur l’effet Hall). Dans le cadre d’un projet DIY, on cherche toujours à minimiser le coût des composants (et à les acheter facilement), c’est pourquoi j’ai opté pour un us1881. Vous pouvez en acheter par lot de 2 sur Amazon pour environ 3,70€. L’us1881 est un capteur qui passe à l’état bas (LOW) en présence d’un pole Sud. Dans son principe de fonctionnement l’us1881 a besoin d’être “réamorcé” par le pole Nord de l’aimant pour pouvoir de nouveau être employé pour détecter le tour suivant. Nous aurons donc besoin de 2 aimants permanents. On en trouve pour moins de 7€ le lot de 20 sur Amazon (diamètre 3 x 6 mm).

Comment réaliser la girouette

La détermination de la direction du vent est un peu plus compliquée à réaliser. Certains projets proposés sur internet utilisent un potentiomètre angulaire libre à 360 degrés (lire l’article sur le Keyes KY-040). Le problème, c’est qu’il est impossible de déterminer la position absolue du capteur. A chaque redémarrage de l’Arduino, il faut re-déterminer la position initiale (zéro) à partir de laquelle on compte dans un sens ou dans l’autre le nombre d’incréments dont s’est déplacée la flèche de la girouette.

Pour ce projet, je vous propose de déterminer la position angulaire à l’aide d’un encodeur optique réalisé à l’aide de phototransistors et de Leds. Tout comme la capteur à effet Hall, un phototransistor se comporte comme un interrupteur et change d’état (passe à l’état LOW) en présence de lumière.

Il existe bien d’autres solutions (magnétique, gyroscope…)…et donc encore plein de projets à proposer !

Le plus facile à trouver sur les sites marchands est le Vishay TEPT4400. On le trouve par exemple pour moins de 4,50€ sur eBay. Ce phototransistor peut être alimenté en 5 Volts. Il est sensible de 440 à 800nm avec un maximum à 570nm, ce qui correspond à la couleur jaune. Cependant, son spectre de détection est assez large ce qui permet de choisir un autre couleur (rouge, vert, bleu), il fonctionnera tout aussi bien. La documentation technique est disponible ici.

uqxt8ru8p6uaxyyfw2zd-1947654

Sensibilité spectrale du phototransistor Vishay TEPT4400. Sensibilité maximale à 570nm.

Comment ça marche ?

En plaçant les Led sur un cercle et en découpant dans un disque tournant trois lumières. Les lumières sont découpées de telle sorte que l’on ne peut avoir qu’un seul changement d’état d’un phototransistor à chaque changement de position. C’est le principe du code de Gray (détaillé ici), mais sans avoir besoin de coder quoi que ce soit. Avec cette méthode, on perd un  peu en précision (30 positions possibles, soit un résolution de 12°) à la place des 32 positions théoriques (25), mais c’est encore largement suffisant pour déterminer la direction du vent (4 directions cardinales et 4 positions intermédiaires).

Dans cette première version, je n’ai pas développé d’algorithme pour déterminer l’orientation à partir d’une orientation connue de la girouette. Il faudra en passer par un étalonnage “à la main” et la coder “en dure” dans le programme Arduino. C’est assez simple, il suffit de repérer la position décimale correspondant aux orientation de la girouette en vous aidant de la boussole d’un smartphone.

Si vous avez mis au point un algorithme générique, n’hésitez pas à proposer un commit dans le projet github ou la partager dans les commentaires de l’article.

Pour en savoir plus sur le fonctionnement, lisez cet article plus détaillé.

Conception électronique

Coté branchement, le circuit est assez simple et ne comporte que des résistances. Le circuit est composé de deux blocs :

  • Le premier bloc constitue l’encodeur de position angulaire. On alimente les 5 Leds directement sur la broche +3V de la Wemos (ce qui permet par la même occasion d’économiser 5 résistances et gagner en place). Le phototransistor fonctionne comme un interrupteur. Il passe à l’état Bas (LOW) lorsque suffisamment de lumière est captée. La plus grande broche est reliée au GND. Une résistance de 10 kΩ est placée entre l’alimentation 5V et la plus petite broche sur lequel on viendra également récupérer le signal sur une entrée numérique de la Wemos.
  • Le second circuit permet de mesurer la vitesse du vent à l’aide d’un us1881. L’us1881 possède 3 broches dont voici le branchement (faces inclinées face à vous) : * La broche de gauche au +5V * La broche centrale doit être reliée au GND. * La broche de droite permet de récupérer l’état du capteur sur une entrée numérique de l’ESP * Les deux broches extérieures (+5V / signal) doivent être reliées par une résistance de 10 kΩ

    * Isolez les broches extérieures avec de la gaine thermo

Suivez le schéma de branchement pour fabriquer le circuit sur une plaque perforée préalablement découpée (largeur 46mm x hauteur 42mm). Je vous conseil de ne pas souder la Wemos directement sur la plaque perforée de manière à pouvoir la débrancher facilement du circuit en cas de problème. Le téléversement est quelque fois capricieux et il faut retirer la carte du circuit pour pouvoir le faire.

e6vl3ule7bn3uang7glk-9191364

ct8efof4czq4nahny1yd-2013886

Face Wemos du circuit

Face arrière du circuit (us1881 visible)

Je tiens à m’excuser pour la qualité des soudures (je vais choquer les plus pros d’entre vous !). J’ai fais quelques essais complémentaires : fonctionnement sur batterie, piloter l’allumage des Leds, cassé mes soudures en mettant au point la procédure d’assemblage…, bref tout ce qu’il faut pour obtenir ça !

Conception mécanique

J’ai opté pour Autodesk Fusion 360 qui est gratuit pour les étudiants et les enseignants (durant 3 ans). Il y a encore quelques mois (au moment ou j’ai commencé à le prendre en main), Fusion 360 était également gratuit pour les Makers et les petites entreprises. C’est un peu dommage, espérons qu’Autodesk reviendra sur sa politique commerciale.

Vue d’ensemble de l’anémomètre, de la girouette et sur support de fixation mural.

Vous trouverez le fichier Fusion 360 ainsi qu’un export au format STEP dans le dossier CAO du projet github.

L’anémomètre comporte 17 pièces à imprimer en 3D. En voici la présentation :

Sous-ensemble Illustration

Chaque hélice (3 au totale) vient se loger entre deux demi coques (la supérieure n’est pas représentée). Chaque hélice est fixée par une vis M3x20. La coque inférieure comporte un logement pour un contre écrou M5. L’axe de l’anémomètre sera réalisé avec une tige fileté M5 x 105mm

Le boitier permet de loger :

  • La Wemos d1 mini
  • La carte électronique vient se loger dans la rainure.
  • Sur l’axe de rotation de l’anémomètre on viendra visser le support des 2 aimants
  • Des renforts latéraux permettent de rigidifier le boitier et guider les tiges filetés pour l’assemblage

Ce support comporte un logement pour le capteur à effet Hall. Il viendra se glisser sur la tige fileté et permet de maintenir la carte électronique est position.

Cette plaque permet de réaliser les fonctions suivantes :

  • Positionner les 5 phototransistors
  • Lier les deux boitiers (anémomètre et girouette)
  • Fixer le boitier au mur

On viendra insérer (en force) un roulement de chaque coté puis l’insérer dans le logement central de la plaque de liaison.

Le roulement supérieur pour l’axe de l’anémomètre. Le roulement inférieur pour l’axe de la girouette.

L’épaulement permet de positionner la plaque support des Leds de l’encodeur optique.

En bas se trouve le logement pour le second roulement de l’axe de la girouette.

Ce support permet de positionner les 5 Leds en vis à vis des phototransistors. Le support est positionné verticalement dans le boitier par l’épaulement. Les tiges filetés réalisent le positionnement angulaire.

Ce disque permet d’encoder la position de la girouette (les explications plus bas). Il viendra se visser sur l’axe de la girouette. Mettez un point de colle forte pour le fixer.

La girouette est composée de 3 pièces. Deux demi coques et la flèche. 4 vis M3 pour assembler le tout.

Tous les fichiers STL se trouvent dans le dossier STL du projet github. Voici un tableau récapitulatif du temps d’impression et de la longueur de fil (théorique) nécessaire. Pour fabriquer mon anémomètre, j’ai utilisé ma Dagoma #discovery200. Si vous avez besoin, j’ai écrit récemment un article qui explique comment exporter les objets au format STL depuis Fusion 360 et comment configurer et utiliser la version originale de Cura à la place de Cura by Dagoma.

J’ai utilisé du PLA pour la réalisation. Le PLA reste biodégradable, mais à long terme. Il faudra mettre votre anémomètre connecté à l’abris des intempéries car il n’est pas étanche dans cette version.

Anémomètre

Pièce Longueur de PLA (m) masse de PLA (g) Temps d’impression (min)
Axe central 0,42 1 5
Blocage circuit 0,67 2 6
Boitier anémomètre 11,15 33 120
Couvercle 3,52 10 38
3 hélices 8,21 24 92
Support aimants 0,25 1 3
Support hélice inférieur 2,89 9 27
Support hélice supérieur 2,88 9 28
Support us1881 0,83 2 8
Totaux 30,4 m 90g 322 min (5h30 env.)
Pièce Longueur de PLA (m) masse de PLA (g) Temps d’impression (min)
Boitier girouette 8,89 27 83
Flèche girouette 6,04 18 66
Disque encodeur de position 1,15 3 13
Support Leds 3,13 9 33
Totaux 19,2m 57g 195 min (soit 3h15 environ)
Pièce Longueur de PLA (m) masse de PLA (g) Temps d’impression (min)
Plaque de liaison 7,03 21 67
Support mural 4,7 14 42
Totaux 11,73m 35g 109 min (soit 1h49′ environ)

Vous aurez donc besoin d’environ 62m de PLA (soit 180g environ). Le temps d’impression 3D total est d’environ 10h30.

Boitier anémomètre

Support us1881 + blocage circuit

Blocage circuit électronique

Capot boitier anémomètre

Support aimants

h8boyka0bwlfc1ivyohc-4687836

Plaque de liaison

Axe central : support de roulement

Girouette

Boitier girouette + système d’encodage direction du vent

Le code du projet est disponible sur github ici. Le projet github contient les éléments suivants :

  • Fichiers CAO aux formats STEP et f3d (Autodesk Fusion 360)
  • Fichiers STL à imprimer en 3D
  • Programme pour ESP8266 (ESP-12) ou Arduino (en modifiant les adresses)

Le programme permet dans cette version de réaliser les fonctions suivantes :

  • Se connecter à votre réseau WiFi
  • Se connecter à un Broker Mosquitto. Si vous découvrez, voici un article de présentation
  • Mesurer la vitesse du vent durant 5 secondes
  • Mesurer la direction du vent
  • Publier à l’aide du protocole MQTT sur le broker Mosquitto la vitesse du vent en km/h, m/s ainsi que la direction du vent

Toutes les broches nécessaires se trouvent au début du programme dans des variables distinctes. J’ai utilisé le repérage des broches de NodeMCU. Avant de téléverser le programme, n’oubliez pas de modifier les variables suivantes : #define wifi_ssid “SSID” #define wifi_password “MOTDEPASSE” #define mqtt_server “IPSERVEURMQTT” #define mqtt_user “guest”

#define mqtt_password “guest”

Vous aurez peut être besoin d’ajouter les librairies ESP8266WiFi et pubsubclient à votre IDE Arduino.

Si vous n’avez pas de Broker MQTT, mettez les lignes en commentaire dans le programme pour éviter de solliciter inutilement votre réseau WiFi.

Assemblage

Voici les étapes d’assemblage :

Etape Photo
1. Assemblez les sous-ensembles

1.1 La flèche de la girouette en vissant les deux coques ainsi que la flèche. Passez l’axe (tige fileté diamètre 5) en le laissant dépasser de la hauteur d’un écrou M5 frein puis serrez. Vissez un écrou frein M5 en bas et bloquez la flèche par un second écrou 1.2 L’hélice de l’anémomètre. Commencez par insérer un écrou M5 dans le logement du support inférieur et 3 écrous M3. Insérez les hélices dans le logement. Refermez le boitier et fixez les hélices à l’aide de 3 vis M3. Vissez l’axe de l’anémomètre et bloquez le avec un écrou frein M5 (au dessus). 1.3 Insérez le premier aimant dans un logement. Prenez le second aimant et cherchez la face opposée. Insérez l’aimant dans le 2nd logement dans cette position. Si le capteur us1881 ne fonctionne pas c’est que la face n’est pas correcte. 1.4. Insérez un roulement dans le capot supérieur 1.5 Insérez l’axe de l’anémomètre dans le capot supérieur et vissez un écrou M5 pour l’axe de l’anémomètre dépasse de 52mm. Vissez le support d’aimants et bloquez le avec un autre écrou.

1.6 Insérez (en force) 2 roulements dans le support central et insérez ce dernier dans le logement de la plaque de liaison.

Hélice de l’anémomètre assemblé, roulement du capot inséré, support de roulement assemblé et en position

2. Insérez le roulement dans le logement du boitier de la girouette. Elle est montée serrée dans le logement.3. Insérez l’axe de la girouette dans le boitier. Réglez la hauteur pour que l’axe viennent à la même hauteur que le bord supérieur du boitier

4.Utilisez 2 écrous M5 pour bloquer l’axe de la girouette dans cette position (vissez jusqu’au roulement)

Flèche de la girouette assemblée. Axe réglé.

 5. Insérez le support de Leds dans le boitier en laissant sortir les fils d’alimentation. 6. Insérer 2 tiges fileté (diam. 4). Une de chaque coté du bras de fixation. 7. Vissez 2 écrous M4 pour maintenir le support de Led en position 8. Faites passer les fils d’alimentation des Leds par le trou de la platine de liaison. 9. Soudez les fils d’alimentation des Leds de l’encodeur, le pole positif sur le +3V de l’ESP8266.

10. Visser le disque d’encodage en laissant environ 2mm de filetage. Collez le disque sur l’axe à l’aide d’une colle forte

 1. descendez la plaque de liaison contre le boitier de la girouette
12. Insérez le capteur à effet Hall dans son logement. Prenez garde à ne pas tordre les broches.

Support us1881

13. Insérez le boitier supérieur dans les tiges filetées et faites le descendre en insérant la carte électronique dans la glissière. 14. Mettez en place le capteur en faisant glisser le support sur la tige fileté

15. Terminez en mettant en place le bloc de maintient de la carte

Anémomètre – vue du dessus

16. Mettez en place le capot en insérant l’axe de l’anémomètre dans le roulement. 17. Mettez en place les 2 autres tiges filetées et vissez 4 écrous M4 pour fermer le boitier

18. Vissez l’arbre de fixation dans le support mural à l’aide d’un écrou et d’une vis M6

Anémomètre assemblé

A part travailler dans un laboratoire aéro ou automobile, j’imagine que vous n’avez pas accès à une soufflerie pour étalonner votre anémomètre. Il va donc falloir en passer par la voiture. Soyez extrêmement prudent lors de vos essais. J’ai été jusqu’à 100km/h sans le moindre problème de tenue mécanique.

Sinon, voici comment on doit procéder. En mesurant plusieurs fois le nombre de rotation de l’hélice à différentes vitesses, on peut en déduire la vitesse du vent aux autres. Placez les points sur Excel et tracer la droite de régression linéaire pour obtenir la relation entre la vitesse et le nombre de révolutions de l’hélice. J’en convient, ce n’est pas d’une grès grande précision mais on reste dans le domaine du DIY après tout.

Courbe d’étalonnage de l’anémomètre

Voici les caractéristiques de cet anémomètre :

  • Vitesse minimale du vent : environ 2m/s soit environ 8km/h
  • Relation entre la vitesse de rotation et la vitesse du vent (en km/h) : V = ( nbrTour + 6,174 ) / 8,367 (avec une marge d’erreur d’environ 3%)
  • Vitesse étalonnée jusqu’à 100 km/h

Etalonnage de la girouette

Pour étalonner la girouette, je n’ai pas encore mis en équation l’encodeur. Pour cette première version, je vous propose de repérer la position de l’encodeur par rapport à l’orientation réelle de la girouette. Utilisez la boussole de votre smartphone. L’avantage de cette méthode, c’est qu’il n’y a qu’un test à faire, donc c’est facile à programmer.

Intégration des mesures dans Jeedom (ou un autre serveur domotique à l’aide de MQTT)

Après chaque mesure, le programme publie sur le broker MQTT la vitesse (en m/s et en km/h) ainsi que la direction du vent (sous la forme d’une lettre). Si vous découvrez MQTT et son utilisation dans Jeedom, je vous renvoie vers cet article précédent qui détail étape par étape comment procéder.

Comme d’habitude, Jeedom détecte automatiquement les nouveaux topics publié sur le broker MQTT et ajoute comme un grand un nouveau appareil qu’il ne reste plus qu’à configurer.

Et voici le rendu sur le dashboard.

Conclusions et améliorations futures

pwn3n7tvhhevdguhghel-5617400

J’espère que vous avez apprécié ce tutoriel. Cette première version comporte encore quelques défauts de jeunesse. Dans la prochaine version, j’aimerai améliorer les points suivants :

  • Tout d’abord la conception pour rendre l’anémomètre parfaitement étanche et résistant aux intempéries.
  • Remplacer l’encodeur optique par un capteur magnétique moins gourmand en énergie que les Led et plus facile à programmer. Je suis tombé sur un os pour piloter l’alimentation des Leds avec un transistor IRF520. La tension d’alimentation des Leds est trop basse (2.3V), rendant la détection par phototransistor aléatoire. Cette solution permettrait également de faire fonctionner l’anémomètre sur batterie (ou sur pile 9V) en gérant le sleep mode de l’ESP8266.
  • Et pourquoi pas se lancer dans un anémomètre par ultrason

N’hésitez pas à me laisser vos suggestions ou questions dans les commentaires.

A très bientôt pour un nouveau projet !

Avez-vous aimé cet article ?