Mesure de la consommation d’eau [Codesys, PLCLink, Plomberie]
Dans la catégorie on continue de mesurer (âpres le courant et la température) ce que l’on consomme pour être économe, il y a l’eau
La consommation de l’eau n’est pas une chose très évidente a mesurer, bien souvent pour pouvoir la contrôler il faut aller voir son compteur qui est situé au fond d’un vieux placard, sous une grosse dalle et des gros bloc de polystyrène au bout de son jardin, bref un truc pas évident (chez moi, c’est dans le cellier derrière le chauffe eau)
Mais heureusement dans la plupart des cas l’arrivé d’eau est situé a proximité de l’arrivé électrique et donc de votre automate, bien souvent l’ensemble des energies sont passé dans la même tranché lors de la construction de la maison
Ce qui n’est pas le cas chez moi, l’eau arrivant a l’arriéré de la maison, et l’électricité a l’avant, heureusement pour moi, j’avais passé un câble avec 8 conducteurs entre l’automate et le cellier dans lequel le compteur est situé
Et pour pouvoir mesurer cette consommation (a moins d’être déjà équipé sans le savoir) il va falloir ce mouiller
Tout d’abord il va vous falloir mettre en place un nouveau compteur ou un compteur supplémentaire, pour moi ce sera un compteur supplémentaire, je ne vais pas toucher a mon compteur déjà en place
ce nouveau compteur est équipé d’une sortie contact sec
, pour résumer c’est un interrupteur qui va ce fermer tout les x Litre d’eau

Lors de mes recherche je n’ai trouvé que deux modelés ayant cette fonction (j’ai peut être pas assez cherché)
compteur a 42 € + capteur a 79 € le tout de marque Sappel
Le second chez Planète Domotique, REF: USLF-20 c’est un compteur de fabrication italienne (GIOANOLA) , et il est fournit complet, c’est a dire compteur plus sonde plus raccords pour 75.80€, ce modelé autorise un debit de 2.5 m3/ h ce qui pour une utilisation courante sera largement suffisant (mon compteur de base est un 1.5m3/h), des modelés plus gros existent ci besoin ->
Attention ses compteurs sont uniquement destiné a l’eau froide, pour l’eau chaude il y a un modèle spécial chez Gioanola
J’ai donc choisi le modelé de chez planète domotique dans la version, une impulsion tout les 0.25L, sa sera plus facile de calculer un débit ainsi
Pour fonctionner corectement ce compteur a besoin d’être installé a l’horizontal
Je vous passe les détails de la plomberie et voici le résultat une fois en place, on ce rend pas compte sur la photo, il est au fond du cellier, a 2,5 M au dessus du chauffe eau, c’était super marrant a installer
Codesys
L’information du contact sera traité sur front montant, c’est a dire que l’on prendra en compte l’information que lors du passage de l’etat 0 vers l’etat 1, c’est état n’est valable que sur un seul cycle d’automate, ainsi si le compteur s’arrêtait (et sa va arriver) sur la position correspondant au contact fermé on ne continuerai pas de compter
Le programme permet :
- Un compteur Global de consommation, image de votre compteur principal (vous pourrez forcer la valeur en cour de votre compteur)
- Deux compteur journalier avec possibilité de réinitialisation
- Calcul approximatif du débit de l’eau
Les differentes variables correspondant au quantité d’eau seront déclaré en global persistant
J’ai utilisé des double mot pour les quantité consommé au cas ou on dépasse 65535 L
Déclaration des variables Globale Retain
nPrixM3eau:REAL; (* Prix du M3 d'eau *) nCntQuarterLiter:BYTE; (*comptage des quart de litre d'eau*) wConsoEau:DWORD; (*Consomation de l'eau en litre *) wConsoEauTemp:DWORD ; (*consomation temporaire d'eau *) wConsoEauTemp2:DWORD ; (*consomation temporaire d'eau *)
Déclaration des variables Local
VAR dtRAZeau:DINT; (*Date de Raz de la conso d'eau *) dtRAZeau2:DINT; (*Date de Raz de la conso d'eau 2 *) nValueRAZeau:INT; (* Memorisation de la valeur lors de la raz de l'eau*) nValueRAZelec:INT; (* Memorisation de la valeur lors de la raz de l'elec*) nVAlueSinceRAZelec:INT; nPrixEau:REAL; nPrixEau2:REAL; R_T1: R_TRIG; nConsoM3:WORD; bloc1: BOOL; bloc2: BOOL; bloc3: BOOL; bloc4: BOOL; nDebit:REAL; nPulseValue1:DWORD; nPulseValue2:DWORD; nPulseValue3:DWORD; nPulseValue4:DWORD; nTimeDebitEau:DWORD; bGraph1:BOOL; bGraph2:BOOL; bGraph3: BOOL; bGraph4: BOOL; bGraph5: BOOL; bWaterFlow: BOOL; END_VAR
Programme
(* Eau *) IF bBoutRAZeau=TRUE THEN (* Raz de la consommation d'eau *) dtRAZeau:=CurDate; wConsoEauTemp:=0; END_IF IF (bBoutRAZeau2=TRUE) OR (PRG_ST_COM_MW3_PILOTAGE.b_Pilote[14]=TRUE) THEN (* Raz de la consommation d'eau *) dtRAZeau2:=CurDate; wConsoEauTemp2:=0; END_IF R_T1(CLK:= diPulseWater); (* FRont Montant de diPulseWater *) IF R_T1.Q=TRUE THEN (* Incrementation du compteur d'eau *) nCntQuarterLiter:=nCntQuarterLiter+1; CASE nCntQuarterLiter OF 1: bloc1:=TRUE; bloc2:=FALSE; bloc3:=FALSE; bloc4:=FALSE; 2: bloc2:=TRUE; 3: bloc3:=TRUE; 4: bloc4:=TRUE; END_CASE IF nCntQuarterLiter>=4 THEN wConsoEau:=wConsoEau+1; wConsoEauTemp:=wConsoEauTemp+1; wConsoEauTemp2:=wConsoEauTemp2+1; nCntQuarterLiter:=0; END_IF (* Calcul du temps entre deux impulsion *) nPulseValue2:=nPulseValue1; nPulseValue1:=STNow.ulLow; nPulseValue4:=nPulseValue3; nPulseValue3:=STNow.ulHigh; END_IF (* Calcul du bebit d'eau *) nTimeDebitEau:=nPulseValue1-nPulseValue2; nDebit:=(60000000/(DWORD_TO_REAL(nTimeDebitEau))/4); IF STNow.ulLow>(nPulseValue1+8000001) OR STNow.ulHigh<>nPulseValue3 THEN (* Forcage a 0 du debit apres un long moment sans conso *) nDebit:=0; END_IF IF nDebit<>0 THEN (* Pour affichage sur iPhone eau en cour d'ecoulement *) bWaterFlow:=TRUE; ELSE bWaterFlow:=FALSE; END_IF IF nDebit>5 THEN (* Affichage d'un graph avec une echelle differente sur la visu *) bGraph1:=TRUE; bGraph2:=FALSE; bGraph3:=TRUE; bGraph4:=TRUE; bGraph5:=TRUE; ELSIF nDebit>10 THEN bGraph1:=TRUE; bGraph2:=TRUE; bGraph3:=FALSE; bGraph4:=TRUE; bGraph5:=TRUE; ELSIF nDebit>15 THEN bGraph1:=TRUE; bGraph2:=TRUE; bGraph3:=TRUE; bGraph4:=FALSE; bGraph5:=TRUE; ELSIF nDebit>20 THEN bGraph1:=TRUE; bGraph2:=TRUE; bGraph3:=TRUE; bGraph4:=TRUE; bGraph5:=FALSE; ELSE bGraph1:=FALSE; bGraph2:=TRUE; bGraph3:=TRUE; bGraph4:=TRUE; bGraph5:=TRUE; END_IF (* Conversion pour affichage en M3*) nConsoM3:=DWORD_TO_WORD(wConsoEau/1000); (* Calucul du prix de la consomation d'eau *) nPrixEau:=(wConsoEauTemp/1000)*nPrixM3eau; nPrixEau2:=(wConsoEauTemp2/1000)*nPrixM3eau;
Page Visu Codesys
Retrouvez l’essentiel du programme codesys dans cette archive CONSOEAU
Il vous restera un peut de travail a effectuer, comme reprendre les déclarations de données globale
Il n’y a pas la partie faisant la liaison entre codesys et PLCLink, c’est relativement simple a faire la plupart des explication ont déjà été fournie dans d’autres article, mais je pourrait l’ajouter si quelqu’un en fait la demande
Explication :
Le capteur est câblé sur diPulseWater
Les bools bGraphx permettent sur la visu d’afficher un graph different suivant le debit, ce qui permet d’avoir une échelle adapté suivant le moment (c’est juste pour le fun)
nCntQuarterLiter, sert a compteur les quarts de litre consommé puisque mon compteur pulse tout les 0.25L, il sont egalement utilisé pour afficher les petits carré rouge sur la visu
La valeur pour le debit est approximative, je calcul le temps entre chaque impulsion donc tout les 0.25L et j’en deduit le debit, si cette valeur est differente de 0 l’icone water de PLCLink ce met a couler
Les data StNow, renvoie des valeur relative au temps de l’automate dans la source vous verrez la routine qui le récupère la date et heure (un jour je ferai un article a ce sujet)
PLCLink
<room id="1"> <title>Eau</title> <items> <item id="0"> <title></title> <name>Heure</name> <description></description> <type>direct</type> <affichage>date</affichage> <IW><!--#GETTIMEDATE FORMAT=%H:%M:%S--></IW> </item> <item id="1"> <title></title> <name>Debit</name> L/Min <type>direct</type> <unit/> <affichage>water</affichage> </item> <item id="2"> <title></title> <name>Consommation</name> <description>Total</description> <type>lineaire</type> <unit> M3</unit> <coef>1</coef> <offset>0</offset> <format>%.f</format> </item> <item id="3"> <title></title> <name>Consommation</name> <description>Temp 1</description> <type>lineaire</type> <unit> L</unit> <coef>1</coef> <offset>0</offset> <format>%.f</format> </item> <item id="4"> <title></title> <name>Reset</name> <description>Temp 2</description> <type>direct</type> <unit/> <IW>RESET</IW> <affichage>button</affichage> <wagolink>http://192.168.77.180/WRITEPI?ADR1=MW3&VALUE1=14&FORMAT1=%d</wagolink> </item> <item id="5"> <title></title> <name>Consommation</name> <description>Temp 2</description> <type>lineaire</type> <unit> L</unit> <coef>1</coef> <offset>0</offset> <format>%.f</format> </item>
Sa fait maintenant un peut plus d’une semaine que c’est en place, j’ai ajusté les quantité d’eau des chasses d’eau, teste tout les programmes du lave vaisselle afin de trouver le plus économique ….
N’hésitez pas a poser vos question, ou apporter vos commentaire (en dessous ou sur le Forum) afin de vous fournir plus d’information ou de faire évoluer l’application, de plus il est fort possible que j’ai oublier certains éléments.
Apportez vos commentaires sur cet article directement sur le Forum






[...] Vous vous souvenez sans doute de l’article sur la « Mesure de la consommation d’eau » [...]