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).
Sommaire
- 1 Matériel nécessaire
- 2 Comment réaliser l’anémomètre
- 3 Comment réaliser la girouette
- 4 Comment ça marche ?
- 5 Conception électronique
- 6 Conception mécanique
- 7 Anémomètre
- 8 Assemblage
- 9 Etalonnage de la girouette
- 10 Intégration des mesures dans Jeedom (ou un autre serveur domotique à l’aide de MQTT)
- 11 Conclusions et améliorations futures
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.
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.
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 :
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 |
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 :
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
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 !
- ESP32, broches GPIO et fonctions associées. I/O, PWM, RTC, I2C, SPI, ADC, DAC
- ESP32-CAM. Broches et équipements ESP-EYE, AI Thinker, TTGO T-Camera, M5Stack Timer Camera…
- ESP32-CAM. Quel modèle choisir ? ESP-EYE, AI Thinker, TTGO T-Camera, M5Stack Timer Camera…
- M5Stack Atomic GPS. Tracker ESP32 TinyGPS++, export GPX sur carte SD, visualisation sur Google Maps ou VSCode
- Home Assistant. Installer le snap sur NAS Synology sur une machine virtuelle Ubuntu
- ESP32-CAM. Souder l’antenne externe pour améliorer la portée et la stabilité du flux vidéo
Avez-vous aimé cet article ?