Bonjour Ă tous,
Dans ce tutoriel, nous aborderons l’installation de capteurs météo tels que Girouette et anémomètre, plus tard nous complèterons avec un pluviomètre ou encore un capteur UVA/UVB.
© @seraphinou
Les capteurs météo les plus simples sont équipés d’un capteur à effet Hall qui émet une ou plusieurs impulsions. L’utilisation d’un tel capteur pour l’anémomètre nécessiterait le comptage des impulsions par seconde (fréquence) afin de connaître la vitesse du vent. C’est tout à fait réalisable avec l’IPX800 mais un peu plus compliqué qu’avec une sortie en Tension proportionnelle (0 à 5V par exemple) ou Courant (4-20mA par exemple).
Je porterai mon choix sur des appareils avec sortie en 4-20mA, plus simples à utiliser et beaucoup moins sensibles aux interférences que les sorties à tension proportionnelle.
Pour rappel, les capteurs avec sortie 4-20mA se connectent à une entrée analogique moyennant une petite résistance de 150 Ω
Pour plus de précision sur le branchement, voici un article.
Les entrées analogiques de l’ipx800 V5 sont identiques à celles de la V4, la transposition est donc très facile.
Dans un précédent tutoriel, je vous ai montré comment afficher le sens du vent sur le dashboard de l’ipx800 V5. Ceux qui ont loupé le sujet pourront le lire ici
A. l’anémomètre
Aujourd’hui, nous allons brancher un anémomètre à l’IPX800 V5, nous prendrons également un modèle avec sortie 4-20mA.
Un objet fonction fait la conversion de la donnée lue sur l’entrée analogique en vitesse (km/h).
Nous avons utilisé un modèle 4-20mA avec une plage de mesure allant de 0 à 30m/s, après une phase de tests et d’étalonnage, nous déterminons sa formule :
((x - 12596) * 0.000566679) * 3.6
Un anémomètre sait donner une vitesse instantanée.
Pour que cette vitesse soit exploitable, il faut calculer des moyennes, sur des périodes plus ou moins longues.
- La vitesse instantanée du vent est en fait une vitesse moyenne calculée sur une période courte, généralement 10 à 20 secondes.
- La vitesse moyenne est généralement calculée sur des périodes allant de 10 à 20 minutes.
En aéronautique par exemple, les calculs se font souvent de préférence sur 10 minutes, cela permettant de déceler les variations du vent. - La rafale se définit comme une brusque élévation de la vitesse instantanée du vent, dépassant d’au moins 18 km/h la vitesse moyenne calculée sur 10 ou 20 minutes.
Calculer des vitesses moyennes sur fenêtre glissante oblige à mémoriser un grand nombre de mesures pour en calculer la moyenne. Chaque nouvelle mesure provoque alors une réévaluation du calcul en supprimant la mesure la plus ancienne.
Nous avons choisi de faire une mesure par seconde, cela impliquerait la mémorisation de 600 variables
Nous opterons donc pour une méthode beaucoup plus économique en ressources IPX (variables et règles) qui consistera à générer notre fenêtre glissante par pas de 60 secondes :
Grâce aux compteurs à pas d’incrémentation variable, nous additionnerons les mesures dans les variables sM1 à sM10, tour à tour, à chaque impulsion de S1, ce qui permettra d’avoir toujours à disposition une représentation des 600 dernières mesures afin d’en calculer une moyenne.
Dans ce tutoriel, nous retiendrons donc ces paramètres :
- vitesse instantanée calculée sur une période de 10 secondes afin d’effacer toute erreur de mesure (interférences)
- vitesse moyenne calculée sur une période de 10 minutes en fenêtre glissante
- rafale la plus élevée au cours de la dernière heure
- rafale la plus élevée au cours de la journée (24h)
Création des objets et variables
Plutôt qu’une longue liste de tâches à faire sur l’ipx800, je vous joins un PDF, recensant tous les objets à créer
- des entrées analogiques virtuelles pour la mémorisation des calculs,
- des clignotants pour cadencer les mesures et maîtriser le temps qui s’écoule,
- des compteurs pour les Ă©tapes de calcul des vitesses moyennes et la gestion des 2 fenĂŞtres glissantes (10 secondes et 10 minutes),
- des fonctions,
- des comparateurs
NB : créez les objets dans l’ordre des numéros indiqués sur fond rouge afin de ne pas être gêné par les dépendances.
Configurez toutes les valeurs analogiques en mode REAL avec 1 décimale (ANA32, ANA8, Compteurs, résultats de fonctions)
Création d’une scène et des règles
Vous aurez également à créer une scène dans laquelle vous pourrez créer l’ensemble des règles.
Voici une représentation des règles sous forme de Tuiles.
Dans chaque tuile sont renseignés la commande (ON, OFF, …) ou l’opérateur (ET, OU, …), le type de tuile (Ana 32, Fonction, …) et éventuellement une valeur fixe comme c’est le cas pour la tuile 0
Sur la vue ci-dessus, vous avez un aperçu du widget que nous verrons plus tard.
Voici le PDF complet :
anémoV2 (2).pdf (244,6 Ko)
NB : les 2 objets clignotants devront être activés manuellement pour lancer les calculs.
Mise en place du Widget
Nous utiliserons un widget de la classe CANVAS-GAUGE. Vous trouverez plus amples explications sur ce site.
Le widget permettra d’afficher
- la vitesse instantanée (moyenne sur 10 secondes)
- la vitesse mini et maxi durant les 10 dernières minutes (délimitée en cyan)
- la rafale la plus élevée au cours de la dernière heure (orange)
- la rafale la plus élevée au cours de la journée (00h00 à minuit)
Créez un widget HTML et collez ce code :
<center>
<canvas id=anemoV2 data-type="radial-gauge" style="width:210px;height:210px;"
data-units="km/h"
data-title=""
data-min-value="0"
data-max-value="150"
data-minor-ticks="5"
data-color-value-box-rect="#222"
data-color-value-box-rect-end="#333"
data-needle-circle-size="7"
data-animation-duration="500"
data-animation-rule="linear"
data-animate-on-init="true"
data-animated-value="true"
data-color-plate="#222"
data-color-major-ticks="#ddd"
data-color-minor-ticks="#ddd"
data-color-title="#eee"
data-color-units="#ccc"
data-color-numbers="#eee"
></canvas>
</center>
<script async src="//cdn.rawgit.com/Mikhus/canvas-gauges/gh-pages/download/2.1.5/all/gauge.min.js"/>
Créez un autre widget et collez ce code javascript :
<script type="text/javascript">
/* Get state and set widget */
var ID;
var vent600mini,vent600maxi,rafale1h,rafale24h;
var gauge;
//IDs={vent10,vent600maxi,vent600mini,rafale24h,rafale1h};
var IDs=["327770","327754","327767","327768","327769"];
function init() {
//anemometre
ID=IDs[0];
getState((ipx) => {
gauge = document.gauges.get('anemoV2');
gauge.value=ipx.value;//vent10
});
//vent600maxi
ID=IDs[1];
getState((ipx) => {
vent600maxi=ipx.value;
});
//vent600mini
ID=IDs[2];
getState((ipx) => {
vent600mini=ipx.value;
});
//rafale24h
ID=IDs[3];
getState((ipx) => {
rafale24h=ipx.value;
});
//vent600mini
ID=IDs[4];
getState((ipx) => {
rafale1h=ipx.value;
});
gauge = document.gauges.get('anemoV2');
gauge.update({highlights:[{from:vent600mini,to:vent600maxi,color:'cyan'},{from:rafale1h-1,to:rafale1h+1,color:'orange'},{from:rafale24h-1,to:rafale24h+1,color:'red'}]});
}
function getState(cb) {
let ApiKey="ZoTxxxxxxxxxWR0W";
let uri = "/api/core/ana/"+ID+"?ApiKey=" +ApiKey;
fetch(uri, {method: "GET"}).then((ret) => { // Get IPX object
ret.json().then((ipx) => {
cb(ipx); // Return IPX state from API
});
});
}
/***/
/* Auto refresh (optional) */
function autoRefresh() {
setInterval(() => {
init();
}, 1000); // 1 sec
}
/***/
init();
autoRefresh(); // Optional
</script>
script
Modifiez la ligne n°7 avec les ID de vos variables et objets créés précédemment
Ils doivent être renseignés dans cet ordre :
- vent10 (renseigner l’ID du résultat de la fonction),
- vent600maxi (renseigner l’ID du résultat de la fonction),
- vent600mini (renseigner l’ID du résultat de la fonction),
- rafale24h (renseigner l’ID de la variable ANA32),
- rafale1h (renseigner l’ID de la variable ANA32).
Pour terminer, renseignez votre ApiKey
Je remercie @Seraphinou pour le temps accordé aux tests.
Have Fun
Date de dernière mise à jour : 28/06/2022