«

»

oct 02

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

Fourniture

Pret a etre installé

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 :-(

Compteur en place

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

Page de Visualisation 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&amp;VALUE1=14&amp;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