Anémomètre et girouette connectés DIY à base d’ESP8266 – Jeedom – Bienvenue sur le forum de domotique-et-objets-connectes.fr

h2desgkcxu2dxdhoumgv-8247150

2y7im5xi7nmgwmvb5xuz-5568386
nqp4berusyttnqob09iu-8614516

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.

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.

xuyvuztaffmyiafabdir-1328433

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.

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.

Fabrication de l’anémomètre par impression 3D

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.)

Girouette

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)

Autres pièces

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.

Code Arduino / ESP8266

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”