L'anémomètre
J'ai construit un anémomètre à coupelles rudimentaire constitué de 3 petits bols de plastique (de forme vaguement hémisphérique) fixés à l'extrémité de 3 légères tiges de bois. L'extrémité opposée des tiges de bois est fixée à un axe de rotation: quelque chose qui tourne facilement (dans mon cas: un ventilateur d'ordinateur n'ayant plus de pales).
Visez la légèreté: celui que j'ai fabriqué ne réagit pas du tout si la brise est trop légère.
Le capteur: un interrupteur reed
L'intérêt de notre montage d'un point de vue électronique, c'est qu'il comportera un capteur nous permettant de déterminer automatiquement la vitesse de rotation. J'aurais pu compter les tours au moyen d'un système optique (un duo LED infrarouge/phototransistor, par exemple). J'ai toutefois opté pour un capteur magnétique (qui demeure immobile), alors qu'un aimant est fixé à une des tiges de l'anémomètre.
Si j'avais eu besoin de mesurer avec précision le champ magnétique causé par l'aimant, j'aurais utilisé comme capteur un magnétomètre numérique (comme le HMC5883L) ou un capteur analogique à effet Hall (comme l'Allegro A1302). Mais pour compter les tours effectués par l'anémomètre, je n'ai besoin que de détecter la présence (ou l'absence) d'un champ magnétique: c'est pourquoi j'ai choisi d'utiliser un interrupteur reed.
L'interrupteur reed est constitué de deux lames conductrices qui entrent en contact uniquement lorsqu'elle se trouvent à l'intérieur d'un champ magnétique suffisamment intense (donc à proximité d'un aimant).
Pas d'aimant à proximité: l'interrupteur reed ne laisse pas circuler le courant
Aimant à proximité: l'interrupteur reed laisse circuler le courant
Ces deux contacts se trouvent à l'intérieur d'un petit tube en verre TRÈS FRAGILE: je m'étais procuré un lot de 5 interrupteurs reed, et j'en ai cassé 3 lors de la réalisation de ce projet!
Le circuit
On branche l'interrupteur reed à l'Arduino de la même façon qu'on brancherait un bouton poussoir. Lorsque l'aimant (qui est fixé à une des tiges de l'anémomètre) passe au-dessus de l'interrupteur reed, la pin 8 de l'Arduino sera soumise à un niveau logique HAUT (5 V), alors qu'elle sera soumise à un niveau logique BAS (0 V) le reste du temps.
Une LED branchée à la pin 13 de l'Arduino (ou simplement la LED qui se trouve déjà sur la carte) s'allumera à chaque passage de l'aimant, ce qui nous aidera à vérifier que tout fonctionne correctement.
Calcul de la vitesse
Le temps écoulé entre deux passages successifs de l'aimant représente la période de révolution de l'anémomètre.
On peu ensuite calculer la vitesse des coupelles; puisqu'elles sont en mouvement circulaire, elle parcourent une distance égale à la circonférence pendant une durée correspondant à la période:
vitesse des coupoles = (2 * pi * rayon)/période
...où le rayon est mesuré de l'axe de rotation jusqu'au centre des coupelles (c'était 15 cm dans mon cas).
S'agit-il de la vitesse du vent? Oui, dans l'hypothèse où les coupelles se déplacent aussi vite que le vent, mais ce n'est malheureusement pas le cas.
Pour obtenir la véritable vitesse du vent, il faut ensuite multiplier le résultat par une fonction d'étalonnage qui dépend de la forme et des dimensions de l'anémomètre et de sa vitesse de rotation! Pour trouver cette fonction, il faudrait donc mesurer le vent au même endroit et au même moment au moyen d'un anémomètre commercial correctement calibré, et produire une courbe de calibration.
Sinon, tout ce que nous mesurons représente une limite inférieure: nous savons que le vent va au moins aussi vite que les coupelles, dont nous connaissons la vitesse.
Un sketch
Voici un sketch qui affiche dans le moniteur série la période de rotation et la vitesse des coupoles.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/************************************************** | |
* Anémomètre | |
* | |
* Un interrupteur Reed est branché à la pin 8 | |
* Un aimant passe au-dessus de l'interrupteur reed | |
* à chaque tour de l'anémomètre | |
* | |
* http://electroniqueamateur.blogspot.com/2016/06/fabrication-dun-anemometre-arduino.html | |
***************************************************/ | |
unsigned long tempsDebut; // passage précédent de l'aimant | |
int etatPrecedent; // lors de du dernier passage dans le loop, | |
// l'aimant était là, ou pas? | |
void setup() { | |
pinMode(8, INPUT); // interrupteur Reed à la pin 8 | |
pinMode(13,OUTPUT); // LED indicatrice à la pin 13 | |
Serial.begin(9600); // moniteur série | |
etatPrecedent = digitalRead(8); // on vérifie si l'aimant est là ou pas | |
} | |
void loop() { | |
int etat, delai; | |
unsigned long tempsFin; | |
etat = digitalRead(8); // on vérifie si l'aimant est là ou pas | |
digitalWrite(13,etat); | |
if ((etat) && (!etatPrecedent)){ // l'aimant vient d'arriver | |
if (tempsDebut > 0){ // nous connaissons le moment du début de ce tour | |
tempsFin = millis(); // quelle heure est-il? | |
delai = tempsFin - tempsDebut; // durée du tour qui vient de se terminer | |
Serial.print("Periode :" ); | |
Serial.print(delai); | |
Serial.print(" millisecondes, Vitesse :"); | |
Serial.print(3.6*2*3.1416*0.15*1000/delai); | |
// (cette vitesse ne tient pas compte de la fonction d'étalonnage) | |
Serial.println(" km/h"); | |
} | |
tempsDebut = tempsFin; // mise à jour de la variable | |
} | |
etatPrecedent = etat; // mise à jour de la variable | |
} |
Pour une utilisation sur une longue période, il sera utile d'emmagasiner nos données, par exemple sur une carte SD, ou grâce à un service en ligne.
Yves Pelletier (Twitter, Facebook)